Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Константная функция в C#

376
21 марта 2011 года
Absolut
220 / / 22.11.2002
Возможно ли реализовать в C# константную функцию, и если да, то как?
Например, на С++ можно написать так:
 
Код:
void ClassName::Function() const

Какой должен быть аналог этому в C# ? Поиск по интернетам успехом не увенчался. Кое-где пишут, что аналогов нет.
5
21 марта 2011 года
hardcase
4.5K / / 09.08.2005
В C# нет const-объявлений аля-C++.
Кстати, зачем вам это потребовалось?
376
21 марта 2011 года
Absolut
220 / / 22.11.2002
Цитата: hardcase
В C# нет const-объявлений аля-C++.
Кстати, зачем вам это потребовалось?


Очень жаль, что нет. Понадобилось по той же причине, по которой это используется в С++: защита от случайного вызова модифицирующих this операций.

5
21 марта 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Absolut
Очень жаль, что нет. Понадобилось по той же причине, по которой это используется в С++: защита от случайного вызова модифицирующих this операций.


Вообще, многие гайдланы по C# предлагают отказаться от мутабельного состояния: атрибут полей readonly - наше все :)

376
21 марта 2011 года
Absolut
220 / / 22.11.2002
Цитата: hardcase
Вообще, многие гайдланы по C# предлагают отказаться от мутабельного состояния: атрибут полей readonly - наше все :)


Я про мутабельность ни слова не сказал. Причем тут это? У меня не стоит задачи модифицировать что-то в "константной" функции, хочется как раз наоборот - обеспечить контроль в отсутствии изменений.

5
22 марта 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Absolut
Я про мутабельность ни слова не сказал. Причем тут это?

При том, что при условии иммутабельности экземпляра не нужны "константные" функции - все методы будут таковыми что называется по-построению.

376
22 марта 2011 года
Absolut
220 / / 22.11.2002
Цитата: hardcase
При том, что при условии иммутабельности экземпляра не нужны "константные" функции - все методы будут таковыми что называется по-построению.


И как по-Вашему мнению следует обеспечить это условие? Через readonly? Но мне не нужен глобально неизменяемый объект, хочется иметь такое качество локально.
Но, по-моему, мы всё-таки уходим от темы. Я так понял, что аналога приведенному в первом сообщении коду на С# просто не существует, и нет какого-то конкретного подхода для обеспечения подобной функциональности. Или я не прав?

5
22 марта 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Absolut
Я так понял, что аналога приведенному в первом сообщении коду на С# просто не существует, и нет какого-то конкретного подхода для обеспечения подобной функциональности. Или я не прав?

Аналога нет, но в подавляющем большинстве случаев он не особенно нужен.

376
22 марта 2011 года
Absolut
220 / / 22.11.2002
Цитата: hardcase
Аналога нет, но в подавляющем большинстве случаев он не особенно нужен.


Обычные константы тоже в подавляющем большинстве случаев можно не использовать, а заменить их переменными.
Мне просто не понятно, почему MS не удосужилась добавить такую функциональность в C#.
P.S. А кстати, не в курсе, в C++/CLI такое есть?

5
22 марта 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Absolut
Обычные константы тоже в подавляющем большинстве случаев можно не использовать, а заменить их переменными.

Для начала нужно разобраться с тем, что понимать под константой и переменной. ;) Есть в .NET языки в которых переменные (связывания) неизменяемые.

Цитата: Absolut
Мне просто не понятно, почему MS не удосужилась добавить такую функциональность в C#.


В C# требуется меньше внимания при работе с памятью и, следовательно, "состоянием".

Цитата: Absolut
P.S. А кстати, не в курсе, в C++/CLI такое есть?

Не проверял, но скорее всего есть (хотя я не уверен, для полноценной реализации const-определений требуется поддержка во ВСЕХ языках .NET).

376
22 марта 2011 года
Absolut
220 / / 22.11.2002
Цитата: hardcase
Для начала нужно разобраться с тем, что понимать под константой и переменной. ;)


Я под константой понимаю нечто инициализированное однажды и более не изменяемое до момента уничтожения.

Цитата: hardcase
В C# требуется меньше внимания при работе с памятью и, следовательно, "состоянием".


С памятью - согласен, из-за наличие сборщика мусора, но только вот за поддержкой согласованного состояния объекта программисту приходится следить практически так же как и в С++.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог