在 C# 中定義一個真正只讀的 List

C# 中的 readonly 關鍵字表示類中的字段只容許在定義時候或者構造方法中初始化。普通類型的數據徹底能夠達到預期的效果,可是在對象或者列表中,要想達到只讀的效果,只用一個 readonly 關鍵字是不能夠的。當你把一個 List 用 readonly 修飾,在其餘類中仍然能夠使用 Add,Remove 方法來改變它。可是可能你想要的只讀屬性是:只有在當前類中修改這個列表的 item,纔不想被其餘類作任何修改!

下面這個示例就是用 readonly 關鍵字修飾的一個 List,它的內容項目仍然能夠在其餘類中添加或刪除:
對象


就算封裝成只讀屬性,仍然能夠在其餘類中操做:
blog


不過你能夠將屬性的類型改成 IEnumerable<T> ,這樣就能夠達到想要的效果。由於 IEnumerable<T> 類沒有 Add, Remove 方法,List<T> 類繼承 IEnumerable<T> 類,在 List<T> 類中新增的 Add, Remove 等方法:
繼承


若是你想建立一個徹底只讀的屬性,就算在當前類中都不能夠修改它的 item,你能夠使用 ReadOnlyCollection<T> :
it


在 .NET 4.5 中,List<T> 繼承了 IReadOnlyList<T> 和 IReadOnlyCollection<T>,給了咱們一種更簡單的寫法,一樣能夠達到上述效果:io

相關文章
相關標籤/搜索