gpt4 book ai didi

c# - Collection 类及其用途

转载 作者:IT王子 更新时间:2023-10-29 04:21:40 25 4
gpt4 key购买 nike

我遇到了以下代码:

var collection = new Collection<string>();

我没有看到Collection类使用太多,也找不到太多关于它的用途的信息。查看 .NET Framework 源代码,它几乎只是一个 List 的包装器,因为它存储了一个 List 成员字段。其构造函数如下:

public Collection()
{
this.items = (IList<T>) new List<T>();
}

而且它还实现了 IList。因此,您可以将集合声明为:

IList<string> collection = new Collection<string>();

对我来说,这在功能上等同于创建一个列表:

IList<string> collection = new List<string>();

那么您什么时候想在您自己的代码中对列表使用它?我看到它是其他 .NET 集合的基类,但为什么它们将其包含为公共(public)具体(而不是内部和/或抽象)?


关于可能重复项的评论 -- 相关问题的答案似乎是说 Collection 类应该用作基类。我真正要问的不同之处在于:

  1. 如果在您自己的代码中使用,为什么不使用 List 作为基类呢?
  2. 在中实例化一个新集合真的有意义吗您自己的代码代替 List?
  3. 如果它确实提供作为基类,为什么它不是抽象的

最佳答案

我认为 MSDN documentation本身已经列出了最重要的方面(由我强调):

The Collection class provides protected methods that can be used to customize its behavior when adding and removing items, clearing the collection, or setting the value of an existing item.

Notes to Implementers

This base class is provided to make it easier for implementers to create a custom collection. Implementers are encouraged to extend this base class instead of creating their own.

[编辑你更新的问题]

1. If using in your own code, why not use List as a base class instead?

Collection<T>提供了一些 protected 方法,因此您可以轻松地 override行为并完全注册您自己的业务逻辑,例如:

  • ClearItems()
  • InsertItem()
  • RemoveItem()
  • SetItem()

List<T>不提供它们并且几乎没有 protected 方法来覆盖行为,这使得自定义它变得更加困难。

2. Does it really ever make sense to initialize a new Collection in your own code in place of List?

不,不只是为了初始化一些集合。如果您需要作为实现您自己的逻辑的基类,请使用它

这将取决于您自己的业务需求。对于日常开发工作中的几乎所有情况,现有的和众多的集合应该已经提供了您所需要的。有类型安全和无类型集合、线程安全集合以及您能想到的任何其他内容。

仍然,有一天可能需要实现一个集合类型,该集合类型在允许添加/更新/删除其中的任何项目之前进行某些验证检查,或者处理移动到仅稀疏填充列表中的下一个项目一种特殊的方式。您永远不知道客户可能有什么想法。

在这种情况下,创建您自己的集合类型可能会有所帮助。

关于c# - Collection<T> 类及其用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12069987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com