1 事件的概念: Event, 基本上说是一个用户操作,例如按键按下的操作、鼠标点击、鼠标移动等等;或者是一些系统提示信息,如手机消息通知,应用程序需要在事件发生时响应事件
2 系统查常用的事件: 按钮的点击事件
this.button1.click += new SystemEventHanlde(f1)
3 事件和委托的联系?
事件在类中声明和生成,事件的关键字是event,并且通过使用同一个类或者其他类中委托与事件进行关联,事件基于委托的,可以说事件时委托的一种特殊方式,未委托提供了一个发布和订阅机制
4 发布器和订阅器
发布器:是一个包含事件和委托定义的一个对象,事件和委托之间的关系也是定义在类里面的,发布器类的对象调用事件,通知其他对象
订阅器: 接收这个事件之后需要触发的函数,写在订阅器类中
该类是为了定义事件和委托的类,提供一个事件,创建一个事件。一般称为发布器类
自定义事件功能是当value不一样的情况触发事件函数
自定义事件的步骤
1 定义发布器类 添加委托类型和事件对象
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("事件没触发");
}
}
}
}
2 定义订阅器类
public class DingYue
{
// 事件函数 和 发布器类的委托类型必须匹配
public void PrintF()
{
Console.WriteLine("value值被修改了 value修改的事件被触发");
}
}
3 在main里面进行调用和验证
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)
// 修改value值 检查printF事件函数是否被执行
e.SetValue(7);
e.SetValue(20);
}
最后运行结果如下