我应该在.NET中使用Delegate还是Method,只取决于参数?

时间:2011-02-26 08:46:22

标签: c# .net lambda delegates

每次我需要一个只使用其参数的非常小的方法......

我应该使用声明代理还是方法

例如:乘以三个数字

Func<int, int, int, int> Multiply = (a,b,c) => a*b*c;

int Multiply(int a, int b, int c) 
{
    return a*b*c;
}

修改

我想在编译和可读性时将这个问题集中在效率方面。

2 个答案:

答案 0 :(得分:4)

我不会仅为了它而声明一个委托而不是一个方法。如果您只是直接从您班级中的其他代码调用此方法,则方法更为惯用。如果它不需要使用任何实例变量,您可能希望使它成为一个静态方法,以使其清晰。

另一方面,如果您只需要将它用作委托,请使用lambda表达式来创建该委托(根据您的第一个示例)。

如果您想直接调用它将其用作委托,您可以使用方法组转换轻松创建委托:

int d = Multiply(a, b, c); // Normal method invocation
DoSomethingWithFunction(values, Multiply); // Method group conversion

答案 1 :(得分:0)

如果它只使用自己的参数,则声明私有静态函数。 通过将其声明为静态,您明确告诉未来读者您的代码(可能在几个月内),它实际上独立于它定义的类。

Lambdas和匿名方法可以用作事件处理程序(请记住,当使用不当时会导致内存泄漏),当它清楚地知道它们做什么时,它们通常不会被重用。