IList <t>与Collection <t>属性</t> </t>

时间:2010-03-15 19:47:43

标签: c# .net generics

我有一个带有内部数组字段的类。我希望将此数组公开为属性,以便它保持原始数组的功能,但不会通过直接暴露数组来违反封装。有哪些方法和优点和缺点?我正在考虑IList<T>Colleciton<T>

4 个答案:

答案 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

请参阅以下详细信息

IList<T> Interface

答案 2 :(得分:2)

执行此操作的正确方法是公开包装数组的ReadOnlyCollection

如果您将阵列作为接口公开,恶意代码可以将其转换回数组并修改背后的值。

答案 3 :(得分:0)

我个人将其公开为IEnumerable<T>并让客户决定哪个最好,因为这样可以让您最自由地更改底层存储。如果您真的想使用IList<T>ICollection<T>,我会因同样的原因选择ICollection<T>