- 委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法。类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内。
- 定义和声明委托:
1 delegate 返回值 委托名(参数列表); 2 eg: 3 public delegate void SayHelloDelegate(string name);
- 使用委托:委托其实通过返回值和参数列表来定义方法和签名。任何与委托具有相同返回值和参数列表(签名)的方法都可以赋给该委托。
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;//把方法赋予委托对象
委托实例化的几种形式:
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");
- 多播委托:一个委托对象可以包含多个方法。调用多播委托时,按赋值的顺序一次执行每个方法。
- 使用运算符+实现:委托对象的一个有用属性,可以使用+运算符将多个对象分配给一个委托实例。这里运算符+操作对象只能是委托对象,不能使方法签名。
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;//操作符两边只能是委托对象
- 使用运算符+=
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;//右边的操作对象是方法签名
- 使用运算符+实现:委托对象的一个有用属性,可以使用+运算符将多个对象分配给一个委托实例。这里运算符+操作对象只能是委托对象,不能使方法签名。
时间: 2024-10-25 07:51:27