日期:2014-05-17 浏览次数:20884 次
委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。下面的示例声明了一个名为 Del 的委托,该委托可以封装一个采用字符串作为参数并返回 void 的方法。
public delegate void Del(string message);
构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托。例如:
// Create a method for a delegate. public static void DelegateMethod(string message) { System.Console.WriteLine(message); }本示例演示如何组合多路广播委托。委托对象的一个用途在于,可以使用 + 运算符将它们分配给一个要成为多路广播委托的委托实例。组合的委托可调用组成它的那两个委托。只有相同类型的委托才可以组合。
- 运算符可用来从组合的委托移除组件委托。
class Class1 { public delegate void PrintDelegate(string name, string id); public delegate void Del(int i); static void Main(string[] args) { Class1 obj = new Class1(); PrintDelegate delegate1 = PrintStudent; PrintDelegate delegate2 = obj.PrinteBook; // +运算符操作的对象只能是委托对象。 //PrintDelegate multiDel = delegate1 + delegate2; //但是 += 右边的操作对象可以是方法签名。 //简单的多播委托。 PrintDelegate multiDel = null; multiDel += obj.PrinteBook; multiDel += PrintStudent; multiDel("test", "123"); Del d = delegate(int i) { Console.WriteLine(++i); }; d(10); Console.Read(); }