2010-09-26 6 views
34

В C++, вы можете определить постоянный метод следующим образом:методы Const в C#

int func_that_does_not_modify_this(int arg) const {} 

Размещение const в конце функции предотвращает случайное изменение любого из внутренних свойств, и позволяет вызывающему знать что эта функция не будет изменять объект.

Есть ли такая концепция в C#?

ответ

42

Нет, в C# ничего подобного нет. Об этом много говорили, но сложно сделать работу const таким образом, чтобы ее можно было проверять во время компиляции, ее нельзя отбрасывать, как это может быть на C++, и по-прежнему достаточно легко использовать без все чтобы получить его совершенно правильно, когда они разрабатывают свои собственные классы.

Конечно, если вы создаете свои собственные типы для неизменяемости (например, string), то все методы экземпляра на нем эффективны как const. Это не всегда практично, но это важный метод использования, где это необходимо.

8

Нет. В C# ничего подобного нет.

No const & либо.

Как указывает Джон, вы, очевидно, можете реализовать метод const, но нет способа выйти за рамки документации, чтобы вызывающий мог знать, что метод const.

11

Code Contract должен предоставить такую ​​функцию в будущем. В настоящее время вы можете отметить метод как [Pure], что означает, что он не имеет побочных эффектов (т. Е. Не изменяет ни одного из членов класса). К сожалению, текущая версия инструментов не применяет это правило, поэтому использование этого атрибута предназначено только для целей документации. Я уверен, что в будущей версии он будет применяться с помощью статического анализа (т. Е. Во время компиляции) или, по крайней мере, это то, о чем говорит документация.

Связанные вопросы: Pure functions in C#

+0

Это было бы хорошо :) – mpen