Надлежащее соглашение о присвоении имен для Делегата.NET тип?

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

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

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

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

delegate object ValueExtracting(object container);

delegate object ValueExtractor(object container);

delegate object ValueExtractionHandling(object container);

delegate object ValueExtractionHandler(object container);
76
задан Vikrant 2 November 2016 в 12:05
поделиться

6 ответов

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

[Задача] [ Состояние] Обработчик - UITaskFinishedHandler

[Событие] Обработчик - ControlLoadedHandler

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

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

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

103
ответ дан 24 November 2019 в 11:14
поделиться

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

15
ответ дан 24 November 2019 в 11:14
поделиться

На основе Enumerable.Sum я бы передал делегата как Func и назовите селектор параметра :

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

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

0
ответ дан 24 November 2019 в 11:14
поделиться

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

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

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

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

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

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

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

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

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

6
ответ дан 24 November 2019 в 11:14
поделиться

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

0
ответ дан 24 November 2019 в 11:14
поделиться

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

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

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

3
ответ дан 24 November 2019 в 11:14
поделиться
Другие вопросы по тегам:

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