Должен ли я использовать делегат или метод в .NET, когда это зависит только от параметров?

2

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

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

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

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

и

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

Edit:

Я хочу сфокусировать этот вопрос с точки зрения эффективности при компиляции и удобочитаемости.

  • 0
    Это будет полностью зависеть от контекста. Во-первых, я бы использовал лямбда-конструкцию, если метод будет часто вызываться на разных сайтах вызова, я бы сделал его правильным методом.
Теги:
delegates
lambda

2 ответа

4
Лучший ответ

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

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

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

int d = Multiply(a, b, c); // Normal method invocation
DoSomethingWithFunction(values, Multiply); // Method group conversion
  • 0
    @ Джон, когда вы говорите, use a lambda expression to create that delegate ... что именно вы имеете в виду? Я не использую это?
  • 0
    @Oscar: Ваш первый пример использует лямбда-выражение.
0

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

Lambdas и анонимные методы могут использоваться как обработчики событий (помните, что они могут вызвать утечку памяти при неправильном использовании), когда он очищает их действия и, более того, они обычно не будут повторно использоваться.

  • 0
    @ Оскар: я немного прояснил.
  • 0
    Понимаю. Я удалил свой комментарий;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню