2 回答
TA贡献1860条经验 获得超9个赞
首先,IEnumerable<T>实现了IEnumerable,并且显式实现了IEnumerable.GetEnumerator,MSDN中所说的继承自IEnuerable的那个GetEnumerator,指的就是这个显式实现。
其次,在设计实现了IEnumerable<T>的类的时候,除了要实现IEnumerable<T>.GetEnumerator之外,还要显式实现IEnuerable.GetEnumerator。也就是书上所说的那些。
举例:
public class People : IEnumerable
{
private Person[] _people;
public People(Person[] pArray)
{
_people = new Person[pArray.Length];
for (int i = 0; i < pArray.Length; i++)
{
_people[i] = pArray[i];
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator) GetEnumerator();
}
public PeopleEnum GetEnumerator()
{
return new PeopleEnum(_people);
}
}
返回类型为PeopleEnum的GetEnumerator得到的是强类型的IEnumerator,而IEnumerable.GetEnumerator得到的是弱类型的。之所以这么设计,是为了向后兼容,因为很多旧的系统使用的都是IEnumerable,新的代码需要兼容这些接口。
TA贡献1799条经验 获得超8个赞
namespace is : System.Collections
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
namespace is :System.Collections.Generic
public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
下面这个是上面的范型
- 2 回答
- 0 关注
- 710 浏览
添加回答
举报