GBa*_*nia 4 c# generics ienumerable covariance contravariance
这篇文章(http://blogs.msdn.com/b/brada/archive/2005/01/18/355755.aspx)说的IEnumerable<T>是Contra-variant.然而,类型T是共变体,因为它是out参数.那么在什么情况下IEnumerable<T>Contra-variant?
希望我不要混淆!谢谢你的答案提前!
IEnumerable不是反变体.这是协变的.
从MSDN (IEnumerable <(Of <(T>)>)接口) 我们得到:
类型参数
出来
要枚举的对象的类型. 此类型参数是协变的.也就是说,您可以使用指定的类型或更多派生的类型.
从这篇文章我们得到:
基类库已更新,以支持各种常用接口中的协方差和逆变.例如,IEnumerable现在是一个协变接口 - IEnumerable.
示例代码:
// Covariant parameters can be used as result types
interface IEnumerator<out T>
{
T Current { get; }
bool MoveNext();
}
// Covariant parameters can be used in covariant result types
interface IEnumerable<out T>
{
IEnumerator<T> GetEnumerator();
}
// Contravariant parameters can be used as argument types
interface IComparer<in T>
{
bool Compare(T x, T y);
}
Run Code Online (Sandbox Code Playgroud)
有关此问题的更多示例,请查看:
C#中的协方差和逆变,第一部分(Eric Lippert关于协方差和反演的大系列文章)
| 归档时间: |
|
| 查看次数: |
2739 次 |
| 最近记录: |