C# 实现的方法的返回类型接口,Ienumerator
GetEnumerator返回类型是接口本身,即Ienumerable,不知道当接口可以是方法的返回类型时它意味着什么;特别是当其在该接口中定义时C# 实现的方法的返回类型接口,Ienumerator,c#,asp.net,.net,generics,collections,C#,Asp.net,.net,Generics,Collections,GetEnumerator返回类型是接口本身,即Ienumerable,不知道当接口可以是方法的返回类型时它意味着什么;特别是当其在该接口中定义时 Ienumerator enum = arrayList.GetEnumerator(); 如果我没听错的话。ArrayList不实现IEnumerator,而是IEnumerable public class ArrayList : IList, ICollection, IEnumerable, ICloneable 数不清 public
Ienumerator enum = arrayList.GetEnumerator();
如果我没听错的话。ArrayList不实现IEnumerator,而是IEnumerable
public class ArrayList : IList, ICollection, IEnumerable, ICloneable
数不清
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
编辑:
IEnumerator有一个简单的职责
支持对非泛型集合进行简单迭代
ArrayList的责任不同
使用大小为的数组实现IList接口
根据需要动态增加
这可能是维护SRP所必需的
ArrayList的GetEnumerator()实现可能返回IEnumerable的实现,IEnumerable知道ArrayList的实现细节。但是具体类型对IEnumerator接口后面的客户机是隐藏的。这意味着返回的内容必须实现IEnumerator或任何接口。谢谢ben,你肯定比我知道得早,只是想知道我没有看到IEnumerator在代码中实现,这是否意味着GetEnumerator正在返回一个实现了IEnumerator的类。是的,这是正确的。难以置信,最后一个疑问是,GetEnumerator可能实现了更多的接口和方法,所以它返回的类必须大于IEnumerator中定义的签名,或者这是否意味着它的编写方式类似于公共静态IEnumerator GetEnumerator(),因此如果不是,GetEnumerator返回的额外方法不能用作IEnumerator中定义的签名,那么可以将IEnumerator中定义的签名用作枚举的子操作。这是正确的,但是IEnumerator实现IEnumerable,方法的返回类型是否可以是接口,可能IEnumerable::GetEnumerator()只是实例化实现IEnumerator的具体类型并返回它。它就像一个工厂。
Ienumerator enum = arrayList.GetEnumerator();