2010-04-16 13 views
11

To może być duplikat pytania. Nie można go znaleźć w wyszukiwaniu. W języku Java, aby oznaczyć parametr metody jako stałą, deklarujemy go jako ostateczną, jaka jest odpowiednik słowa kluczowego C#? JakPrzekazywanie parametru jako ostatecznego w C#

public void doSomeThing(final object myObject) 
{ 
//print myobject 
} 
+0

dlaczego nie próbujesz z słowem kluczowym const – KhanS

+1

@KahnS - ponieważ użycie tego w parametrze funkcji nie spowoduje nawet kompilacji. – Oded

+0

Gdybym został zapytany, jaka funkcja C++ tęsknię najbardziej w C#, byłoby to metody i parametry const. – Gorpik

Odpowiedz

7

Nie jest to możliwe w języku C# - nie ma sposobu, aby oznaczyć przekazywane w parametrze jako stała.

Jeśli masz const, który musi być dostępny dla wielu funkcji, dlaczego nie zadeklarować go z odpowiednim zasięgiem (zakres klasy lub globalny w razie potrzeby)?

+5

@Oded Głównym celem parametru final z parametrem method jest zadeklarowanie go jako niemodyfikowalnego w metodzie.Nie jest to, że korzystasz z wartości stałej w nim.Te słowo kluczowe pomaga w projektowaniu szumu kluczowego programu word.Pleasssssse – Ravisha

1

C# ma readonly słowa kluczowego, ale nie może być Uset do zmiennych lokalnych (tylko członkowie klasy). Oznacza to, że nie ma możliwości oznaczenia stałej parametru metheod.

Tęsknię za tym, bo w moim kodzie Java prawie każdy parametr i lokalna zmienna jest ostateczna (co jest dobrym wzorem kodowania, który wierzę).

3

Istnieje słowo kluczowe readonly w języku C#, ale do tej pory możemy zastosować je tylko do pól, a nie do lokalnych lub parametrów.

Często w Javie słowo kluczowe final jest zwykle używane jako styl, aby ułatwić zamykanie wartości w anonimowych klasach wewnętrznych. Ale ten problem nie istnieje w języku C#, ponieważ anonimowe metody/lambdy mogą zamykać nad modyfikowanymi zmiennymi.

Narzędzia takie jak Resharper mogą wyświetlać zmutowane zmienne/parametry w innym kolorze, dzięki czemu można szybko zobaczyć "komplikacje" w swojej metodzie. Używam go, aby zmutowane nazwy świeciły pogrubioną zieloną czcionką lub coś w tym stylu!

Nie oznacza to, że samo C# nie ulegnie poprawie dzięki wielu dodatkowym funkcjom, takim jak powszechnie stosowane readonly, które pomagają w zadeklarowanej niezmienności. Ale jeśli masz krótkie metody i Resharper, aby podkreślić rzeczy dla ciebie, to nie musisz ręcznie zadeklarować rzeczy jako final/readonly/const (w zależności od języka). IDE śledzi to za Ciebie.

Ma to więcej sensu: jak odkryli programiści Java, większość "zmiennych" nie jest wcale zmiennymi. Ale jeśli musisz o tym zadeklarować, dodając do wszystkiego final, w kodzie jest dużo dodatkowego szumu kluczowego. Bardziej sensowne byłoby domyślne ustawienie final i posiadanie słowa kluczowego, które sprawiłoby, że rzeczy byłyby mutable. Tak to działa w F #.

+1

. Jak wspomniano w moim poprzednim komentarzu do oded.It pomaga w projektowaniu framework.Its reguła zdefiniujesz w ur streszczenie klas, jak to powinno się zachowywać, Jeśli jest to trochę dodatkowe @ zaletą dobrego projektu, więc niech tak będzie. – Ravisha

+1

@Ravisha - Nie mówię "nie rób tego". W języku Java niezbędne jest umożliwienie zamknięcia anonimowych klas. Mówię * jeśli * projektowałeś dzisiaj język, może wybierzesz domyślne ustawienie, by było odwrotnie, i zamiast tego będziesz miał słowo kluczowe "zmienne". Rozsądnym rozwiązaniem jest ustawienie wspólnego przypadku jako domyślnego i użycie słowa kluczowego w celu nadpisania go w rzadkich przypadkach. –

+0

Wygląda na to, że oba są w tej samej linii.Zgadzam się, aby słowo kluczowe było podobne do zmiennego – Ravisha

3

W C# 4.0/Visual Studio 2010 z zainstalowanym dodatkiem Code Contracts można użyć Contract.VVariant w atrybucie ContractInvariantMethod, aby sprawdzić, czy wartość nie jest modyfikowana podczas wywołania metody.

Nie do końca to samo, ale tak blisko, jak to tylko możliwe.

1

Jak stwierdzili inni, nie ma czegoś takiego w języku C#.

Jeśli zamiarem jest zabraniają zwanej metody, aby zmienić swój obiekt (lub wiedzieć na pewno, że nie), jedyną opcją jest przechodzą głęboki klona swojego obiektu. - Niezbyt elegancki, ale jedyny możliwy sposób, by się upewnić.

Powiązane problemy