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