Zdarzają się sytuacje, gdy nazwa przekazana w parametrze zostanie rzutowana na nowy typ, ale nazwa obiektu przekazywanego powinna pozostać podobna. W przypadku atrybutów klas możemy użyć tego operatora, ale co z lokalną zmienną w funkcjach. Jaka konwencja kodowania jest szeroko stosowana.
przykład,
void MyFunc(BaseClass myPara)
{
DerivedClass _mypara = (BaseClass)myPara;
}
lub wręcz przeciwnie
void MyFunc(BaseClass _myPara)
{
DerivedClass mypara = (BaseClass)_myPara;
}
lub dowolna inna konwencja
Odpowiedzi:
Prefiks parametrów lub zmiennych lokalnych znakiem podkreślenia nie jest bardzo idiomatyczny w języku C #, nie jest bardzo łatwy do odczytania i nie jest często używany (chociaż jest to legalne, więc możesz to zrobić, jeśli chcesz).
Najlepsza nazwa parametru i zmiennej to nazwa opisowa. Musisz pomyśleć, dlaczego zmieniasz typ, co jest przyczyną obsady. Powinieneś być w stanie wymyślić 2 różne nazwy. Np. Czy przekazałeś „osobę” i przekształciłeś go w „klienta”, to możesz użyć osoby i / lub klienta w nazwach zmiennych.
Jeśli naprawdę nie możesz pomyśleć o 2 różnych nazwach, użyłbym w nazwie „as” ( kilka dni temu na tej stronie było pytanie ). Np. Użyłbyś „myParaAsDerived” dla zmiennej lokalnej.
Gdybym w ogóle nie użył tego, zastanowiłbym się nad problemem, który rozwiązujesz, i jakie sensowne nazwy mogłyby zostać użyte, ale jeśli wszystko inne zawiedzie, jest to dość czytelne.
źródło
Po pierwsze za pomocą
Wyraźnie się myli! Ponieważ wiele standardów kodowania c # używa przedrostka „_” na wszystkich nazwach pól ! Kod musi być łatwy do zrozumienia przez innego programistę, więc kodu nie należy pisać w sposób, który wprowadzałby w błąd wielu programistów C #.
Biorąc pod uwagę wszystkie zalety małych metod, osobiście nie widzę potrzeby konwencji nazewnictwa w celu oddzielenia zmiennych lokalnych od parametrów. Jeśli metody mają tak wiele parametrów i zmiennych lokalnych, że nie można powiedzieć, co się dzieje bez konwencji nazewnictwa, masz większe problemy. (Jest to dobrze omówione w książce Java Clean Code Book , ale nadal uważam ją za wielką korzyść jako programista C #)
źródło
Jeśli chcesz poprzedzić je czymś, powinieneś użyć
p_
parametru: generalnie myślę, że prawdopodobnie zrobiłbyś to wielu ludziom. ALE bądź konsekwentny, nie rób tego tylko w jednym miejscu tylko dlatego, że potrzebujesz dwóch różnych nazw dla zmiennych, które chcesz nadać tej samej nazwie.Tak wygląda dobra ogólna reguła z nazwami zmiennych;
Jeśli masz tylko jeden typ obiektu, nazwij go według funkcji:
Jeśli masz ich więcej niż jedną nazwę według ich funkcji i specjalizacji:
źródło
m_Whatever = p_Whatever;
- nadanie tym dwóm identyfikatorom znacząco różnych nazw byłoby niezręczne. Zacząłem jednak zastanawiać się, czy te przypadki są wystarczająco częste, aby uzasadnić spójną konwencję.Konwencje nazewnictwa C # pozwolą Ci:
I proszę, trzymaj się z dala od węgierskiej notacji. Jest to bezcelowe i nie przestrzega konwencji C #.
źródło
Podkreślanie w nazewnictwie zmiennych może być trochę niepotrzebne, ponieważ mamy słowo kluczowe „this” odnoszące się konkretnie do zmiennych na poziomie klasy. Jeśli chcesz dowiedzieć się więcej o konwencjach nazewnictwa zmiennych od ekspertów, proponuję rzucić okiem na niesławny artykuł zatytułowany „Reguły Ottingera dla zmiennych i nazewnictwa klas” Tima Ottingera, artykuł poparty przez mentora czystego kodowania Roberta C. Martina .
Ottinger stwierdza, że twój kod musi pozostać tak czytelny, jak to możliwe, jak dobrze napisana proza, więc ...
public void Function(string p_Parameter1, string p_Parameter2)
... byłby bardziej czytelny jak ...
public void Function(string parameter1, string parameter2)
... gdzie parametry 1 i 2 są opisowymi nazwami odpowiednich zmiennych.
Oto link, zdecydowanie warty obejrzenia: Link
źródło
Wierzę w przyrostek parametrów: ciąg s_, int i_ itp
Uważam również, że nazwy parm powinny być krótkie i ogólne, jak to możliwe.
Teraz z powodów:
Wszystko ma swoje kompromisy, a to, czy czegoś użyjesz, czy nie, będzie bardzo zależeć od tego, jak pasuje do twojego obecnego stylu.
źródło
s
ii
są krótkimi nazwami, ponieważ to tylko przykład. IOW Nie sądzę, żeby to w ogóle był węgierski - myślę, że źle interpretujesz krótką nazwę, która jest po prostu klasycznastring s
lub nieint i
umiem wymyślić lepszej nazwy, ale z przyklejonymi przyrostkami podkreślenia .