C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
假设有如下方法,Method1,Method2,Method3,Method4,Method5,抛开方法的内容,我们来观察一下他们的名字、参数和它的返回值。
public void Method1(int a) { Console.WriteLine("this is method1: " + a); } public void Method2(int b) { Console.WriteLine("this is method2: " + b); } public int Method3(int m) { Console.WriteLine("this is method3: " + m); return m * m; } public int Method4(int n) { Console.WriteLine("this is method4: " + n); return n + n; } public int Method5(int x, int y) { Console.WriteLine("this is method5"); return x + y; }
当我们来描述一个方法的时候,其实有两个特征:一个是参数类型列表,一个是返回值。
比如:
public void Method1(int a) "一个参数为(int), 返回值为void的方法";
public void Method2(int b) "一个参数为(int), 返回值为void的方法";
public int Method3(int m) "一个参数为(int), 返回值为int的方法";
public int Method4(int n) "一个参数为(int), 返回值为int的方法";
public int Method5(int x, int y) "一个参数为(int,int), 返回值为int的方法"。
可以发现,Method1,Method2属于同一类,Method3,Method4属于同一类。思考一下,一般的类型都是由一个属于来描述的,比如整数类型用int,学生类型用Student这种class类型,接口用interface,如何用一个标准的术语来描述一个方法类型?
委托