首页 > 代码库 > c#学习笔记03——委托和事件

c#学习笔记03——委托和事件

  • 委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法。类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内
    1. 定义和声明委托:
      1 delegate 返回值 委托名(参数列表);
      2 eg:
      3 public delegate void SayHelloDelegate(string name);
    2. 使用委托:委托其实通过返回值和参数列表来定义方法和签名。任何与委托具有相同返回值和参数列表(签名)的方法都可以赋给该委托。
      技术分享
      1 public delegate void SayHelloDelegate(string name);//声明委托
      2 public viod SayHelloEnglish(string name)//声明方法
      3 {
      4         Console.WriteLine("Hello,{0}",name);
      5 }
      6 SayHelloDelegate s=SayHelloEnglish;//把方法赋予委托对象
      View Code

       委托实例化的几种形式:

       1 1.使用new关键字
       2 SayHelloDelegate s=new SayHelloDelegate(SayHelloEnglish);
       3 2.直接赋值
       4 SayHelloDelegate s=SayHelloEnglish;
       5 3.使用匿名方法
       6 SayHelloDelegate s=delegate(string name)
       7 {
       8          Console.WriteLine("Hello,{0}",name);
       9 }
      10 4.使用Lambda表达式,例如:
      11 SayHelloDelegate s=name=>
      12 {
      13          Console.WriteLine("Hello,{0}",name);
      14 }
      1 委托实例化后,就可以像调用方法一样调用委托。eg:
      2 s("John");
    3. 多播委托:一个委托对象可以包含多个方法。调用多播委托时,按赋值的顺序一次执行每个方法。
      1. 使用运算符+实现:委托对象的一个有用属性,可以使用+运算符将多个对象分配给一个委托实例。这里运算符+操作对象只能是委托对象,不能使方法签名。
        技术分享
         1 public delegate void SayHelloDelegate(string name);
         2 public void SayHelloEnglish(string name)
         3 {
         4        Console.WriteLine("Hello,{0}",name);
         5 }
         6 public void SayHelloChinese(string name);
         7 {
         8         Console.WriteLine("你好,{0}",name);
         9 }
        10 SayHelloDelegate s1=new SayHelloDelegate(SayHelloEnglish);
        11 SayHelloDelegate s2=SayHelloChinese;
        12 SayHelloDelegate s3=s1+s2;//操作符两边只能是委托对象
        View Code

         

      2. 使用运算符+=
        技术分享
         1 public delegate void SayHelloDelegate(string name);
         2 public void SayHelloEnglish(string name)
         3 {
         4        Console.WriteLine("Hello,{0}",name);
         5 }
         6 public void SayHelloChinese(string name);
         7 {
         8         Console.WriteLine("你好,{0}",name);
         9 }
        10 SayHelloDelegate s=new SayHelloDelegate(SayHelloEnglish);
        11 SayHelloDelegate s+=SayHelloChinese;//右边的操作对象是方法签名
        View Code

         

          

c#学习笔记03——委托和事件