🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 委托(C# 参考) 委托类型的声明与方法签名相似,有一个返回值和任意数目任意类型的参数: ``` public delegate void TestDelegate(string message); public delegate int TestDelegate(MyType m, long num); ``` **delegate** 是一种可用于封装命名或匿名方法的引用类型。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。有关委托的应用,请参见[委托](https://msdn.microsoft.com/zh-CN/library/ms173171.aspx)和[泛型委托](https://msdn.microsoft.com/zh-CN/library/sx2bwtw7.aspx)。 ## 备注 委托是[事件](https://msdn.microsoft.com/zh-CN/library/awbftdfh.aspx)的基础。 通过将委托与命名方法或匿名方法关联,可以实例化委托。有关更多信息,请参见[命名方法](https://msdn.microsoft.com/zh-CN/library/98dc08ac.aspx)和[匿名方法](https://msdn.microsoft.com/zh-CN/library/0yw3tz5k.aspx)。 必须使用具有兼容返回类型和输入参数的方法或 lambda 表达式实例化委托。有关方法签名中允许的差异程度的更多信息,请参见[委托中的变体(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd233060.aspx)。为了与匿名方法一起使用,委托和与之关联的代码必须一起声明。本节讨论这两种实例化委托的方法。 ``` // 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# 语言规范 有关详细信息,请参阅 [C# 语言规范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。该语言规范是 C# 语法和用法的权威资料。 ## 请参阅 [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [C# 关键字](https://msdn.microsoft.com/zh-CN/library/x53a06bb.aspx) [引用类型(C# 参考)](https://msdn.microsoft.com/zh-CN/library/490f96s2.aspx) [委托(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/ms173171.aspx) [事件(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/awbftdfh.aspx) [带有命名方法的委托与带有匿名方法的委托(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/98dc08ac.aspx) [匿名方法(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/0yw3tz5k.aspx)