本帖最后由 何旭 于 2011-12-12 22:41 编辑  
 
介于论坛上有很多人,提到委托,以及委托的多播! 
小弟不才,写了一遍关于委托的博客 
地址是: http://www.cnblogs.com/cilence/archive/2011/12/12/2285363.html 
 
 
谈到委托,那么首先我们要知道什么是委托,委托能做什么事,如果做! 
 
先说什么是委托,委托的定义: 
 
  通俗的来说,委托就是一个能存放某种特定格式(方法的签名,如返回值,参数)的方法指针清单。 
 
  微软官方的解释是,delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。 
 
下面我们来讲述一个使用委托过滤字符数组的案例:- namespace 委托
 
 - {
 
 -     class Program
 
 -     {
 
 -         static void Main(string[] args)
 
 -         {
 
 -             //定义一个待过滤的字符串
 
 -             string text = "XXX等待过BBB滤的字符串";
 
 -             //实例化一个委托,将Filter1方法的指针作为引用
 
 -             FilterDelegate filter = new FilterDelegate(Filter1);
 
 -             //实例化一个委托,将Filter2方法的指针作为引用
 
 -             FilterDelegate filter2 = new FilterDelegate(Filter2);
 
  
-             //执行方法
 
 -             string fileter1result = filter(text);
 
 -             Console.WriteLine(fileter1result);
 
 -             Console.WriteLine(filter2(fileter1result));
 
  
-             Console.WriteLine();
 
  
 
-             //以下是多播委托
 
 -             //委托对象的一个有用属性是:可以使用 + 运算符将多个对象分配给一个委托实例
 
  
-             //声明多个委托
 
 -             DoubleDelegate double1, double2, double3;
 
 -             double1 = Hello;
 
 -             double2 = double1 + Bye;
 
 -             double3 = double2 - Hello;
 
  
-             Console.WriteLine("打印double1:");
 
 -             double1("A");
 
 -             Console.WriteLine("打印double2:");
 
 -             double2("B");
 
 -             Console.WriteLine("打印double3:");
 
 -             double3("C");
 
  
 
-             Console.ReadKey();
 
  
-             /*总结:
 
 -              *delegate 是一种可用于封装命名或匿名方法的引用类型。 委托类似于 C++ 中的函数指针.
 
 -              */
 
 -         }
 
  
-         //过滤策略1
 
 -         static string Filter1(string value) {
 
 -             return value.Replace("XXX","太好了");
 
 -         }
 
  
-         //过滤策略2
 
 -         static string Filter2(string value)
 
 -         {
 
 -             return value.Replace("BBB", "好");
 
 -         }
 
  
-         static void Hello(string s) {
 
 -             Console.WriteLine("Hello:{0}!",s);
 
 -         }
 
  
-         static void Bye(string s) {
 
 -             Console.WriteLine("Bye:{0}!", s);
 
 -         }
 
 -     }
 
  
-     /*1.首先声明一个委托
 
 -      *delegate表示该类型是委托类型
 
 -      *string 是委托引用方法的方法返回值
 
 -      *string value 是委托引用方法的方法参数
 
 -      **/
 
 -     delegate string FilterDelegate(string value);
 
  
-     //一个多播委托
 
 -     delegate void DoubleDelegate(string s);
 
 - }
 
  复制代码 |   
        
 
    
    
    
     
 
 |