Должен ли я использовать делегат или метод в .NET, когда это зависит только от параметров? - PullRequest
2 голосов
/ 26 февраля 2011

Каждый раз, когда мне нужен очень маленький метод, который использует только свои параметры ...

Должен ли я использовать объявление делегата или метод ?

Например: умножить три числа

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 ]

4 голосов
/ 26 февраля 2011

Я бы не объявил делегат, а не метод только ради этого.Если вы просто вызываете это непосредственно из другого кода в вашем классе, метод более идиоматичен.Если ему не нужно использовать какие-либо переменные экземпляра, вы можете сделать это статическим методом, чтобы прояснить это.

С другой стороны, если вам когда-либо понадобится использовать его как делегат, используйтелямбда-выражение для создания этого делегата (согласно вашему первому примеру).

Если вы хотите вызвать его напрямую и , используйте его как делегат, вы можете использовать преобразование группы методов для созданиялегко делегат:

int d = Multiply(a, b, c); // Normal method invocation
DoSomethingWithFunction(values, Multiply); // Method group conversion
0 голосов
/ 26 февраля 2011

Объявите приватную статическую функцию, если она использует только свои собственные параметры. Объявив его статическим, вы явно сообщаете будущему читателю своего кода (возможно, через несколько месяцев), что он практически не зависит от класса, в котором он определен.

В качестве обработчиков событий можно использовать лямбда-выражения и анонимные методы (имейте в виду, что это может привести к утечкам памяти при неправильном использовании), когда ясно, что они делают, и, более того, они обычно не будут использоваться повторно.

...