簡體   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