5

我有一个带有指示对象状态的只读字段的类。这些字段应该从外部可见。

起初我用properties这样的方式展示了这些字段:

public class MyClass
{
    private readonly MyState mystate = new MyState();
    public MyState MyState { get { return this.mystate; } }
}

但是因为这样readonly,我的班级的用户不能改变状态的实例。因此,我删除了我的property,将readonly字段设置为public并在 Pascal Case 中重命名它。

到目前为止,我看到的唯一问题是重构,但由于我public property的情况像 my 一样public readonly,我可以将它property无缝地移动到一个中。

吉米可以弄乱我的对象(不修改代码)还是无论如何使用 a 更安全property

4

2 回答 2

4

没有理由不让它成为财产;CLI 通常会在这样一个简单的属性上内联“get”。当然,这是一行额外的代码。

严格来说,字段和属性之间的变化是一个突破性的变化。除了是不同的 IL 操作之外,它也是不同的语义,尤其是在涉及结构的情况下。

将其设为属性可为您在以后的更改方面提供最佳的灵活性;延迟加载,间接等。

重新安全:确实,只读字段与仅获取属性大致相似。如果有人足够关心想要这样做,那么两者都可以同样被反思滥用。我的投票仍然是在公共财产上:)

于 2012-07-21T14:50:00.127 回答
0

实际上,这就是 C# 的美妙之处:您可以使用公共字段而不是属性,然后在不重写整个项目的情况下改变主意:

public readonly MyState mystate = new MyState();

稍后您可以:

private readonly MyState mystate = new MyState();
public MyState MyState { get { someCheck(); return this.mystate; } }
于 2012-07-21T14:52:07.090 回答