CLR via C#学习笔记-第十二章-泛型接口、委托

12.3 泛型接口

泛型接口的意义

显然,泛型的主要作用就是定义泛型的引用类型和值类型。

然而对泛型接口的支持对CLR来说也很重要。
没有泛型接口,每次用非泛型接口如IComparable来操作值类型都会发生装箱,而且会失去编译时的类型安全性。

这将严重制约泛型类型的应用范围,因此CLR提供了对泛型接口的支持。

引用类型和值类型可以指定类型实参实现泛型接口,也可以保持类型实参的未指定状态来实现泛型接口。

 

泛型接口的实现

以下泛型接口定义是FCL的一部分:

public interface IEnumerator<T>:IDisposable,IEnumerator{
    T Current{get;}
}

指定类型实参的实现

下面的示例类型实现了上述泛型接口,而且指定了类型实参。

注意Triangle对象可枚举一组Point对象。还要注意,Current属性只有Point数据类型。

internal sealed class Triangle<T>:IEnumerator<Point>{
    private Point[] m_array;
    //IEnumerator<T>的Current属性是Point类型
    public Point Current{get{...}}
    ...
}

未指定类型实参的实现

下例实现了相同的泛型接口,但保持类型实参的未指定状态:

internal sealed class ArrayEnumerator<T>:IEnumerator<T>{
    private T[] m_array;
    //IEnumerator<T>的Current属性是T类型
    public T Current{get{...}}
    ...
}

12.4 泛型委托

12.5 委托和接口的逆变和斜变泛型类型实参

转载于:https://www.cnblogs.com/errornull/p/9902564.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值