类的特定实例可以是不可变的吗?

时间:2017-10-27 18:54:37

标签: c# class immutability readonly mutable

我想看看是否可以使类的实例不可变,即使类本身不是。我在这里有一个与IntPtr.Zero和其他静态字段类似的情况,除了它是一个可变类而不是结构。

class TestClass
{
    public static readonly TestClass GoldStandard = new TestClass();
    public int field = 0;
}

class Program
{
    static void Main(string[] args)
    {
        TestClass test = TestClass.GoldStandard;

        test.field = 1; // I want to keep this from happening.

        Console.WriteLine(TestClass.GoldStandard.field);
    }
}

如何防止GoldStandard被修改?

编辑:我很遗憾我的问题被如此严重地误解了。这显然不是Immutable type and property in C#How do I create an immutable Class?的重复。这些问题是关于如何创建不可变类,而不是如何创建可变类的不可变实例。

对于Is there an easy way to make an immutable version of a class?,它听起来与我的问题非常相似。但是,有一些重要的原因它不应该被计算在内。

  1. 这个问题询问如何在实例的生命周期中的某个时刻使实例成为不可变的,而不是让一个可变类的实例从一开始就是不可变的。
  2. 问题是如何生成不可变的第二类来模仿可变类,而不是让一个可变类在特定情况下作为不可变类。
  3. 这个问题的答案根本不能解决我的问题,主要是关于一般不可变类的工作方式。
  4. 我了解主持人在扫描重复内容时,不能花太多时间深入了解问题,但我认为将我的问题作为副本关闭是不公平的因为这种肤浅的相似之处。

0 个答案:

没有答案