事件
2019-04-14 本文已影响0人
东经20度
事件类似于异常,由对象引发,可以提供代码来处理事件。事件可以有许多订阅的处理程序,在该事件发生时,这些处理程序都会被调用,其中包括引发该事件的对象所在的类的事件处理程序,但事件处理程序也可能在其他类中。
1. 发布者和订阅者
通知某件事发生的为发布者。
对某件事关注的为订阅者。
2. 事件触发和注册
想要事件发生时被通知,必须注册以表示关注。这样事件发生时会通知所有该事件的订阅者。
3. 事件声明
使用委托以及 event 关键字来对事件进行声明。
//定义委托
public delegate void Handler();
//基于委托定义事件
public event Handler NewDog;
注意:定义委托的访问修饰符的访问权限不能低于事件访问修饰符的权限。
4. 事件订阅
//订阅事件
NewDog+=方法;
//取消订阅
NewDog-=方法
5. 事件触发
if(NewDog!=null){
NewDog();
}
6. 例子
class Dog{
static int num=0;
public delegate void DogShow(string str,int num);
public event DogShow dogShow;
public Dog(string name){
num++;
if(dogShow!=null){
dogShow(name,num)
}
}
}
//订阅者
class Client{
public void Show(string name;int num){
Console.WriteLine(“I am {0},num={1}”,name,num);
}
}
//订阅者
class ClientB{
public void Show(string name;int num){
Console.WriteLine(“I am ClientB_{0},num={1}”,name,num);
}
class Program{
static void Main(string[] args){
Client CA=new Client();
ClientB CB=new ClientB();
//订阅事件
Dog.dogShow+=CA.Show;
Dog.dogShow+=CB.Show;
Dog d=new Dog(“d”);
Dog s=new Dog(“s”)
Console.ReadKey();
}
}
}
//运行结果
I am d,num=1
I am ClientB_d,num=1
I am s,num=2
I am Client_s,num=2