3个问题:
1)为什么输出来自非泛型函数?
2)为什么我也有来实现非泛型函数?
3)如果我想看到泛型函数的输出( int's),我需要做什么?

发布于 2011-11-27 14:38:45
methods.
IEnumerable<T>关键字foreach关键字根本不需要集合来实现IEnumerable;相反,出于兼容性的原因,它将调用任何定义的GetEnumerator foreach实现IEnumerable。如果类有一个普通的GetEnumerator()方法(相对于显式接口实现),编译器将调用它。
说明书上写着:
否则,请确定类型X是否具有适当的方法:
以外的任何内容时,应发出警告。
否则,请检查可枚举接口:
发布于 2011-11-27 14:48:05
1)输出来自非泛型函数,因为它是隐式定义的(而泛型函数是显式定义的)。
2) IEnumerable<T>继承自IEnumerable,因此从IEnumerable<T>继承的任何类型都必须实现IEnumerable的成员
3)使泛型定义和非泛型定义显式化。
public class Class1 : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}注意,您可以从非泛型方法返回泛型枚举数,因为IEnumerator<T>继承自IEnumerator。
发布于 2011-11-27 14:38:36
您需要实现这两种方法,因为IEnumerable<T>是从IEnumerable派生的。要调用显式实现的方法,需要强制转换到该接口。
但是通常您会显式地实现非泛型方法和隐式实现泛型方法。这样,foreach将使用泛型方法。foreach对集合的类型使用GetEnumerator()方法,并且只有当该方法不存在时才返回到接口方法。
典型的实施是:
public IEnumerator<int> GetEnumerator()
{
...
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();//Forward to strongly typed version
}https://stackoverflow.com/questions/8286289
复制相似问题