Я некоторое время задавался вопросом, почему 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++ обычно довольно сложно для новых пользователей ), проблемы дизайна языка (не могут быть решены )или просто проблемы приоритета (дни неизменности -гудят над )...?