C.Net中委托简单应用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C.Net中委托简单应用

C.Net中委托简单应用   【摘要】本文介绍了Visual C#.NET中委托的基本概念、实例化、委托的调用,着重介绍了使委托来引用静态方法和非静态方法、将方法绑定到委托、取消对方法的绑定,以期能为实际开发带来具体参考价值。   【关键词】Visual C#.NET;.Net Framework;委托;绑定;方法      1.引言      委托在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了。本文中,我将通过一个范例由浅入深地讲述什么是委托、委托的简单应用。      2.委托的概念及定义      .Net的MSDN关于委托的定义是:delegate 声明定义一种引用类型,该类型可用于将方法用特定的签名封装。委托实例封装静态方法或实例方法。委托大致类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。   Delegate实际上是一个abstract class(Delegate派生于System.MulticastDelegate, System.MulticastDelegate又派生于System.Delegate),所以可以在任何地方定义Delegate,可以在class类内部,也可以在类外部;还可以在命名空间中把委托定义为顶层对象。根据定义的可见性,可以在委托定义上添加一般的访问修饰符:public、 private和 protected等。   委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。虽然委托具有许多其他的用途,但这里只讨论委托实例封装静态方法或实例方法。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行库提供实现。   如何理解Delegate的类型安全特性?跟C++的函数指针相比。函数指针只不过是指向存储区的一个指针,无法说出这个指针实际指向什么东西,更别说想获取参数(parameter)和返回值(return value)之类的数据了。而delegate定义时必须指定它所代表的方法的所有细节,比如参数类型,个数以及返回值等等;C#中创建委托使用delegate关键字,委托名可以是任何你认为有意义的词。但必须使你的委托匹配你想指向的方法的签名。当C#的编译器处理委托类型时,会自动地生成一个密封(sealed)类。      3.委托的简单应用―可以封装静态方法也可以封装实例方法      我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这个简单的例子:   using System;   namespace DelegateExample{   public delegate void ArithmeticDelegate(int x, int y); //声明委托   class DelegateClass{    //定义了可以被委托类型ArithmeticDelegate封装的Add实例方法,它和委托有相同签名   public void Add(int x, int y){   Console.WriteLine(Start Add:{0} +{1}={2}, x, y, x + y);   }   //可以被委托类型ArithmeticDelegate封装的Sub静态方法,它和委托有相同签名   public static void Sub(int x, int y){   Console.WriteLine(Start Sub:{0}-{1}={2}, x, y, x - y);   }   static void Main(string[] args){   DelegateClass objTest = new DelegateClass();   //委托实例化,并指明其封装的实例方法Add。    ArithmeticDelegate delegateAdd = new ArithmeticDelegate(objTest.Add);    delegateAdd(2, 3);//委托的调用,实质上运行的是Add(2,3)方法   //委托实例化,并指明其封装的静态方法Sub。    ArithmeticDelegate delegateSub = new ArithmeticDelegate(DelegateClass.Sub);   delegateSub(2, 3); //委托的调用, 实质上运行的是Sub(2,3)方法   ArithmeticDelegate d1 = null;   //给此委托变量d

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档