2010-01-22 15 views
7

Próbuję spojrzeć na standardy kodowania C#, aby mój kod był piękniejszy i standardowy, i mam pytanie: czy funkcje (metody, które nie są pustkami), zgodnie ze standardami kodowania C#, powinny zaczynać się od "Get "? Na przykład: "GetSongOrder()", "GetNextLine()" itp?Funkcje powinny zaczynać się od "Get"?

Dzięki.

+5

Jakie standardy? –

+1

http://www.google.co.il/search?q=C%23+Coding+Standards&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a –

+0

@ Alan, który pokazuje wiele różnych "standardów" kodowania. – leeeroy

Odpowiedz

24

Istnieją dwa przypadki:

Jeśli procedura może „dostać” wartość bardzo szybko, nie powodując skutków ubocznych w kodzie, to zaleca się używanie własności getter i pomijając nazwę „GET”:

public SongOrder SongOrder 
{ 
    get { return this.songOrder; } // ie: an enum 
} 

Jeśli jednak wymagane jest przetwarzanie, odpowiednia jest metoda z nazwą "Uzyskaj ...". To sugeruje, że mogą być efekty uboczne wywołanie tej metody, takie jak dodatkowe przetwarzanie lub zmiana jakiegoś państwa:

public string GetNextLine() 
{ 
    string line = this.stream.ReadLine(); // This may cause a longer running operation, especially if it's using Disk IO/etc 
    // do other work? 
    return line; 
} 
+1

Bardzo dobry opis. Moje myśli dokładnie - Właściwości nigdy nie powinny używać konwencji czasownik-rzeczownik, i powinny być po prostu rzeczownikiem. Metody powinny zawsze być czasownik-rzeczownik. –

+0

Dziękuję za odpowiedź, ale mam na myśli, że powinieneś wybrać na przykład "GetNextLine" lub "ReadLine". –

+0

@Alon: GetNextLine i ReadLine mogą być tym samym lub mogą być inne - nie jest to od razu jasne. Jeśli czytasz z pliku, użyj "ReadLine". Jeśli otrzymujesz linię z ciągu w pamięci, użyj "GetNextLine". – FrustratedWithFormsDesigner

1

Nie widziałem w tym celu standardu C#, ale większość kodu rzeczywistego, który widziałem, używa właściwości "getter" i pomija słowo "Get" z nazwy funkcji. Przykład:

Public SongOrderList SongOrder 
{ 
    get 
    { 
     return mySongOrderList; 
    } 
} 

Używanie „Get” (i „Set”) jako nazwę funkcji przedrostka jest coś, co zwykle zobaczyć w langauges, które nie mają właściwości la .NET (języki, takie jak C, Java) .

EDIT:

... i oczywiście można mieć ustawiaczy zbyt

Public SongOrderList SongOrder 
{ 
    get 
    { 
     //do some processing code here 
     return mySongOrderList; 
    } 
    set 
    { 
     //do some processing code here 
     mySongOrderList = value; //value is a C# keyword, in case you didn't know. it is the parameter to the setter 
    } 
} 

Oczywiście, jeśli chcesz getter i setter i nie potrzeba żadnego dodatkowego przetwarzania , po prostu czysta Java-fasola-jak get/set youc to zrobić:

Public SongOrderList SongOrder 
    { 
     get; set; 
    } 

Jeśli chcesz tylko publiczny getter można to zrobić (myślę - minęło trochę czasu):

+0

Pokonaj mnie. :) Myślę, że tendencja do używania "Get" pochodzi z częstego używania przez Java par GetFoo()/SetFoo (value). W języku C# zazwyczaj zawijamy je we właściwości Foo. – JMD

+0

i czy istnieje parametr? –

+1

Nie zawsze jednak prawda - jeśli istnieją efekty uboczne wywoływania tego, to lepiej jako metoda o nazwie "Get", IMO. –

2

Twoja nazwa funkcji powinna być zwięzła i mieć sens. Nic dodać nic ująć.

Jeśli ci się uda, użyj Get. Jeśli Retrieve działa, użyj tego.

Nie ma prawdziwego "standardu" dla nazewnictwa konwencji.

+2

Powiedziałbym "Nazwa funkcji powinna być tak zwięzła, jak to możliwe, pozostając samoopisowym" - Nie idź zbyt krótko;) –

2

Ogólnie rzecz biorąc, konwencja nazewnictwa nazw-czasowników dla funkcji jest wspólna. "Get" to tylko jeden z czasowników, który możesz zobaczyć. Może to być również "Aktywuj", "Zamknij", "Zrzuć" lub cokolwiek ... jest to tylko konsekwencja angielskiego i ogólnego kodowania, że ​​metoda lub funkcja zwykle "Zrobią coś" dla "Pewnego rodzaju obiektów (obiektów) ".

1

Nie, nie ma standardowego że funkcja powinna zaczynać się od „Get”.

Podczas tworzenia nazw funkcji, które mają sens, często przyjmują tę formę, na przykład funkcję GetHashCode. Inne czasowniki na początku są wspólne, jak w funkcji ToString i tylko czasowniki jak w funkcji Encode.

Istnieją inne formy, w których raczej opisuje się wynik działania funkcji, np. Substring.

1

Oprócz innych odpowiedzi - jeśli masz metodę taką jak GetNextLine(), możesz rozważyć zwrócenie wyliczenia zamiast np.

IEnumerable<Line> GetLines();

Powiązane problemy