c#编程指南-委托63330

c#编程指南-委托63330

ID:15594111

大小:56.50 KB

页数:24页

时间:2018-08-04

c#编程指南-委托63330_第1页
c#编程指南-委托63330_第2页
c#编程指南-委托63330_第3页
c#编程指南-委托63330_第4页
c#编程指南-委托63330_第5页
资源描述:

《c#编程指南-委托63330》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C#编程指南-委托63330C#编程指南-委托.txt-//自私,让我们只看见自己却容不下别人。如果发短信给你喜欢的人,他不回,不要再发。看着你的相片,我就特冲动的想P成黑白挂墙上!有时,不是世界太虚伪,只是,我们太天真。一、使用委托委托是一种安全地封装方法的类型,它与C和C++中的函数指针类似。与C中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。下面的示例声明了一个名为Del的委托,该委托可以封装一个采用字符串作为参数并返回void的方法。C#复制代码publicdelegatevoidDel(stringmessage);

2、构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托。例如:C#复制代码//Createamethodforadelegate.publicstaticvoidDelegateMethod(stringmessage){System.Console.WriteLine(message);}C#复制代码//Instantiatethedelegate.

3、Delhandler=DelegateMethod;//Callthedelegate.handler("HelloWorld");委托类型派生自.NETFramework中的Delegate类。委托类型是密封的,不能从Delegate中派生委托类型,也不可能从中派生自定义类。由于实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性。这样,方法便可以将一个委托作为参数来接受,并且以后可以调用该委托。这称为异步回调,是在较长的进程完成后用来通知调用方的常用方法。以这种方式使用委托时,使用委托的代码无需了解有关所用方法的实现方面的任何信息。此功能

4、类似于接口所提供的封装。有关更多信息,请参见何时使用委托而不使用接口。回调的另一个常见用法是定义自定义的比较方法并将该委托传递给排序方法。它允许调用方的代码成为排序算法的一部分。下面的示例方法使用Del类型作为参数:C#复制代码publicvoidMethodWithCallback(intparam1,intparam2,Delcallback){callback("Thenumberis:"+(param1+param2).ToString());}然后可以将上面创建的委托传递给该方法:C#复制代码MethodWithCallback(1,2,handler

5、);在控制台中将收到下面的输出:Thenumberis:3在将委托用作抽象概念时,MethodWithCallback不需要直接调用控制台--设计它时无需考虑控制台。MethodWithCallback的作用只是准备字符串并将该字符串传递给其他方法。此功能特别强大,因为委托的方法可以使用任意数量的参数。将委托构造为包装实例方法时,该委托将同时引用实例和方法。除了它所包装的方法外,委托不了解实例类型,所以只要任意类型的对象中具有与委托签名相匹配的方法,委托就可以引用该对象。将委托构造为包装静态方法时,它只引用方法。考虑下列声明:C#复制代码publicclassM

6、ethodClass{publicvoidMethod1(stringmessage){}publicvoidMethod2(stringmessage){}}加上前面显示的静态DelegateMethod,现在我们有三个方法可由Del实例进行包装。调用委托时,它可以调用多个方法。这称为多路广播。若要向委托的方法列表(调用列表)中添加额外的方法,只需使用加法运算符或加法赋值运算符(“+”或“+=”)添加两个委托。例如:C#复制代码MethodClassobj=newMethodClass();Deld1=obj.Method1;Deld2=obj.Method2

7、;Deld3=DelegateMethod;//Bothtypesofassignmentarevalid.DelallMethodsDelegate=d1+d2;allMethodsDelegate+=d3;此时,allMethodsDelegate在其调用列表中包含三个方法--Method1、Method2和DelegateMethod。原来的三个委托d1、d2和d3保持不变。调用allMethodsDelegate时,将按顺序调用所有这三个方法。如果委托使用引用参数,则引用将依次传递给三个方法中的每个方法,由一个方法引起的更改对下一个方法是可见的。如果任一

8、方法引发了异常,而在该方

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。