爲什麼我可以實現一個只讀屬性,像這樣......屬性爲只讀但成員訪問
public IList<object> SelectedItems { get; }
...並仍然能夠使用它的成員,如添加,刪除等。當我使用該物業?
是不是隻能讀取「一路下來」?
爲什麼我可以實現一個只讀屬性,像這樣......屬性爲只讀但成員訪問
public IList<object> SelectedItems { get; }
...並仍然能夠使用它的成員,如添加,刪除等。當我使用該物業?
是不是隻能讀取「一路下來」?
是不是隻能讀取「一路下來」?
這不是一個 「只讀」 型。這是一個屬性,您可以檢索該值(IList<object>
),但不能將該值設置爲不同的實例的IList<object>
,因爲沒有屬性設置器。
不是。它不是「只讀」,而是屬性只有一個getter意味着你可以獲得價值,但你可以隨心所欲地做任何事情。
請注意,我會小心使用「只讀」一詞。 C#具有不同的含義和專用readonly
關鍵字,僅適用於字段。這不是C#意義上的「只讀」,而是僅提供get操作的屬性。
如果你想有一個「只讀」列表,一個好的選擇是返回ReadOnlyCollection<T>
。例如,如果你的內部類是List<T>
,你可以使用:
public IList<object> SelectedItems { get { return this.selected.AsReadOnly(); } }
如果你要做到這一點,它可能是更好的實際回報ReadOnlyCollection<T>
還有:
public ReadOnlyCollection<object> SelectedItems { get { return this.selected.AsReadOnly(); } }
這方式,用戶將不會期望,因此在結果列表上調用.Add()
是安全的。
您可能希望在這裏返回一個'ReadOnlyCollection',以便當用戶的代碼在突變方法上拋出異常時不會混淆用戶。 – Servy
我可能無法事先設定實際的SelectedItems,但我仍然可以說SelectedItems.Add(obj);.我的意思是,這看起來不是很簡單,因爲我添加了一些... – danielovich
@danielovich這就是爲什麼我建議'ReadOnlyCollection
不,只讀不是「一路下來」 –