事件的概念:
Event,基本上说是一个用户操作,例如按键、按下、点击、鼠标移动等等,或者一些系统提示信息,如手机里面
通知,应用程序需要在事件发生时响应事件
系统常用事件:
按钮点击事件。
例如:
this.button1.click+=new SystemEventHanlde(f1)
事件和委托的练习?
事件在类中声明和生成,事件关键字是event,并且通过使用同一个类或者其他类中委托与事件的处理函数进行关联。
事件基于委托的,可以说事件是委托的一种特殊方式,为委托提供了一个发布和订阅机制
发布器和订阅器
发布器:
是一个包含事件和委托定义的对象,事件和委托之间的关系也是定义在这个类里面的,发布器类的对象调用事件,通知其他对象
订阅器:
接受这个事件之后,需要触发的函数,写在订阅器类中
发布订阅例子:
- 手机可以响铃,响铃(事件)之后小明需要起床
- 手机必须现有响铃的功能(必须先有这个事件)发布器功能
- 小明注册响铃事件(设置闹钟)
- 小明听到闹钟之后干啥(处理函数)订阅器功能
该类是为了定义事件和委托的类,提供一个事件,创建一个事件
该类一般被称为发布器类
自定义事件功能是当value不一样的情况触发事件函数
我们就举一个例子:
例如:
public class EventTest
{
//在定义事件前,先定义一个委托类型与事件对应,
public delegate void NumberHandle();
// 定义事件 使用关键event
//ChangeNum 以后是一个方法 使用changeNum()
public event NumberHandle ChangeNum;
public int value; //当value值 设置不一样的时候 触发事件函数。
public EventTest() // 构造函数初始化value值等于5
{
int n = 5;
SetValue(n);
}
// 修改value值的方法
public void SetValue(int n)
{
if(value != n) // 当value值不一样的时候 才去赋值
{
value = n; //证明value已经发生变化,事件就应该被触发,调用事件函数,就是调用ChangeNum事件函数
if (ChangeNum != null) // 证明有事件函数
{
ChangeNum();// 调用事件函数
}
else
{
Console.WriteLine("事件没触发");
}
}
}
}
//publish 发布
//subscribe 订阅
//订阅器类
public class DingYue
{
//事件函数 和 发布器类的委托类型必须匹配
public void PrintF()
{
Console.WriteLine("value值被修改了 ,value修改的事件被触发");
}
}
internal class Program
{
static void Main(string[] args)
{
//创建事件对象 初始化并没有给事件绑定事件函数 也就是 if (ChangeNum != null) 不成立
EventTest e = new EventTest();
// 创建一个事件函数对象,
DingYue d = new DingYue();
// 开始给发布器里面定义事件赋值 ,绑定一个事件函数
// e.ChangeNum += d.PrintF; //注册 或者绑定事件函数 this.button1.click+=new SystemEventHanlde(f1)
e.ChangeNum += new EventTest.NumberHandle(d.PrintF);
// 修改value值 检查printF事件函数是否被执行
e.SetValue(7);
e.SetValue(20);
}
}
🆗///搞定⛏