03.C#委托(二章1.1)

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: 小  |  中  |  大  |  超大  

03.C#委托(二章1.1)一章1.5-1.8介绍的是com、动态类型及.NET平台一些说明,每个心中都有自己的标准,听一家之言,叫人不爽,相信自己有自己的标准和自己的编程理念就OK了,也不想码那么多说明性的文字,直接跳过吧,当然自己还是看过了。进入正题,这篇来说一下委托(在深入理解C#的同时,我也在学C++,委托确实和函数指针有相似的地方,大家也可以去了解下。)

委托的四个基本构成:

委托类型的声明满足委托类型签名的方法委托类型实例调用委托实例声明委托使用delegate关键字

1 public delegate void Drive(string name);

如上,声明了一个委托类型Drive,由System.MulticastDelegate派生,而System.MulticastDelegate又是继承于System.Delegate,该类型有自己的方法和属性。与该类型匹配的方法的签名必需使用一个string类型作为参数和返回一个void类型(即不返回),可以是静态方法或者一个实例方法。

1 public class Car 2 { 3 //实例方法 4 public void Drive(string name) 5 { 6 Console.WriteLine(name + "正在开车!!!"); 7 } 8 9 //静态方法10 public static void StaticDrive(string name)11 {12 Console.WriteLine(name + "正在开车!!!");13 }14 }

如上,Car类中的Drive方法是一个实例方法,使用该方法前要有一个Car类型的实例,StaticDrive是一个静态方法,使用类作用域便可以调用,且上述两个方法的签名均满足上述委托对于方法签名的要求。

接下来要创建一个Drive类型的委托实例,并且去调用。

1 class PRogram 2 { 3 static void Main(string[] args) 4 { 5 6 //声明两个委托实例 7 Drive drive0, drive1; 8 Car car = new Car(); 9 10 //对委托实例进行赋值,一个使用静态方法,一个使用实例方法11 drive0 = new Drive(Car.StaticDrive);12 drive1 = new Drive(car.Drive);13 14 //调用委托实例方法15 16 //使用委托实例中的Invoke方法进行调用17 drive0.Invoke("Leo");18 //使用简写方法19 drive1("DuDu");20 21 Console.ReadKey();22 23 }24 }

上术只是对一个简单操作的调用,委托更多的情况使用于多个操作联合使用。可以使用Delegate.Combine和Delegate.Remove对操作的增减,一般使用简写方式+=和-=。

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 //声明两个委托实例 7 Drive drive0, drive1; 8 Car car = new Car(); 9 10 //对委托实例进行赋值,一个使用静态方法,一个使用实例方法11 drive0 = new Drive(Car.StaticDrive);12 drive1 = new Drive(car.Drive);13 14 //调用委托实例方法15 16 //使用委托实例中的Invoke方法进行调用17 drive0.Invoke("Leo");18 //使用简写方法19 drive1("DuDu");20 21 22 drive0 += drive1;23 drive0.Invoke("Leo");24 25 Console.ReadKey();26 27 }28 }

运行结果如下:

使用+=或者-=操作能更加方便,且利于理解。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航