为什么List<T>声明GetEnumerator()和IEnumerable<T>.GetEnumerator()?
c#
为什么List定义了这三个方法?
public Enumerator GetEnumerator()
=> new Enumerator(this);
IEnumerator<T> IEnumerable<T>.GetEnumerator()
=> new Enumerator(this);
IEnumerator IEnumerable.GetEnumerator()
=> new Enumerator(this);
他们都在做同样的事情。仅仅拥有这个还不够:
public Enumerator GetEnumerator()
=> new Enumerator(this);
回答
仅仅拥有这个还不够:
public Enumerator GetEnumerator() => new Enumerator(this);public Enumerator GetEnumerator() => new Enumerator(this);
不,它不会,因为它不会实现IEnumerable<T>or IEnumerable,其中GetEnumerator()方法的返回类型为IEnumerator<T>和IEnumerator分别。
返回类型必须匹配才能实现接口。
事实上,自己测试这个很容易:
这给出了以下错误:
- 错误 CS0738:“MyList<T>”未实现接口成员“IEnumerable<T>.GetEnumerator()”。'MyList<T>.GetEnumerator()' 不能实现 'IEnumerable<T>.GetEnumerator()',因为它没有匹配的返回类型 'IEnumerator<T>'。
- 错误 CS0738:“MyList<T>”未实现接口成员“IEnumerable.GetEnumerator()”。'MyList<T>.GetEnumerator()' 不能实现 'IEnumerable.GetEnumerator()',因为它没有匹配的 'IEnumerator' 返回类型。
THE END
二维码