его можно заменить другим объектом того же класса.
Вы не можете запретить своему классу устанавливать частные сеттеры.
Я имею в виду, в конце концов, вы автор этого класса, вам нужно беспокоиться только о своих пальцах.
public class SomeOtherNonRelatedClass
{
public void Update(State aDifferentStateObject)
{
// the world is as it should be
aDifferentStateObject.StateVar1 = "bang!!!" // compiler error
}
}
Если вы хотите помешать себе изменить свою собственнуючлен, затем используйте метод расширения
public class Extensions
{
public void Update(this State aDifferentStateObject)
{
// the world is as it should be
aDifferentStateObject.StateVar1 = "bang!!!" // compiler error
}
}
или сделайте его действительно доступным только для чтения (хотя это, вероятно, бесполезно)
public string StateVar1 { get; }
или вспомогательное поле, так что вы можете установить его внутренне
private string backingField;
public string StateVar1
{
get => backingField;
}