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 委托和接口的逆变和斜变泛型类型实参

  • 相关阅读:
    docker study
    安卓学习征文 -- 自己定义标题栏
    ftp server来源分析20140602
    poj1251--Kruskal
    cocos2d-x 3.0rc1 创建project
    创建序列和相应的视图
    华为OJ: 公共字符串计算
    LeetCode:Minimum Depth of Binary Tree
    webservice发送字符串
    高德地图由哪几部分组成
  • 原文地址:https://www.cnblogs.com/errornull/p/9902564.html
Copyright © 2011-2022 走看看