我有一个带有内部数组字段的类。我希望将此数组公开为属性,以便它保持原始数组的功能,但不会通过直接暴露数组来违反封装。有哪些方法和优点和缺点?我正在考虑IList<T>
或Colleciton<T>
答案 0 :(得分:2)
IList是一个ICollection:
public interface IList<T> : ICollection<T>,
IEnumerable<T>, IEnumerable
您可以实现ICollection,如果您将来需要更多来自IList的方法,您可以更改它而不会对客户造成伤害。
答案 1 :(得分:2)
IList<T>
更好,因为它是ICollection通用接口的后代,并且是所有通用列表的基本接口。与你一起也有从以下接口获得功能的优势
IEnumerable<T> and IEnumerable
这是签名:
public interface IList<T> : ICollection<T>,
IEnumerable<T>, IEnumerable
请参阅以下详细信息
答案 2 :(得分:2)
执行此操作的正确方法是公开包装数组的ReadOnlyCollection
。
如果您将阵列作为接口公开,恶意代码可以将其转换回数组并修改背后的值。
答案 3 :(得分:0)
我个人将其公开为IEnumerable<T>
并让客户决定哪个最好,因为这样可以让您最自由地更改底层存储。如果您真的想使用IList<T>
或ICollection<T>
,我会因同样的原因选择ICollection<T>
。