Dlaczego C # nie obsługuje const na poziomie klasy / metody?
Zastanawiałem się przez chwilę, dlaczego C # nie obsługujeconst
na poziomie klasy lub metody. Wiem, że Jon Skeet od dawna chciał obsługiwać niezmienność, i przyznaję, że użycie składni C ++ funkcji const mogłoby w tym pomóc. Dodając słowo kluczowe const na poziomie klasy, uzyskalibyśmy pełną obsługę.
Moje pytanie brzmi: dlaczego zespół C # nie opracował tego rodzaju wsparcia?
Wyobrażam sobie, że wszystko można utworzyć za pomocą sprawdzania kompilacji lub atrybutów, bez konieczności zmiany CLR. Nie mam nic przeciwko temu, aby kod był w stanie przesłonić zachowanie const poprzez odbicie.
Wyobraź to sobie:
<code>const class NumberContainer { public int Number { get; } } </code>
.. Taka klasa mogłaby być wypełniona tylko w czasie budowy, więc potrzebowalibyśmy konstruktora, który zajmie się int.
Inny przykład jest stały na poziomie metody:
<code>public int AddNumbers(NumberContainer n1, NumberContainer n2) const { return n1.Number + n2.Number; } </code>
Metody na poziomie stałym nie powinny być w stanie zmieniać stanu we własnej klasie lub przekazywać do nich instancje typów referencyjnych. Ponadto funkcje poziomu stałego mogą wywoływać tylko inne funkcje na poziomie const, gdy znajdują się w swoim zakresie.
Nie jestem pewien, czy lambdy i delegaci uczynią wszystko zbyt trudnym (lub niemożliwym) do osiągnięcia, ale jestem pewien, że ktoś z większym doświadczeniem w projektowaniu języka i kompilatora mógłby mi powiedzieć.
Jak zauważył Steve B w komentarzach, istnieniereadonly
sprawia, że rzeczy są nieco bardziej złożone, jak const ireadonly
są blisko tego samego podczasruntime
, alereadonly
wartości nie można określić podczas kompilacji. Myślę, że moglibyśmyconst
ireadonly
poziom, ale może to być zbyt mylące?
Jaki jest powód, dla którego nie wprowadzono tego w życie? Obawy dotyczące użyteczności (zrozumienie constness w C ++ zwykle dość trudne dla nowych użytkowników), problemy związane z projektowaniem języka (nie można tego zrobić) lub po prostu priorytetowe obawy (dni buczenia niezmienności się skończyły) ..?