C#委托

二、委托
1. 委托
– 委托使用的目标:把函数作为参数传递
– 类似于C++中的函数指针
– 是事件处理的基础
– 委托是面向对象的、类型安全的和保险的。
– 委托声明:
• delegate double process(double db1);
• delegate 函数返回类型名委托名(函数参数)

匿名方法
• 匿名方法(anonymous methods)允许将
与一个委托关联的代码“内联(in-line)”到
使用委托的地方,我们可以很方便地将代
码直接写在委托实例中。
• 匿名方法还共享对本地语句所包含的函数
成员的访问。
• 要将代码块传递为委托参数,创建匿名方
法则是唯一的方法。

 

Demo 委托
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace DelegateDemo
 6 {
 7     class Class1
 8     {
 9         delegate double processDelegate(double db1, double db2);
10         static double Multiply(double db1, double db2)
11         {
12             return db1 * db2;
13         }
14         static double Divide(double db1, double db2)
15         {
16             return db1 / db2;
17         }
18         static void NamedMethod(string strInput,double dbNum1,double dbNum2)
19         {
20             processDelegate process;           
21             if (strInput == "M")
22                 process = new processDelegate(Multiply);
23             else
24                 process = new processDelegate(Divide);
25             Console.WriteLine("结果为:{0}", process(dbNum1, dbNum2));
26 
27         }
28         static void AnonymousMethod(string strInput, double dbNum1, double dbNum2)
29         {
30             processDelegate process;
31             if (strInput == "M")
32                 process = delegate(double db1, double db2){return db1 * db2;};
33             else
34                 process = delegate(double db1, double db2) { return db1 / db2; };
35             Console.WriteLine("结果为:{0}", process(dbNum1, dbNum2));
36 
37         }
38         /// <summary>
39         /// 应用程序的主入口点。
40         /// </summary>
41         [STAThread]
42         static void Main(string[] args)
43         {
44             //
45             // TODO: 在此处添加代码以启动应用程序
46             Console.WriteLine("请输入两个小数,用逗号分割");
47             string strInput = Console.ReadLine();
48             int commmaPos = strInput.IndexOf(',');
49             double dbNum1 = Convert.ToDouble(strInput.Substring(0, commmaPos));
50             double dbNum2 = Convert.ToDouble(strInput.Substring(commmaPos + 1));
51             Console.WriteLine("输入M表示乘法,或者D表示除法");
52             strInput = (Console.ReadLine()).ToUpper();
53             //使用命名方法
54             Console.WriteLine("使用命名方法委托");
55             NamedMethod(strInput,dbNum1,dbNum2);  
56             //使用匿名方法
57             Console.WriteLine("使用匿名方法委托");
58             AnonymousMethod(strInput, dbNum1, dbNum2);  
59 
60         }
61     }
62 
63 }
64 

 

 

posted @ 2010-08-06 15:29  魄力  阅读(548)  评论(0编辑  收藏  举报