事件

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
上一篇下一篇

猜你喜欢

热点阅读