Nik*_*lja 19 c# delegates .net-2.0
我想在方法中的C#中创建一个委托类型,以便创建匿名方法.
例如 :
public void MyMethod(){
delegate int Sum(int a, int b);
Sum mySumImplementation=delegate (int a, int b) {return a+b;}
Console.WriteLine(mySumImplementation(1,1).ToString());
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不能在.NET 2.0和C#2.0中这样做.
Jon*_*eet 23
为什么要在方法中创建委托类型?在方法之外声明它有什么问题?基本上,你不能这样做 - 你不能在方法中声明一个类型(任何类型).
一种替代方法是声明.NET 3.5中存在的所有Func/Action泛型委托 - 然后您可以这样做:
public void MyMethod(){
Func<int, int, int> mySumImplementation =
delegate (int a, int b) { return a+b; };
Console.WriteLine(mySumImplementation(1,1).ToString());
}
Run Code Online (Sandbox Code Playgroud)
声明在我的C#/ .NET版本页面上.
jal*_*alf 16
必须在函数外部定义委托类型.可以在方法内部创建实际委托.
class MyClass {
delegate int Sum(int a, int b);
public void MyMethod(){
Sum mySumImplementation=delegate (int a, int b) {return a+b;}
Console.WriteLine(mySumImplementation(1,1).ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
是有效的.最好的解决方案可能是模拟.NET3.5,并在全局创建一些通用委托类型,可以在整个解决方案中使用,以避免不断重新声明委托类型的所有内容:
delegate R Func<R>();
delegate R Func<T, R>(T t);
delegate R Func<T0, T1, R>(T0 t0, T1 t1);
delegate R Func<T0, T1, T2, R>(T0 t0, T1 t1, T2 t2);
Run Code Online (Sandbox Code Playgroud)
然后你可以Func<int, int, int>
在上面的代码中使用委托.
归档时间: |
|
查看次数: |
17844 次 |
最近记录: |