Zgodnie z konwencją klasy są często nazywane rzeczownikami, metodami takimi jak czasowniki i interfejsami, takimi jak przymiotniki.
Jaka jest powszechna konwencja nazewnictwa delegatów? Albo jaki jest dobry sposób na rozróżnienie jego nazwy, gdy delegaci są wymienieni wśród typów i innych rzeczy?
Moim bezpośrednim założeniem jest nazwanie delegata bardziej prawdopodobnym przymiotnikiem, ponieważ interfejs jednej metody można często zastąpić delegatem.
Kilka myśli:
delegate object ValueExtracting(object container);
delegate object ValueExtractor(object container);
delegate object ValueExtractionHandling(object container);
delegate object ValueExtractionHandler(object container);
źródło
RequestDelegate
dla asp.net-core; -]Microsoft Wytyczne projektowe ramowe - almanach nazewnictwa dla mnie, mówi, co następuje na temat:
źródło
ProcessBookDelegate
...RequestDelegate
asp.net-core - tyle do spójności i konwencji kodowania. Myślę, że nawet nie czytają swoich własnych dokumentów.Ponieważ delegat jest czymś, co wykonuje akcję (czasownik), delegat powinien nosić taką nazwę, jak nazwałbyś coś, co wykonuje tę akcję. Weźmy
Converter<TInput, TOutput>
na przykład. Czasownik to Convert . To, co dokonuje konwersji, nazywa się konwerterem , stąd nazwa delegata.źródło
To zależy od kilku rzeczy.
Jeśli delegat ma być używany jako zdarzenie, należy zawsze nazywać go
EventHandler
podtypem, na przykład:public delegate void ValueExtractingEventHandler(object sender, ValueExtractingEventArgs e);
Jeśli nie jest to wydarzenie, to MS wytyczne (który nigdy nie może wydawać się znaleźć odpowiedni egzemplarz w Google) kodujące wyraźnie zalecane przed tym słów takich jak „delegata” lub „obsługi” w nazwie delegat wyjątkiem w szczególnym przypadku
EventHandler
rodzaje.Zwykle delegaci powinni być nazwani po akcjach , które wyglądałyby tak
ValueExtracting
(jeśli delegat dzieje się przed wyodrębnieniem wartości) lubValueExtracted
(po wyodrębnieniu).Func<T1, T2, ..., TResult>
Składnia delegat jest również coraz bardziej powszechne, ale jeśli nie masz 4 lub więcej parametrów wchodząc w niego, nie trzeba zadeklarować własną rękę w ogóle - po prostu użyć istniejący:object ExtractObject(object source, Func<object, object> extractor);
Ta składnia jest najlepsza, gdy delegat jest używany jako zamknięcie . Sam delegat nie ma bardzo interesującej nazwy, ale argumentem jest rzeczownik agenta (ekstraktor, dostawca, oceniający, selektor itp.)
Większość zastosowań delegatów pasuje do jednej z powyższych kategorii, więc sprawdź, do której z nich jest używany, wybierz odpowiednio.
źródło
Nigdy nie myślałem o tym, przede wszystkim dlatego, że po prostu użyć jednego z
EventHandler<T>
,Func<T>
lubAction<T>
przeciążeniem i nigdy nie przeszkadzało definiując własne. Prawdopodobnie wybrałbym ValueExtractor z tych, które wymieniłeś. To sprawia, że brzmi bardziej jak obiekt, a kiedy go wywołasz, będziesz używać tego obiektu do wykonania akcji. Na przykład:ValueExtractor extractor += Blah; var value = extractor(data);
Ponadto większość wbudowanych delegatów nazywa się również jak rzeczowniki. W razie wątpliwości postępuj zgodnie z platformą .NET.
źródło
Poszedłbym z ValueExtraction ..
Nigdy nie zastanawiałem się dlaczego, ale myślę, że ponieważ przechowujesz operację i powinna to być rzeczownik .. ściśle, to nie jest operacja, wiem ...
źródło
Na podstawie
Enumerable.Sum
, przekazałbym delegatowi jako aFunc<object, object>
i nazwałbym parametrselector
:void Foo(Func<object, object> selector) ...
Jeśli musisz wyznaczyć do tego własnego delegata, wybrałbym,
ValueExtractor
ponieważ jest to najbardziej opisowa nazwa tego, co robi.źródło
W przypadku zdarzeń (z delegatami) Windows Forms używa następującej konwencji:
Delegat:
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
Zdarzenie:
public event MouseEventHandler MouseClick;
Odbiornik wydarzeń:
this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseClick);
źródło