Константная функция в C#
Например, на С++ можно написать так:
Какой должен быть аналог этому в C# ? Поиск по интернетам успехом не увенчался. Кое-где пишут, что аналогов нет.
Кстати, зачем вам это потребовалось?
Кстати, зачем вам это потребовалось?
Очень жаль, что нет. Понадобилось по той же причине, по которой это используется в С++: защита от случайного вызова модифицирующих this операций.
Вообще, многие гайдланы по C# предлагают отказаться от мутабельного состояния: атрибут полей readonly - наше все :)
Я про мутабельность ни слова не сказал. Причем тут это? У меня не стоит задачи модифицировать что-то в "константной" функции, хочется как раз наоборот - обеспечить контроль в отсутствии изменений.
При том, что при условии иммутабельности экземпляра не нужны "константные" функции - все методы будут таковыми что называется по-построению.
И как по-Вашему мнению следует обеспечить это условие? Через readonly? Но мне не нужен глобально неизменяемый объект, хочется иметь такое качество локально.
Но, по-моему, мы всё-таки уходим от темы. Я так понял, что аналога приведенному в первом сообщении коду на С# просто не существует, и нет какого-то конкретного подхода для обеспечения подобной функциональности. Или я не прав?
Аналога нет, но в подавляющем большинстве случаев он не особенно нужен.
Обычные константы тоже в подавляющем большинстве случаев можно не использовать, а заменить их переменными.
Мне просто не понятно, почему MS не удосужилась добавить такую функциональность в C#.
P.S. А кстати, не в курсе, в C++/CLI такое есть?
Для начала нужно разобраться с тем, что понимать под константой и переменной. ;) Есть в .NET языки в которых переменные (связывания) неизменяемые.
В C# требуется меньше внимания при работе с памятью и, следовательно, "состоянием".
Не проверял, но скорее всего есть (хотя я не уверен, для полноценной реализации const-определений требуется поддержка во ВСЕХ языках .NET).
Я под константой понимаю нечто инициализированное однажды и более не изменяемое до момента уничтожения.
С памятью - согласен, из-за наличие сборщика мусора, но только вот за поддержкой согласованного состояния объекта программисту приходится следить практически так же как и в С++.