Почему не поддерживает ли C #39;t C #const на уровне класса/метода?

Я некоторое время задавался вопросом, почему C #не поддерживает constна уровень класса или метода. Я знаю, что Джон Скит давно хотел поддержки неизменяемости, и я считаю, что использование синтаксиса функции const в C++ может помочь в этом. Добавив ключевое слово const на уровне класса, мы получили бы полную поддержку.

А теперь мой вопрос: по какой причине команда C #не разработала такую ​​поддержку?

Я полагаю, что все можно создать с помощью проверки времени компиляции -или с помощью атрибутов без необходимости изменения среды CLR. Я не возражаю против того, чтобы код мог переопределить поведение const посредством отражения.

Представьте себе:

const class NumberContainer
{
    public int Number { get; }
}

.. Такой класс может быть заполнен только во время построения, поэтому нам нужен конструктор, принимающий int.

Другим примером является const на уровне метода -.:

public int AddNumbers(NumberContainer n1, NumberContainer n2) const
{
   return n1.Number + n2.Number;
}

Методы уровня Const -не должны иметь возможности изменять состояние в своем собственном классе или переданных им экземплярах ссылочных типов. Кроме того, функции уровня const -могут вызывать другие функции уровня const -, только находясь в своей области видимости.

Я не совсем уверен, сделают ли лямбда-выражения и делегаты все слишком трудным (или невозможным )для достижения, но я уверен, что кто-то с большим опытом в разработке языков и компиляторов мог бы мне сказать.

Как заметил Стив Б. в комментариях, существование readonlyнемного усложняет ситуацию, поскольку const и readonlyблизки к одному и тому же во время runtime, но значения readonlyне могут быть определяется во время компиляции -. Я предполагаю, что мы могли бы иметь уровни constи readonly, но это может быть слишком запутанным?

Итак, по какой причине это не реализовано? проблемы удобства использования (понимание константности в C++ обычно довольно сложно для новых пользователей ), проблемы дизайна языка (не могут быть решены )или просто проблемы приоритета (дни неизменности -гудят над )...?

25
задан cwap 11 April 2012 в 07:49
поделиться