Я не думаю, что есть какой-то встроенный способ. C #, похоже, не имеет такой же поддержки const-правильности, как C ++. Вы можете сделать внутренних членов только для чтения, и это будет началом. Но это еще не все.
Вы бы сделали все функции-члены ваших функций класса не мутаторами, и сделали бы свойства всех элементов данных с приватными установщиками. При реализации методов получения для свойств скопируйте все классы, которые возвращаются, и возвращайте новый экземпляр, а не возвращайте ссылку на закрытый член.
class SomeClass
{
public void SomeFunctionThatDoesNotModifyState()
{
}
public int SomeProperty
{
get
{
return someMember; // This is by-value, so no worries
}
}
public SomeOtherClass SomeOtherProperty
{
get
{
return new SomeOtherClass(someOtherMember);
}
}
}
класс SomeOtherClass
{
// ....
}
Вы должны быть очень осторожны, чтобы реализация SomeOtherClass делала глубокое копирование при вызове конструктора копирования.
Даже после всего этого вы не можете на 100% гарантировать, что кто-то не изменит ваш объект, потому что пользователь может взломать любой объект с помощью отражений.