【问题标题】:Return type interface for the method implemented, Ienumerator实现的方法的返回类型接口,Ienumerator
【发布时间】:2016-01-09 08:43:47
【问题描述】:

GetEnumerator 返回类型是接口本身,即 Ienumerable,想知道什么时候接口可以是方法的返回类型;特别是当它在该接口中定义时。

Ienumerator enum = arrayList.GetEnumerator();

【问题讨论】:

  • 表示返回的必须实现IEnumerator或者什么接口。
  • 谢谢本,你肯定比我知道的多,只是想知道我没有看到 IEnumerator 在代码中实现,这是否意味着 GetEnumerator 正在返回一个已实现 IEnumerator 的类。
  • 是的,没错。
  • 太棒了,最后一个疑问,GetEnumerator 有可能实现了更多的接口和方法,所以它返回的必须是一个大于 IEnumerator 中定义的签名的类,或者这是否意味着它的写法公共静态 IEnumerator GetEnumerator() 那里
  • 如果没有,GetEnumerator 会返回哪些额外的方法,不能使用,因为 Ienumerator 中定义的签名可以作为子操作在枚举上使用。

标签: c# asp.net .net generics collections


【解决方案1】:

如果我理解正确的话。 ArrayList 没有实现 IEnumerator,而是 IEnumerable

public class ArrayList : IList, ICollection, IEnumerable, ICloneable 

IEnumerable

public interface IEnumerable
{
    IEnumerator GetEnumerator();
}

编辑:

IEnumerator 有一个简单的职责。

支持对非泛型集合的简单迭代。

ArrayList 的职责不同

使用大小为的数组实现 IList 接口 根据需要动态增加。

这可能是维护 SRP 所必需的。

ArrayList 的 GetEnumerator() 实现可能会返回 IEnumerable 的实现,它知道 ArrayList 的实现细节。但具体类型在 IEnumerator 接口后面对客户端隐藏。

【讨论】:

  • 没错,但是IEnumerator实现了IEnumerable,方法的返回类型可以是接口吗,
  • 可能 IEnumerable::GetEnumerator() 只是实例化实现 IEnumerator 的具体类型并返回它。这就像一个工厂。
猜你喜欢
  • 2011-05-16
  • 2011-06-22
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多