讨化一下:泛型接口为逆变

微创社(MCC) 2009-08-30 09:24:23
如果泛型接口为逆变的,
即仅使用其类型参数作为返回值,
则此泛型接口可以从非泛型接口继承。

在 .NET Framework 类库中,
IEnumerable<T> 从 IEnumerable 继承,
因为 IEnumerable<T> 仅在 GetEnumerator
的返回值和当前属性 getter 中使用 T。

using System.Collections;
using System.Runtime.CompilerServices;

namespace System.Collections.Generic
{
// 摘要:
// 公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代。
//
// 类型参数:
// T:
// 要枚举的对象的类型。
public interface IEnumerable<T> : IEnumerable
{
// 摘要:
// 返回一个循环访问集合的枚举数。
//
// 返回结果:
// 可用于循环访问集合的 System.Collections.Generic.IEnumerator<T>。
IEnumerator<T> GetEnumerator();
}
}


有点感觉了,还是还没有理解透,
如果按照C#4.0中的说法,更象是协变啊.
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
微创社(MCC) 2009-08-31
  • 打赏
  • 举报
回复
委托和接口的协变和逆变在3.0中就己经存在了

而且大家用的最多的WINFOR的事件,己经不知不觉用上了逆变,只是没有感觉到而己。

4.0中增加了类的协变和逆变,出于对比吧,不是说这个是4.0的特性,而是早有存在的。

问题是:
public interface IEnumerable<T> : IEnumerable
这样做的目的是什么,感觉混乱起来了。
泛型归泛型,非泛型归非泛型,清清爽爽多好啊。
NewUser2008 2009-08-31
  • 打赏
  • 举报
回复
啊,4.0呢啊!
gary412 2009-08-31
  • 打赏
  • 举报
回复
学习来了
EsMo 2009-08-31
  • 打赏
  • 举报
回复
为啥我总想到裂变和聚变..
微创社(MCC) 2009-08-31
  • 打赏
  • 举报
回复
没人顶啊...-_-'

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧