首页 > 代码库 > c#学习笔记03——委托和事件
c#学习笔记03——委托和事件
- 委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法。类似于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;//右边的操作对象是方法签名
- 使用运算符+实现:委托对象的一个有用属性,可以使用+运算符将多个对象分配给一个委托实例。这里运算符+操作对象只能是委托对象,不能使方法签名。
c#学习笔记03——委托和事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。