zoukankan      html  css  js  c++  java
  • 委托与事件

     1 namespace learn.Sample
     2 {
     3     public delegate void DoGreeting(string name);//声明一个委托
     4     public class ManagerHello
     5     {
     6         public event DoGreeting MakeGreet;//声明一个事件
     7         public void GreetHello(string name)//声明一个方法
     8         {
     9             MakeGreet(name);
    10         }
    11     }
    12 
    13 }
    14 
    15 namespace learn
    16 {
    17     public class Program
    18     {
    19         private static void EnglishGreeting(string name)
    20         {
    21             Console.WriteLine("Hello," + name);
    22         }
    23         private static void ChineseGreeting(string name)
    24         {
    25             Console.WriteLine("你好," + name);
    26         }
    27         static void Main(string[] args)
    28         {
    29             ManagerHello manager = new ManagerHello();//实例化ManagerHello类
    30             //manager.MakeGreet += new DoGreeting(EnglishGreeting);
    31             //manager.MakeGreet += new DoGreeting(ChineseGreeting);
    32             manager.MakeGreet += EnglishGreeting;//为类的事件注册方法
    33             manager.MakeGreet += ChineseGreeting;
    34             manager.GreetHello("小王");//调用manager对象中的方法
    35 
    36             //那么在这里我便可以这么理解:
    37             //被委托方是:manager实例对象,委托方:DoGreeting,那么我通过事件MakeGreet将委托方和被委托放衔接起来,被委托方委托委托方来通过事件MakeGreet来执行EnglishGreeting和ChineseGeeting这两件事情
    38         }
    39     }
    40 }
    event and delegate

    委托和事件的关系,希望通过这个例子能够更加简单更加清晰的去认识它们之间的关系

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用if-else,switch语句,同时使程序具有更好的扩展性

    注意这里的关键几点:

    ① 委托是一个类,那么委托具有类的特性,在声明类的地方同样能够声明委托

    ② 可以作为参数来使用,这中性质类同样是有的,我们同样可以把一个类来当作参数来使用的。例如我们可以把一个实体类当作一个参数来使用,那么传递的时候我们就可以用这个类来进行处理。那么,类似的我们可以通过使用委托,把委托作为参数来使用,那么这个时候我们就可以通过委托,来注册到委托中的方法,进行我们想要的操作。

    使用委托可以将多个方法绑定到同一个委托变量,当调用此变量是(这里用“调用”这个次,是因为此变量代表一个方法),可以依次调用所有绑定的方法

    委托没有0个参数的重载,因此在实例化的时候至少要有一个参数,否则编译将无法通过

    声明一个事件类似于声明一个进行了封装的委托类型的变量

  • 相关阅读:
    node拦截器设置
    node中session存储与销毁,及session的生命周期
    node做验证码
    防止iframe被别的网站引用
    表单元素disabled禁用后不能自动提交到服务器
    bootstrap 模态框中弹出层 input不能获得焦点且不可编辑
    post请求和get请求content_type的种类
    Firefly在线一键安装
    Firefly通讯协议-
    Firefly《暗黑世界》碎片合成部分代码
  • 原文地址:https://www.cnblogs.com/itboy-2009/p/4279300.html
Copyright © 2011-2022 走看看