По соглашению классы часто называются существительными, методы - глаголами, а интерфейсы - прилагательными.
Какое общее соглашение об именах для делегата? Или как лучше отличить его имя, когда делегаты перечислены среди типов и других вещей?
Мое непосредственное предположение состоит в том, чтобы называть делегата, скорее, прилагательным, потому что интерфейс единственного метода часто можно заменить делегатом.
Некоторые мысли:
delegate object ValueExtracting(object container);
delegate object ValueExtractor(object container);
delegate object ValueExtractionHandling(object container);
delegate object ValueExtractionHandler(object container);
источник
RequestDelegate
для asp.net-core; -]В руководстве Microsoft Framework Design Guidelines - альманахе именования для меня - говорится следующее по теме:
источник
ProcessBookDelegate
...RequestDelegate
asp.net-core - так много о согласованности и соглашениях по кодированию. Думаю, они даже свои документы не читают.Поскольку делегат - это то, что выполняет действие (глагол), делегат должен называться так, как вы бы назвали то, что выполняет это действие. Взять,
Converter<TInput, TOutput>
к примеру. Глагол - преобразовать . То, что выполняет преобразование, называется конвертером , отсюда и название делегата.источник
Это зависит от нескольких вещей.
Если делегат будет использоваться как событие, его всегда следует называть
EventHandler
подтипом, например:public delegate void ValueExtractingEventHandler(object sender, ValueExtractingEventArgs e);
Если это не событие, то MS кодирования руководящих принципов (которые я никогда не могу показаться , чтобы найти правильную копию на Google) явно рекомендовать против включая такие слова , как «делегат» или «обработчик» во имени делегата, за исключением того, в частном случае
EventHandler
типы.Обычно делегаты должны быть названы в честь действий , например
ValueExtracting
(если делегат происходит до извлечения значения) илиValueExtracted
(после извлечения).Func<T1, T2, ..., TResult>
Синтаксис делегат также становится все более распространенным, но если у вас есть 4 или более параметров , идущие в нее, вам не нужно объявлять свои собственные вообще - просто использовать существующий:object ExtractObject(object source, Func<object, object> extractor);
Этот синтаксис лучше всего подходит, когда делегат используется как закрытие . Сам делегат не имеет очень интересного имени, но аргумент - это существительное агента (экстрактор, поставщик, оценщик, селектор и т. Д.)
Большинство случаев использования делегата попадает в одну из вышеперечисленных категорий, поэтому выясните, для какой из них он используется, и выберите соответствующий вариант.
источник
Я никогда не думал об этом, в основном , потому что я просто использовать один из
EventHandler<T>
,Func<T>
илиAction<T>
перегрузок и никогда не беспокоить определения моих. Я бы, наверное, выбрал ValueExtractor из перечисленных вами. Это делает его более похожим на объект, и когда вы его вызываете, вы будете использовать этот объект для выполнения действия. Например:ValueExtractor extractor += Blah; var value = extractor(data);
Кроме того, большинство встроенных делегатов также называются существительными. В случае сомнений используйте платформу .NET.
источник
Я бы выбрал ValueExtraction ...
Никогда не думал, почему, но я думаю, потому что вы храните операцию, и это должно быть существительное ... строго, это не операция, я знаю ...
источник
Исходя из этого
Enumerable.Sum
, я бы передал делегату как aFunc<object, object>
и назвал параметрselector
:void Foo(Func<object, object> selector) ...
Если вам нужно создать для него своего собственного представителя, я бы выбрал его,
ValueExtractor
поскольку это наиболее наглядное название того, что он делает.источник
В случае событий (с делегатами) Windows Forms использует следующее соглашение:
Делегат:
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
Событие:
public event MouseEventHandler MouseClick;
Слушатель событий:
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseClick);
источник