[英]Can readonly fields be public?
我有一个带有只读字段的类,表示我的对象的状态。 这些字段应该从外面可见。
起初我用这样的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
更安全吗?
没有理由不把它变成财产; CLI通常会在这样一个简单的属性上内联“get”。 当然,这是一个额外的代码行。
严格来说,在场地和财产之间的变化是一个突破性的变化。 除了作为不同的IL操作之外,它还是一种不同的语义,特别是如果涉及结构。
使其成为一个属性可以在以后的变化方面为您提供最大的灵活性; 延迟加载,间接等
重新安全性:实际上,只读字段与只获取属性大致相似。 如果有人关心到想要这样做,那么两者都可以被反思同样滥用。 我的投票仍然是公共财产:)
实际上,它是C#的美妙之处:您可以使用公共字段而不是属性,然后在不重写整个项目的情况下改变主意:
public readonly MyState mystate = new MyState();
以后你可以:
private readonly MyState mystate = new MyState();
public MyState MyState { get { someCheck(); return this.mystate; } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.