只读字段是公开的吗?

时间:2012-07-21 14:44:27

标签: c# properties

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

首先,我使用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像我的public readonly一样处于驼峰状态,我可以无缝地将其移动到property

可以Jimmy弄乱我的对象(不修改代码),还是使用property更安全?

2 个答案:

答案 0 :(得分:4)

没有理由不把它变成财产; CLI通常会内联一个" get"在这样一个简单的财产。当然,这是一行额外的代码。

严格地说,在场地和财产之间的转换是一个突破性的变化。除了作为不同的IL操作之外,它还是一种不同的语义,特别是如果涉及结构。

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

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

答案 1 :(得分:0)

实际上,它是C#的美妙之处:你可以使用公共字段而不是属性,后来改变主意而不重写整个项目:

public readonly MyState mystate = new MyState();

以后你可以例如:

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