如何防止对只读对象的引用修改只读对象?

时间:2011-12-25 21:25:15

标签: c# readonly

我希望能够为我的一个类提供“默认”值或状态。我们将该类称为Foo,它看起来像这样:

class Foo
{
    public static readonly Default = new Foo() { Bar = 42 };
    public int Bar { get; set; }
}

这说明我希望Foo实例的默认值将其成员Bar设置为42.当我对{{{{}}的引用进行更改时会出现问题1}}。

Foo.Default

我该如何避免这种行为?

2 个答案:

答案 0 :(得分:1)

Foo永久不变。

public class Foo
{
    public static readonly Foo Default = new Foo(42);

    public Foo(int bar)
    {
        Bar = bar;
    }

    public int Bar { get; private set; }
}

在大多数情况下,暴露字段被认为是不好的做法,因为它破坏了封装。

答案 1 :(得分:0)

为此,我建议:

public static Foo Default { get { return new Foo (){ Bar = 42 }; }}

如果任何acce更改默认值,则其他acce可以使用Default值(但不能引用!)