2010-09-26 23 views
34

W C++ można zdefiniować stałą metodę tak:metody Const w C#

int func_that_does_not_modify_this(int arg) const {} 

Umieszczenie const na końcu funkcji zapobiega przypadkowemu modyfikacji żadnej z właściwości wewnętrznych i pozwala rozmówcy wiedzą że ta funkcja nie zmieni obiektu.

Czy istnieje koncepcja taka jak ta w języku C#?

Odpowiedz

42

Nie, nie ma czegoś takiego w języku C#. Dużo się o tym mówiło, ale dość trudno jest ustawić const tak, aby był weryfikowalny w czasie kompilacji, nie można go odrzucić tak, jak to jest w C++ i nadal jest dość łatwy w użyciu bez potrzeby wszystkich musi to zrobić idealnie, gdy projektują swoje własne klasy.

Oczywiście, jeśli projektujesz własne typy, które mają być niezmienne (jak string), wszystkie metody instancji na nim są faktycznie const. Nie zawsze jest to praktyczne, ale w razie potrzeby jest to ważna technika.

8

Nie. Nic podobnego w języku C#.

No const &.

Jak Jon wskazuje, można oczywiście zastosować metodę const, ale nie można wykroczyć poza dokumentację, aby rozmówca wiedział, że metoda jest stała.

11

Code Contract powinien zapewnić taką funkcję w przyszłości. Obecnie można oznaczyć metodę jako [Pure], co oznacza, że ​​nie ma żadnych skutków ubocznych (tj. Nie modyfikuje żadnego z członków klasy). Niestety, bieżąca wersja narzędzi nie wymusza tej reguły, więc użycie tego atrybutu służy wyłącznie celom dokumentacyjnym. Jestem prawie pewien, że w przyszłej wersji będzie on egzekwowany za pomocą analizy statycznej (tj. W czasie kompilacji) lub przynajmniej to właśnie wskazuje dokumentacja.

Powiązane pytania ogólne: Pure functions in C#

+0

To byłoby miłe :) – mpen

Powiązane problemy