gpt4 book ai didi

c# - .NET Framework 内置接口(interface),构建自定义数据结构时的建议?

转载 作者:行者123 更新时间:2023-11-30 15:49:17 24 4
gpt4 key购买 nike

我正在使用 C# .NET 2.0(可能移动到 3.5)实现一个 AVL 二叉树数据结构。我已经达到了通过我的初始单元测试而无需实现任何框架级接口(interface)的地步。

但是现在,只要查看 FCL,我就会看到一大堆接口(interface),包括非通用接口(interface)和通用接口(interface),我可以实现这些接口(interface)以确保我的类能够很好地处理语言特性和其他数据结构。

目前唯一明显的选择(至少对我而言)是枚举样式接口(interface)之一,允许调用者在 foreach 循环中使用树,并可能在稍后使用 Linq。但是哪一个(或更多)?

以下是我目前正在考虑的接口(interface):

  • IEnumerable 和 IEnumerable <T>
  • IEnumerator 和 IEnumerator <T>
  • IComparable 和 IComparable <T>
  • IComparer 和 IComparer <T>
  • ICollection 和 ICollection <T>
  • IEquatable 和 IEquatable <T>
  • IEqualityComparer 和 IEqualityComparer <T>
  • 可克隆
  • 可转换

是否有任何已发布的指南(在线或书籍形式)提供关于实现哪些框架接口(interface)以及何时实现的建议?

显然对于一些接口(interface),如果你不想提供那个功能,就不要实现整个接口(interface)。但是 FCL 类(例如 Collection 类)中似乎有某些约定,我们在构建自定义数据结构时或许也应该遵循这些约定。

理想情况下,这些建议会就何时使用 IComparer 或 IEqualityComparer、IEnumerable 或 IEnumerator 等问题提供指导?或者,如果你实现了一个通用接口(interface),你是否也应该实现非通用接口(interface)?等等。

或者,如果您根据自己的经验提供指导,那同样有用。

最佳答案

您应该知道,其中一些接口(interface)相互继承(ICollection<T>IEnumberable<T>),接口(interface)的通用版本通常需要实现其非通用版本。 IEnumeratorIEnumerable已连接(IEnumerable 传统上会创建一个 IEnumerator 来进行枚举)

实现 IComparable<T>在一个充满危险的集合中(你在比较集合中的成员吗?),并且IComparer<T>是排序方法的辅助接口(interface)。

ICloneable有点过时了 - 但它意味着能够创建一个深拷贝(同样,这对集合来说充满了危险。

我会反对你的

Obviously for some interfaces, if you don't want to provide that functionality, just don't implement them.

如果你实现了一个接口(interface),你应该实现它的所有成员。 (参见 Liskov 替换原则)

实现 IConvertible对于一个集合也似乎很奇怪 - 你可能更愿意实现 ISerializable .

接口(interface)的 MSDN 文档有点简洁,但您始终可以通过谷歌搜索它们以了解它们是如何工作的。

关于c# - .NET Framework 内置接口(interface),构建自定义数据结构时的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1796903/

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