控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

C# 委托 delegat

作者:佚名 出处:互联网 2011年07月29日 阅读:

C# 委托 delegat

委托可以是相向的,可以传参数也可以有回传值。事件是单向的,

方法签名参数指定是object, EventArgs(或继承它的子类),回传指定是 void,没有回传值。
 

代码如下:

 1 using System;
 2
 3 namespace DelegateTutorial
 4 {
 5     ///////////////////////////////////////////
 6
 7     public delegate string Method();
 8
 9     ///////////////////////////////////////////
10
11     public class ClassWithDelegate
12     {
13         public Method methodPointer;
14
15         public void print()
16         {
17             Console.WriteLine(methodPointer()); // 方法在这里没有实体
18         }
19     }
20
21     ///////////////////////////////////////////
22
23     class Program
24     {
25         public static void Main()
26         {
27             ClassWithDelegate myClass = new ClassWithDelegate();
28
29             myClass.methodPointer = MethodA; // 这里才实体化,用方法指针去理解委托,我喜欢这样写
30             // 上面写成这样也行: myClass.methodPointer = new Method(MethodA);
31             myClass.print();
32
33             myClass.methodPointer = MethodB;
34             myClass.print();
35
36             Console.ReadKey();
37         }
38
39         public static string MethodA()
40         {
41             return "Method A.";
42         }
43
44         private static string MethodB()
45         {
46             return "Method B.";
47         }
48     }
49 }
 
 

 不用 protected virtual 不用继承,也可改变行为,而且是运行时。大家成年人不要 Hello World 了,看看实例,作为 Callback 用(详见 Bill Wagner, Effective C# (Addison-Wesley, 2005), p.129-131):

 

 1 public delegate bool CancelProcess();
 

 2
 3 /// <summary>
 4 /// 物料主数据列表
 5 /// </summary>
 6 public class ItemMasterRecords : Collection<ItemRecords>
 7 {
 8     // 省略....
 9
10     ValidationErrors validationErrors;
11
12     /// <summary>
13     /// 验证所有数据
14     /// </summary>
15     /// <param name="isContinue">返回 bool 的取消动作委托方法</param>
16     public void validateItemMasterRecords(CancelProcess isCancel)
17     {
18         bool _isCancel = false;
19         foreach (ItemRecords item in this)
20         {
21             item.validate(validationErrors); // 单个物料的验证方法
22
23             foreach (CancelProcess ptr in isCancel.GetInvocationList())
24                 // 多个地方发出取消指示也没问题
25             {
26                 _isCancel |= ptr();
27                 if (_isCancel)
28                 {
29                     this.validationErrors.Clear();
30                     return;
31                 }
32             }
33         }
34
35     }
36 }
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统