Konwencja wielkich liter dla pól chronionych w języku C #

17

Jakie są konwencje wielkich liter dla chronionych nazw pól w C #?

Czy to _myVar (jak pole prywatne) czy MyVar (jak właściwości)?

Louis Rhys
źródło
3
Czy na pewno chcesz w ogóle mieć chronione pola? Większość powodów, dla których nie ma pól publicznych, dotyczy również pól chronionych, więc myślę, że lepiej jest zamiast tego używać chronionych właściwości.
svick
w przypadkach testowych zwykle wygodnie jest mieć chronione pola ... ale może masz rację, możesz to zmienić na właściwości. Ale jeśli chcę chronionego pola, jaka jest konwencja nazewnictwa?
Louis Rhys,
2
Czy na pewno _myVar to odpowiednia konwencja dla pól prywatnych? (zakładasz, że tak jest) Nie próbując tutaj rozpocząć wojny religijnej, po prostu próbując powiedzieć, że jeśli zdecydowałeś się na jakąś arbitralną regułę dla pól prywatnych, możesz wybrać inną regułę dla swoich pól chronionych. Jedyną radą jest być konsekwentnym.
Marek

Odpowiedzi:

13

Istnieje coś, co nazywa się Wytycznymi projektowymi dla rozwoju bibliotek klas, napisanym przez Microsoft.

Mówi on następująco:

Nie podawaj pól instancji, które są publiczne lub chronione.

Pola publiczne i chronione nie mają odpowiedniej wersji i nie są chronione wymaganiami bezpieczeństwa dostępu do kodu. Zamiast używać publicznie widocznych pól, używaj prywatnych pól i udostępniaj je poprzez właściwości.

Jak również:

  • Używaj osłonki Pascal w nazwach pól

  • Nie używaj prefiksu dla nazw pól. Na przykład nie używaj g_ lub s_ do rozróżniania pól statycznych i niestatycznych.

Jeśli chodzi o _prefiks, jest on używany tak często, jak this.konwencja (o ile widziałem przeglądanie kodu źródłowego w CodePlex / GitHub). Na przykład ReSharper promuje _sprawdzanie nazw.

jgauffin
źródło
byłeś nieco wybredny, nie dodając „Nie używaj prefiksu dla nazw pól”. z MSDN wraz z regułą obudowy Pascala :) Chociaż prawdą jest, że resharper domyślnie promuje przedrostek _, jeśli cytujesz konwencje MSDN IMHO, nie powinieneś mieszać ich z własnymi wrażeniami.
Marek
2
co to znaczy „źle wersjonować”? Czy twierdzisz, że skoro pole chronione nie jest zalecane, nie ma żadnych wskazówek dotyczących jego nazwy? W każdym razie Resharper wydaje się polecaćMyVar
Louis Rhys,
2
@Marek: Uwzględniłem własne preferencje. Po prostu stwierdziłem, co preferuje Resharper. I nie miałem zamiaru być wybiórczym. Odpowiedź zaktualizowana
jgauffin
1
@jgauffin Czy konsumenci używający refleksji przeciwko Twojemu kodowi nie zmieniają pola na właściwość przezroczystą dla dzwoniących? W jaki sposób zmiana chronionego pola na chronioną właściwość o tej samej nazwie psuje zgodność?
Quantic
1
psuje zgodność binarną: msdn.microsoft.com/en-us/library/ta31s3bc(v=vs.71).aspx
jgauffin