事件

作者: 东经20度 | 来源:发表于2019-04-14 11:04 被阅读0次

    事件类似于异常,由对象引发,可以提供代码来处理事件。事件可以有许多订阅的处理程序,在该事件发生时,这些处理程序都会被调用,其中包括引发该事件的对象所在的类的事件处理程序,但事件处理程序也可能在其他类中。

    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
    

    相关文章

      网友评论

          本文标题:事件

          本文链接:https://www.haomeiwen.com/subject/skiniqtx.html