zoukankan      html  css  js  c++  java
  • 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 委托和接口的逆变和斜变泛型类型实参

  • 相关阅读:
    ORA-12520: TNS:监听程序无法为请求的服务器类型找到可用的处理程序解
    Django2.1.2创建默认管理后台
    堡垒机实例以及数据库操作
    pycharm常用快捷键
    Linux命令之sftp
    oracle收集ash和awr性能报告方法
    linux-php5.6-安装sftp扩展
    linux系统安全设置策略
    Openssh版本升级修复漏洞
    Android Studio下HierarchyViewer的使用
  • 原文地址:https://www.cnblogs.com/errornull/p/9902564.html
Copyright © 2011-2022 走看看