Są chwile, kiedy będę musiał zmodyfikować wartość przekazywaną do metody z poziomu samej metody. Przykładem może być tutaj odkażanie łańcucha, takiego jak ta metoda:
void SanitizeName(string Name)
{
Name = Name.ToUpper();
//now do something here with name
}
Jest to całkowicie nieszkodliwe, ponieważ Name
argument nie jest przekazywany przez odwołanie. Jeśli jednak z jakiegoś powodu programista w przyszłości zdecyduje się na przekazanie wszystkich wartości przez ref, wszelkie odkażanie łańcucha wpłynie na wartość poza metodą, co może mieć szkodliwe wyniki.
Dlatego zamiast przypisywania samego argumentu zawsze tworzę lokalną kopię w następujący sposób:
void SanitizeName(string Name)
{
var SanitizedName = Name.ToUpper();
//now do something here with name
}
Zapewnia to, że zmiana przekazu wartości nigdy nie wpłynie na działania poza metodą, ale zastanawiam się, czy jestem nadmiernie paranoikiem na ten temat.
if (param == NULL) param = default_value;
?
by ref
która nie została przekazana, że wcześniej, a więc z jakiegoś powodu przekształcając dostęp lokalny na dostęp nielokalny, zawsze musi dokładnie sprawdzić konsekwencje.
Name = Name.ToUpper();
utrudnia śledzenie kodu w głowie, ponieważ wartośćName
zmian. Twój drugi przykład jest nie tylko bardziej przyszłościowy, ale łatwiej jest zrozumieć, co robi.