委托用于将方法作为参数传递给其他方法,可将任何可访问类或结构中与委托类型匹配的任何方法分配给委托。该方法可以是静态方法,也可以是实例方法。将方法作为参数进行引用的能力使委托成为定义回调方法的理想选择。
与委托类型匹配:是指返回值、参数都与委托一致的方法。
委托申明:委托类型的申明与方法申明相似,有一个返回值或没有返回值。有任意数目、任意类型的参数:
public delegate void TestDelegate(); public delegate int TestDelegate(MyType m, long num);
delegate 是一种可用于封装命名或匿名方法的引用类型。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
委托实际是可以在不同对象之间传递一个方法的一种机制,这个方法可以是命名方法,也可以是匿名方法。可以是静态方法也可以是实例方法。
在底层之间,他们实际传输的是一个地址,这一点就像C++里面的函数指针了。
委托必须和被传递的方法参数完全一致、返回类型也完全一致。(也可以是变体、关于变体你去看MSDN)
// 声明delegate对象 public delegate void 委托(int a, int b); // 欲传递的方法,它与委托具有相同的参数、返回值类型 public static void 委托_方法(int a, int b) { Console.WriteLine((a > b).ToString()); }
委托的申明和类的申明完全一致,方法通过“构造”的形式传递过去。
委托 委托_调用 = new 委托(委托_方法);
委托的使用:
static void Main(string[] args) { // 创建delegate对象 委托 委托_调用 = new 委托(委托_方法); // 调用delegate 委托_调用(1, 2); Console.ReadLine(); }
也可以这样使用:
static void Main2() { // 创建delegate对象 委托 委托_调用 = 委托_方法; // 调用delegate 委托_调用(1, 2); Console.ReadLine(); }
还可以这样使用(匿名委托):
static void Main3() { // 匿名委托 委托 委托_调用 = delegate(int a, int b) { Console.WriteLine((a > b).ToString()); }; // 调用delegate 委托_调用(1, 2); Console.ReadLine(); }