Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实现的方法的返回类型接口,Ienumerator_C#_Asp.net_.net_Generics_Collections - Fatal编程技术网

C# 实现的方法的返回类型接口,Ienumerator

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

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

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();