using System;
namespace EventHandler类
{
class Program
{
/*
背景:在事件发布和订阅的过程中,定义事件的类型(委托类型)是一件重复性工作
语法:public delegate void EventHandler(object sender,EventAge e);
第1参数 sender 表示引发事件的对象(传递该参数通常是this)
第2参数 e 表示事件中包含的数据
*/
static void Main(string[] args)
{
//创建学校铃声类
SchoolRing sr = new SchoolRing();
//创建学生实例
Students students = new Students();
//订阅铃声委托
students.SubscribeToRing(sr);
Console.WriteLine("请输入大铃声参数(1:表示上课铃;2:表示下课铃):");
//打铃动作
sr.Jow(Convert.ToInt32(Console.ReadLine()));
Console.ReadLine();
}
}
/// <summary>
/// 声明一个委托类型
/// </summary>
/// <param name="ringKind">表示铃声种类(1 表示上课铃声;2 表示下课铃声)</param>
public delegate void RingEvent(object sender,EventArgs e);
public class SchoolRing
{
public event RingEvent OnBellSound;//委托发布
//(插入知识点:添加event 以保证事件订阅可靠性,在发布委托的定义中加上event)
//读取输入,并且做出判断
public void Jow(int ringKind)
{
if (ringKind == 1 || ringKind == 2)
{
Console.Write(ringKind == 1 ? "上课铃响了," : "下课铃响了");
if (OnBellSound != null)
{//不等于空,说明它已订阅了具体的方法
OnBellSound(this,new RingEventArgs(ringKind));
//为了安全,事件成员只能由类型本身触发
//回调OnBellSound委托所订阅(引用)的具体方法
}
}
else
{
Console.WriteLine("这个铃声参数不正确!");
}
}
}
public class Students
{
//学生订阅铃声这个委事件
public void SubscribeToRing(SchoolRing schoolRing)
{
schoolRing.OnBellSound += SchoolJow;
}
private void SchoolJow(object sender,EventArgs e)
{//e强制转化内RingEventArgs类型
if (((RingEventArgs)e).RingKind == 2)
{
Console.WriteLine("同学们开始课间休息");
} //e强制转化内RingEventArgs类型
else if (((RingEventArgs)e).RingKind == 1)
{
Console.WriteLine("同学们开始认真学习");
}
}
//与上面关联--执行事件
//private void SchoolJow(int ringKind)
//{
// if (ringKind == 2)
// {
// Console.WriteLine("同学们开始课间休息");
// }
// else if (ringKind == 1)
// {
// Console.WriteLine("同学们开始认真学习");
// }
//}
//取消订阅铃声动作
public void CancelSubscribe(SchoolRing schoolRing)
{
schoolRing.OnBellSound -= SchoolJow;
}
}
//新添加的
public class RingEventArgs : EventArgs
{
private int _ringKind; //描述铃声种类的字段
public int RingKind
{
get { return _ringKind; } //获取打铃参数
}
public RingEventArgs(int ringKind)
{
this._ringKind = ringKind; //在构造器中初始化铃声参数
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107151.html