2 回答

TA貢獻1860條經(jīng)驗 獲得超9個贊
首先,IEnumerable<T>實現(xiàn)了IEnumerable,并且顯式實現(xiàn)了IEnumerable.GetEnumerator,MSDN中所說的繼承自IEnuerable的那個GetEnumerator,指的就是這個顯式實現(xiàn)。
其次,在設(shè)計實現(xiàn)了IEnumerable<T>的類的時候,除了要實現(xiàn)IEnumerable<T>.GetEnumerator之外,還要顯式實現(xiàn)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得到的是弱類型的。之所以這么設(shè)計,是為了向后兼容,因為很多舊的系統(tǒng)使用的都是IEnumerable,新的代碼需要兼容這些接口。

TA貢獻1799條經(jīng)驗 獲得超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 關(guān)注
- 747 瀏覽
添加回答
舉報