[英]Creating a delegate type inside a method
我想在 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());
}
不幸的是,我不能使用 .NET 2.0 和 C# 2.0 来做到这一点。
为什么要在方法中创建委托类型? 在方法之外声明它有什么问题? 基本上,您不能这样做 - 您不能在方法中声明类型(任何类型)。
一种替代方法是声明 .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());
}
声明在我的C#/.NET 版本页面上。
委托类型必须在函数外部定义。 可以像您一样在方法内部创建实际的委托。
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());
}
}
将是有效的。 最好的解决方案可能是模拟 .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);
然后您可以在上面的代码中使用Func<int, int, int>
委托。
委托被编译为类(从 System.MulticastDelegate 继承的类)。 在 C# 中,不允许在方法中声明类(请参阅 C# 语言规范)。 因此,您也不能在方法中声明委托。
那这个呢:
static void Main(string[] args)
{
Expression<Func<int, int, int>> exFunc = (a, b) => a + b;
var lambda = exFunc as LambdaExpression;
Delegate del = exFunc.Compile();
Console.WriteLine(del.DynamicInvoke(2, 2));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.