C#委托

委托
 委托的本质
 在C#中,委托是一个特殊的类;
 在某种程度上,相当于C++的函数指针;
 在某种程度上,相当于接口(Interface);
 委托可以是static的,接口则不能;
委托的定义
 关键字:delegate
 public delegate void MyDelegate(string message);
public delegate int OperationDel(int x, int y);
 委托OperationDel代表了一组方法,它们的方法签名是:
 返回值:int;参数:int,int
 只要符合该签名的方法,都可以赋给此委托;
 委托实例的创建:
 MyDelegate del = new MyDelegate(方法名);
 MyDelegate del += new MyDelegate(方法名);
委托链
 实际上委托实例,是一个委托链。+=代表增加委托实例到委托链中,相反,-=则代表去掉该委托实例;
委托的意义
 委托可以使得软件的复用程度提高;
 委托在一定程度上相当于接口;
委托的例子
using System;
namespace DelegateSample
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  private static int Add(int x, int y)
  {
   int result = x + y;
   Console.WriteLine("x + y = {0}", result);
   return result;
  }
  private static int Sub(int x, int y)
  {
   int result = x - y;
   Console.WriteLine("x - y = {0}", result);
   return result;
  }
  
  // 委托OperationDel代表了一组方法,它们的方法签名是:
  // 返回值:int;参数:int,int
  public delegate int OperationDel(int x, int y);
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   #region Delegate Chain
   OperationDel del = null;
   // 委托实例的创建
   del += new OperationDel(Add);
   del += new OperationDel(Sub);
   del( 4,5);
   #endregion
   Console.WriteLine();
   #region Delegate Chain
   del -= new OperationDel(Add);   
   del( 4,5);
   #endregion
   Console.WriteLine();
   #region Delegate Chain
   OperationDel del1 = null;
   del1 += new OperationDel(new OperationDel( Add ));
   del1( 4,5);
   #endregion
   
   Console.Read();
  }
 }
}
posted @ 2009-07-10 16:04  think_fish  Views(222)  Comments(0Edit  收藏  举报