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) ..?

questionAnswers(6)

yourAnswerToTheQuestion