Правильное соглашение об именах для делегата .NET?

По соглашению классы часто называют как существительные, методы как глаголы и интерфейсы как прилагательные.

Каково общее соглашение об именовании для делегата? Или как можно отличить его имя, когда делегаты перечислены среди типов и прочего?

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

Некоторые мысли:

delegate object ValueExtracting(object container);

delegate object ValueExtractor(object container);

delegate object ValueExtractionHandling(object container);

delegate object ValueExtractionHandler(object container);
72 голоса | спросил John K 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 06:00:28 +0300000000amSat, 27 Feb 2010 06:00:28 +030010 2010, 06:00:28

7 ответов


0

Лично я использую несколько разных шаблонов:

[Task][State]Handler - UITaskFinishedHandler

[Event]Handler - ControlLoadedHandler

[Function Name]Delegate - DoSomeWorkDelegate - используется, когда мне нужно создать делегат для вызова функции в другом /новая тема

[Task]Callback - ContainerLoadedCallback - используется, когда элемент управления A запускает действие, элемент управления B выполняет большую часть работы и элемент управления A прошел зависимость от элемента управления B (то есть ControlA, возможно, передал контейнер UI для заполнения ControlB и нуждается в уведомлении, чтобы фактически показать контейнер)

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

ответил slugster 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 06:34:20 +0300000000amSat, 27 Feb 2010 06:34:20 +030010 2010, 06:34:20
0

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

  

√ добавляйте суффикс «EventHandler» к именам используемых делегатов   в событиях.
  √ ДОБАВЛЯЙТЕ суффикс «Обратный звонок» к именам делегатов других   чем те, которые используются в качестве обработчиков событий.
  X НЕ добавляйте суффикс «Делегат» к делегату.

ответил Borislav Ivanov 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 23 Sep 2014 15:23:21 +0400 2014, 15:23:21
0

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

ответил Kevin Kibler 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 07:07:10 +0300000000amSat, 27 Feb 2010 07:07:10 +030010 2010, 07:07:10
0

Это зависит от нескольких вещей.

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

public delegate void ValueExtractingEventHandler(object sender,
    ValueExtractingEventArgs e);

Если это не событие, то в руководствах по кодированию MS (которые я никогда не смогу найти нужную копию в Google) явно рекомендуется против , включая такие слова, как «делегат» или «обработчик» в имя делегата, кроме в особом случае типов EventHandler.

Обычно делегаты должны быть названы в честь actions , что будет выглядеть как ValueExtracting (если делегат происходит до извлечения значения) или ValueExtracted (после извлечения).

Синтаксис делегата Func<T1, T2, ..., TResult> также становится все более распространенным, но если в него не входит 4 или более параметров, вы не сможете нужно объявить свой собственный вообще - просто используйте существующий:

object ExtractObject(object source, Func<object, object> extractor);

Этот синтаксис лучше всего подходит, когда делегат используется в качестве замыкания . Сам делегат не имеет очень интересного имени, но аргументом является агент существительное (экстрактор, поставщик, оценщик, селектор и т. Д.)

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

ответил Aaronaught 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 06:34:32 +0300000000amSat, 27 Feb 2010 06:34:32 +030010 2010, 06:34:32
0

Я никогда не думал об этом, в основном потому, что я просто использовал один из EventHandler<T>, Func<T> или Action<T> перегружают и не удосуживаются определить мои собственные. Я бы, вероятно, выбрал ValueExtractor из тех, что вы перечислили. Это делает его более похожим на объект, и когда вы вызываете его, вы будете использовать этот объект для выполнения действия. Например:

ValueExtractor extractor += Blah;
var value = extractor(data);

Кроме того, большинство встроенных делегатов также именуются как существительные. Если есть сомнения, следуйте .NET Framework.

ответил MikeP 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 06:04:02 +0300000000amSat, 27 Feb 2010 06:04:02 +030010 2010, 06:04:02
0

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

ответил Matias 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 06:14:19 +0300000000amSat, 27 Feb 2010 06:14:19 +030010 2010, 06:14:19
0

На основе Enumerable.Sum , я передам делегата как Func<object, object> и назову параметр selector:

void Foo(Func<object, object> selector) ...

Если вам нужно создать собственный делегат, я бы использовал ValueExtractor, так как это наиболее описательное имя для этого делает.

ответил Sam Harwell 27 FebruaryEurope/MoscowbSat, 27 Feb 2010 06:19:27 +0300000000amSat, 27 Feb 2010 06:19:27 +030010 2010, 06:19:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132