Czy istnieją oficjalne wytyczne C # dotyczące kolejności przedmiotów pod względem struktury klas?
Czy to idzie:
- Pola publiczne
- Pola prywatne
- Nieruchomości
- Konstruktory
- Metody
?
Jestem ciekawy, czy istnieje twarda i szybka zasada dotycząca kolejności przedmiotów? Jestem trochę w tym miejscu. Chcę trzymać się określonego standardu, aby móc to zrobić wszędzie.
Prawdziwy problem polega na tym, że moje bardziej złożone właściwości wyglądają bardzo podobnie do metod i czują się nie na miejscu na szczycie przed konstruktorem.
Wszelkie wskazówki / sugestie?
c#
.net
coding-style
code-cleanup
code-structure
mmcdole
źródło
źródło
public
iprotected
.private
aniinternal
członków (wierzę). Miły sposób na zobaczeniepublic
iprotected
jednak. Widzimy źródło klas .NET Framework, tutaj referencesource.microsoft.com zbytOdpowiedzi:
Zgodnie z dokumentacją reguł StyleCop kolejność jest następująca.
W obrębie klasy, struktury lub interfejsu: (SA1201 i SA1203)
W ramach każdej z tych grup uporządkuj według dostępu: (SA1202)
W obrębie każdej grupy dostępu uporządkuj według statycznych, a następnie niestatycznych: (SA1204)
W obrębie każdej statycznej / niestatycznej grupy pól, uporządkuj tylko do odczytu, a następnie nie do odczytu: (SA1214 i SA1215)
Rozwinięta lista ma 130 linii, więc nie rozwinę jej tutaj. Metoda rozwinięta część to:
Dokumentacja zauważa, że jeśli zalecana kolejność nie jest odpowiednia - powiedzmy, że wdrażanych jest wiele interfejsów, a metody interfejsu i właściwości powinny być pogrupowane razem - użyj częściowej klasy, aby pogrupować powiązane metody i właściwości.
źródło
Zamiast grupować według widoczności lub według rodzaju elementu (pole, właściwość, metoda itp.), A co z grupowaniem według funkcjonalności?
źródło
To jest stare, ale wciąż bardzo aktualne pytanie, więc dodam to: Jakiej pierwszej rzeczy szukasz, kiedy otworzysz plik zajęć, który mógłeś przeczytać wcześniej? Pola? Nieruchomości? Z doświadczenia zdałem sobie sprawę, że prawie niezmiennie idę polować na konstruktorów, ponieważ najbardziej podstawową rzeczą do zrozumienia jest to, jak ten obiekt jest zbudowany.
Dlatego zacząłem umieszczać konstruktory na pierwszym miejscu w plikach klas, a wynik był psychologicznie bardzo pozytywny. Standardowa rekomendacja umieszczania konstruktorów po szeregu innych rzeczy wydaje się dysonansowa.
Nadchodząca funkcja głównego konstruktora w C # 6 dostarcza dowodów, że naturalne miejsce dla konstruktora znajduje się na samym szczycie klasy - w rzeczywistości podstawowe konstruktory są określone nawet przed otwartym nawiasem klamrowym.
To zabawne, jak wielką różnicę sprawia takie zamawianie. Przypomina mi to, jak
using
kiedyś zamawiano instrukcje - najpierw z przestrzeniami nazw Systemu. Polecenie „Organize Usings” programu Visual Studio używało tej kolejności. Terazusing
s są tylko uporządkowane alfabetycznie, bez specjalnego traktowania przestrzeni nazw Systemu. Rezultat jest po prostu prostszy i czystszy.źródło
Nie znam standardu językowego ani branżowego, ale zwykle układam rzeczy w tej kolejności, a każda sekcja jest zawinięta w #region:
za pomocą instrukcji
Przestrzeń nazw
Klasa
Członkowie prywatni
Nieruchomości publiczne
Konstruktory
Metody publiczne
Metody prywatne
źródło
Poleciłbym stosowanie standardów kodowania IDesign lub wymienionych na stronie internetowej Brada Abrama . To są najlepsze dwa, jakie znalazłem.
Brad powiedziałby ...
źródło
Jak wspomniano wcześniej, w języku C # nie ma nic, co dyktuje układ, osobiście używam regionów i robię coś takiego dla przeciętnej klasy.
W każdym razie ma to dla mnie sens
źródło
From StyleCop
pola prywatne, pola publiczne, konstruktory, właściwości, metody publiczne, metody prywatne
Ponieważ StyleCop jest częścią procesu kompilacji MS, można to uznać za de facto standard
źródło
Zwykle staram się postępować według następnego wzoru:
Każda część (statyczna i instancja) składa się z następujących typów elementów:
Następnie członkowie są sortowani według widoczności (od mniej do bardziej widocznych):
Kolejność nie jest dogmatem: proste klasy są łatwiejsze do odczytania, jednak bardziej złożone klasy wymagają grupowania specyficznego dla kontekstu.
źródło
Preferuję sortowanie według rodzaju, a następnie zmniejszanie widoczności w następujący sposób
Wiem, że narusza to Style Copa i jeśli ktoś może podać mi dobry powód, dla którego powinienem umieścić szczegóły implementacji typu przed jego interfejsem, jestem gotów to zmienić. Obecnie zdecydowanie wolę umieszczać członków prywatnych na końcu.
Uwaga: nie używam pól publicznych ani chronionych.
źródło
Najbliżej można znaleźć „Wytyczne projektowe, kod zarządzany i .NET Framework” ( http://blogs.msdn.com/brada/articles/361363.aspx ) autorstwa Brada Abramsa
Wiele standardów jest tu opisanych. Odpowiednia sekcja to 2.8.
źródło
jedyne wskazówki dotyczące kodowania, jakie widziałem w tym zakresie, to umieszczenie pól na początku definicji klasy.
zwykle stawiam konstruktorów w następnej kolejności.
mój ogólny komentarz byłby taki, że powinieneś trzymać się jednej klasy na plik, a jeśli klasa jest na tyle duża, że organizacja właściwości w stosunku do metod jest dużym problemem, jak duża jest klasa i czy powinieneś ją zrefaktoryzować? czy to dotyczy wielu problemów?
źródło
Wolę umieszczać pola prywatne u góry razem z konstruktorami, potem umieszczać bity interfejsu publicznego, a potem bity interfejsu prywatnego.
Ponadto, jeśli twoja definicja klasy jest wystarczająco długa, aby porządkowanie przedmiotów miało duże znaczenie, prawdopodobnie jest to zapach kodu wskazujący, że twoja klasa jest zbyt obszerna i złożona, i powinieneś zreformować.
źródło
Utrzymuję to tak proste, jak to możliwe (przynajmniej dla mnie)
Wyliczenia
Deklaracje
Konstruktory
Zastępują
Metody
Właściwości
Moduł obsługi zdarzeń
źródło
Z pewnością w języku nie ma niczego, co by to wymuszało. Staram się grupować rzeczy według widoczności (publiczne, następnie chronione, a następnie prywatne) i używam #regions do grupowania powiązanych funkcji funkcjonalnie, niezależnie od tego, czy jest to właściwość, metoda, czy cokolwiek innego. Metody konstrukcyjne (czy to rzeczywiste liczniki, czy statyczne funkcje fabryczne) są zwykle na pierwszym miejscu, ponieważ są pierwszą rzeczą, o której klienci powinni wiedzieć.
źródło
Wiem, że to stare, ale moje zamówienie wygląda następująco:
w kolejności publicznej, chronionej, prywatnej, wewnętrznej, abstrakcyjnej
Lubię też pisać takie właściwości (zamiast skróconego podejścia)
źródło