委托类型的声明与方法签名类似, 有一个返回值和任意数目任意类型的参数:express
public delegate void TestDelegate(string message); public delegate int TestDelegate(MyType m, long num);
delegate
是一种可用于封装命名或匿名方法的引用类型。 委托相似于 C++ 中的函数指针;可是,委托是类型安全和可靠的。 有关委托的应用,请参见委托和泛型委托。安全
备注ide
委托是事件的基础。函数
经过将委托与命名方法或匿名方法关联,能够实例化委托。 有关更多信息,请参见命名方法和匿名方法。ui
必须使用具备兼容返回类型和输入参数的方法或 lambda 表达式实例化委托。 有关方法签名中容许的差别程度的更多信息,请参见委托中的变体。 为了与匿名方法一块儿使用,委托和与之关联的代码必须一块儿声明。 本节讨论这两种实例化委托的方法。spa
示例指针
// Declare delegate -- defines required signature: delegate double MathAction(double num); class DelegateTest { // Regular method that matches signature: static double Double(double input) { return input * 2; } static void Main() { // Instantiate delegate with named method: MathAction ma = Double; // Invoke delegate ma: double multByTwo = ma(4.5); Console.WriteLine("multByTwo: {0}", multByTwo); // Instantiate delegate with anonymous method: MathAction ma2 = delegate(double input) { return input * input; }; double square = ma2(5); Console.WriteLine("square: {0}", square); // Instantiate delegate with lambda expression MathAction ma3 = s => s * s * s; double cube = ma3(4.375); Console.WriteLine("cube: {0}", cube); } // Output: // multByTwo: 9 // square: 25 // cube: 83.740234375 }
C# 语言规范code
有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。事件
备注:转自https://msdn.microsoft.com/zh-cn/library/900fyy8e.aspx
get