Я пытаюсь создать неизменную структуру.Проблема в том, что он содержит изменяемые объекты внутри.Можно ли сделать их неизменными (без изменения их класса)?Например (https://dotnetfiddle.net/KTiTzB):
public class IntHolder
{
public int X
{
get;
set;
}
}
public struct ImmutableStruct
{
public int ImmutableInt
{
get;
private set;
}
public IntHolder MyIntHolder
{
get;
private set;
}
public ImmutableStruct(int immutableInt, IntHolder myIntHolder): this ()
{
ImmutableInt = immutableInt;
MyIntHolder = myIntHolder;
}
}
public class Program
{
public static void Main()
{
Console.WriteLine("Immutability");
IntHolder intHolder = new IntHolder();
intHolder.X = 40;
Console.WriteLine(intHolder.X == 40); // TRUE
ImmutableStruct immStruct = new ImmutableStruct(10, intHolder);
Console.WriteLine(immStruct.ImmutableInt == 10); // TRUE
// immStruct.ImmutableInt = 4; // THIS DOESN'T WORK, AS EXPECTED. Hurray!
// immStruct.MyIntHolder = new IntHolder(3); // ALSO DOESN'T WORK, GOOD!
immStruct.MyIntHolder.X = 4; // how can I prevent this from working?
}
}
Есть ли способ сделать член IntHolder неизменным, оставив класс IntHolder неизменным?