больше преимуществ или недостатков делегирования членов по сравнению с классическими функциями?

class my_class
{
    public int add_1(int a, int b) {return a + b;}
    public func add_2 = (a, b) => {return a + b;}
}

add_1 - это функция, а add_2 - делегат. Однако в этом контексте делегаты могут выполнять аналогичную роль.

Из-за прецедента и дизайна языка по умолчанию для методов C # должны быть выбраны функции.

Однако у обоих подходов есть свои плюсы и минусы, поэтому я составил их список. Есть ли еще преимущества или недостатки у любого из подходов?

Преимущества перед обычными методами.

  • более обычные
  • внешние пользователи функции видят именованные параметры - для синтаксиса add_2 arg_n и типа обычно недостаточно информации.
  • лучше работает с интеллектом Minitech
  • работает с рефлексией Minitech
  • работает с наследованием. Эрик Липперт
  • имеет "это" CodeInChaos
  • меньшие накладные расходы, скорость и память - Ty Minitech и CodeInChaos
  • не должны думать о публичном \ приватном в отношении как изменения, так и использования функции.- ty CodeInChaos
  • менее динамичен, допускается меньше того, что неизвестно во время компиляции - ty CodeInChaos

Преимущества перед методами "типа поля делегата".

  • более согласованные, это не функции-члены и элементы данных, это всего лишь члены данных.
  • может внешне выглядеть и вести себя как переменная.
  • Хранение его в контейнере работает хорошо.
  • несколько классов могут использовать одну и ту же функцию, как если бы это была функция-член каждого из них, это было бы очень общим, кратким и с хорошим повторным использованием кода.
  • легко использовать где угодно, например как локальную функцию.
  • , по-видимому, хорошо работает при передаче со сборкой мусора.
  • более динамичный, меньше должно быть известно во время компиляции, например, могут быть функции, которые настраивают поведение объектов во время выполнения.
  • как будто инкапсулирует его код, может быть объединен и переработан, msdn.microsoft.com/en-us/library/ms173175%28v=vs.80%29.aspx
  • внешние пользователи функции см. безымянные параметры - иногда это полезно, хотя было бы неплохо иметь возможность давать им имена.
  • может быть более компактным, например, в этом простом примере возврат может быть удален, если есть один параметр, скобки также могут быть удалены.
  • выберите ваше собственное поведение, такое как наследование - ty Eric Lippert
  • другие соображения, такие как функциональные, модульные, распределенные (написание кода, тестирование или рассуждения о коде) и т. Д.

Пожалуйста, не голосуйте закрыть, это уже произошло, и он был снова открыт.Это актуальный вопрос, даже если вы либо не думаете, что подход делегатов имеет много практического применения, учитывая, насколько он противоречит установленному стилю кодирования, либо вам не нравятся преимущества делегатов.

14
задан 18 revs, 2 users 100% 23 January 2012 в 21:14
поделиться