Мне было интересно, почему С# не поддерживает const
на уровне класса или метода. Я знаю, что Джон Скит давно хотел поддерживать неизменность, и я понимаю, что использование синтаксиса функции const может помочь в этом. Добавив ключевое слово const на уровне класса, мы получим полную поддержку.
Теперь, на мой вопрос, в чем причина того, что команда С# не разработала такую поддержку?
Я бы предположил, что все может быть создано с помощью проверки времени компиляции или через атрибуты без изменения 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-level не должны изменять состояние в своем классе или экземпляры ссылочных типов, переданные им. Кроме того, функции const-уровня могут вызывать только другие функции уровня const в области видимости.
Я не уверен, что лямбды и делегаты сделают все слишком тяжелым (или невозможным), но я уверен, что кто-то, у кого больше опыта в разработке языка и компилятора, мог бы рассказать мне.
Как отметил Стив Б в комментариях, существование readonly
делает вещи немного более сложными, так как const и readonly
близки к тому же во время runtime
, но значения readonly
не могут быть определяется во время компиляции. Я предполагаю, что мы могли бы иметь уровень const
и readonly
, но это может быть слишком запутанным?
Итак, в чем причина не реализации этого? Юзабилити (понимание константы на С++ обычно довольно сложно для новых пользователей), проблемы с языковым дизайном (не могут быть сделаны) или просто приоритетные проблемы (дни неуверенности переполнены)..?