繁体   English   中英

只读字段是公开的吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM