【问题标题】:Implement IEnumerator/IEnumerable into a custom Queue class vs. using a Queue将 IEnumerator/IEnumerable 实现到自定义队列类与使用队列
【发布时间】:2021-01-06 22:58:59
【问题描述】:

这里是 OOP 初学者。 我只需要做一个练习,我必须在 C# 中创建一个自定义类,并且在作业 TODO 中需要实现 IENumerable 和 IENumerator 接口,并为我的自定义类类型对象创建一个自定义队列。

虽然我没有解决问题,但我仍然不明白它的用法。与其编写这么多代码来实现自定义队列,不如简单地使用 C# 框架中已经存在的“队列”?这有什么性能/优化优势吗?

那么,使用 MyCustomObjectQueue 而不是使用 Queue 有什么好处吗?

【问题讨论】:

  • 你正在学习概念,这不是你在正常情况下在现实世界中会做的事情。
  • 离开高中后,你认为你在现实世界中实际申请的比例是多少?
  • @CaiusJard 10% 可能吗?但我明白你的意思:D
  • 顺便说一句,预期 a) 您的代码在其解决的非常狭窄和直接的问题上表现优于标准实现,或者 b) 由于 Microsoft 雇佣了一个非常聪明的胡子来写他们的,它会带来一些你不知道的巧妙技巧。看看谁在表演比赛中获胜的唯一方法是用你关心的任何指标来替补他们。这个问题可能更多地属于 SE.SE 而不是 SO
  • 当您实现 IEnumerable(也可能是 IEnumerable)时,您是使用 yield return 还是实际实现了接口并创建了一个实现 IEnumerator (/) 的类?你应该换一种方式尝试,然后想想yield return 是如何在幕后工作的

标签: c# interface queue ienumerable implementation


【解决方案1】:

正如 cmets 中所述,这是一个让您熟悉概念的练习。在现实世界中,您几乎总是使用现有的队列实现。

但练习并非毫无意义。知道如何实现 IEnumerable 非常有价值。 IEnumerator 稍微少一点,因为您可以使用iterator block 让编译器为您完成。

框架中的集合是为通用用途而设计的,如果您有一些特殊的使用模式,有时制作自己的变体可能很有用,但这种情况很少见。

根据我的经验,实现集合的最常见情况是包装现有集合以添加一些额外的功能,或者实现未提供的集合,例如环形缓冲区或堆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多