我有一个带有只读字段的类,表示我的对象的状态。这些字段应该从外面可见。
首先,我使用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
更安全?
答案 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; } }