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