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 

 

 

你可能感兴趣的:(C#)