定义一个委托:
public delegate void Del( string message);
构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托。
例如:// Create a method for a delegate.
public static void DelegateMethod(string message) { System.Console.WriteLine(message); } // Instantiate the delegate. Del handler = DelegateMethod; // Call the delegate. handler("Hello World");
委托(Delegate):
是.NET Framework对C#和VB.NET等面向对象编程语言特性的一个重要扩充。委托是.NET中的一些重要技术,比如事件、异步调用和多线程开发的技术基础。
委托在.NET开发中应用极广,每一名.NET软件工程师都必须了解委托。
1.委托可以看成是一个方法的“容器”,将某一具体的方法“装入”后,就可以把它当成方法一样调用。
2.一个委托类型的变量,可以引用任何一个满足其要求的方法。从这点意义上看,委托类似于C语言中的“函数指针”。
由于委托变量可以引用一个方法调用列表,并且具有可以被随时改变所引用的方法调用列表的特性,这就使委托在开发中大有用处,可以解决许多实际问题。
1.定义委托类型
2.定义一个或多个符合委托类型的方法
3.定义委托类型的变量
4.将第2步定义的方法引用“挂接”到第3步定义的变量,以形成一个“方法调用列表”。
5.通过委托变量“间接”调用方法调用列表。
定义委托:
public delegate int AddDelegate(int i,int j );使用匿名方法定义委托变量
AddDelegate del = delegate(int i,int j){return i+ j;}; Console.WriteLine(del(100,200));匿名方法其实是将方法定义与委托变量赋值两个步骤合在一起。
委托类型可作为方法形参
public static void invokeDelegate(AddDelegate del,int i,int j) {Console.WriteLine( del(i,j) );}匿名方法可直接作为方法的实参
invokeDelegate(delegate(int i,int j){return i+ j;},100,200);
多路广播委托:http://msdn.microsoft.com/zh-cn/library/ms173175.aspx
//定义泛型委托
//定义泛型委托 public delegate T MyGenericDelegate<T>(T obj); class Program { static void Main(string[] args) { //使用匿名方法给泛型委托变量赋值 MyGenericDelegate<int> del = delegate(int vlaue) { return vlaue * 2; }; MyGenericDelegate<string> add = delegate(string content) { return content; }; //调用泛型委托变量引用的匿名方法 Console.WriteLine(del(100)); Console.WriteLine(add("Hello World!")); Console.ReadKey(); } }匿名方法小结在.NET 2.0时代,匿名方法主要是作为简化代码的手段而引入到C# 2.0语法特性中的。 然而,也许设计者事先也并没有预想到,这一原先仅出现在特定编程语言中的特性,却成为了.NET 3.5中的重要技术——LINQ的基础之一。 委托是一种方法引用类型。一旦为委托分配了方法,委托将与方法具有相同的行为。 委托方法的使用和其他方法一样,同样具有返回值和参数。与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。 这样就可以通过编程方式改变方法的调用,还可以向现有类中插入新代码。只要知道委托的签名,便可以分配自己的委托方法。 再次提醒:委托是一项重要的编程技能,所有的.NET开发者都必须掌握它。否则,将在开发.NET应用程序的过程中遇到很多困难。 MSDN中介绍委托:http://msdn.microsoft.com/zh-cn/library/ms173171.aspx 文中部分内容转自: 金旭亮面向对象编程系列