在 C# 中实现我自己的泛型集合
Implementing my own generic collection in C#
我正在尝试用 C# 编写自己的通用集合 (List<T>
),但对接口感到困惑。据我所知,为了创建我自己的集合,我需要实现几个接口,如 ICollection、IList、IEnumerator、IEnumerable 等。但我真的不明白我需要哪些。
提前致谢
您必须实施 IList<T>
才能通过索引访问 collection 的项目。 IList<T>
继承自 ICollection<T>
、IEnumerable<T>
和 IEnumerable
,因此您仍然可以得到它们。
对于无法通过索引访问项目的更基本的 collection,您可以实现 ICollection<T>
,它通过继承附带 IEnumerable<T>
和 IEnumerable
。
您 可以 额外实施 IReadOnlyList<T>
(或分别 IReadOnlyCollection<T>
),但这通常不是必需的。
您还应该考虑从 System.Collections.ObjectModel.Collection<T>
继承,这是推荐的方法,因为通常的样板接口实现已经为您完成,您可以专注于使您的 collection 特别.
你的 collection 是干什么用的?如果您实现 IEnumerable<T>
(这需要实现 IEnumerable
,那么您将拥有一个可枚举的 object。如果您还拥有一个 Add()
方法,那么您将拥有一个可枚举的object 与 collection 初始化一起工作。除此之外,查看常见的 collection 接口并询问它们是否对您的用例有用,特别是 ICollection<T>
(在特别)和 IList<T>
(特别是索引)。
我正在尝试用 C# 编写自己的通用集合 (List<T>
),但对接口感到困惑。据我所知,为了创建我自己的集合,我需要实现几个接口,如 ICollection、IList、IEnumerator、IEnumerable 等。但我真的不明白我需要哪些。
提前致谢
您必须实施 IList<T>
才能通过索引访问 collection 的项目。 IList<T>
继承自 ICollection<T>
、IEnumerable<T>
和 IEnumerable
,因此您仍然可以得到它们。
对于无法通过索引访问项目的更基本的 collection,您可以实现 ICollection<T>
,它通过继承附带 IEnumerable<T>
和 IEnumerable
。
您 可以 额外实施 IReadOnlyList<T>
(或分别 IReadOnlyCollection<T>
),但这通常不是必需的。
您还应该考虑从 System.Collections.ObjectModel.Collection<T>
继承,这是推荐的方法,因为通常的样板接口实现已经为您完成,您可以专注于使您的 collection 特别.
你的 collection 是干什么用的?如果您实现 IEnumerable<T>
(这需要实现 IEnumerable
,那么您将拥有一个可枚举的 object。如果您还拥有一个 Add()
方法,那么您将拥有一个可枚举的object 与 collection 初始化一起工作。除此之外,查看常见的 collection 接口并询问它们是否对您的用例有用,特别是 ICollection<T>
(在特别)和 IList<T>
(特别是索引)。