• 逆变与协变


    • 定义

        逆变(Contravariance)是指能够使用比原始指定派生类型程度更小的类型,协变(Convariance)是指能够使用比原始指定的派生类型更大(更具体的)类型。泛型类型参数支持逆变和协变。

        参考:https://msdn.microsoft.com/zh-cn/library/dd799517.aspx

    • 逆变(Contravariance)

        参数类型前带有“out”的,它可接受子类型,叫做协变(Convariance)

        

    IEnumerable<string> stringList = ...;
    //协变--objectList可以接受子类stringList
    IEnumerable<object> objectList = stringList;
    • 协变(Convariance)

        类型参数前有“in”的,它可以接受父类型,叫做逆变(Convarance)

        

    //如:IComparer<T>其定义如下
    public interface IComparer<in T>
    {
       //...       
    }
    
    IComparer<object> objComp ="...";
    IComparer<string> stringComp = objComp;
    • 逆变和协变特性同样适用于非泛型的委托。

      

    //定义一个同时相应鼠标和键盘操作的函数
    prvate void MultiHandler(object sender,System.EventArgs e)
    {
        if(e is KeyEventArgs)
          //do something
        if(e is MouseEventArgs)
          //..
    }    
    
    xxx.MouseClick += MultiHandler;
    xxx.KeyDown += MultiHandler;
  • 相关阅读:
    POJ3984-迷宫问题【BFS】
    BFS与DFS模板
    nyoj27-水池数目【DFS】
    C++ STL-stack使用详解
    C++ STL
    HDU1058
    HDU1114
    HDU1867
    Codeforces Round #461 (Div. 2) D. Robot Vacuum Cleaner
    Codeforces Round #461 (Div. 2) C. Cave Painting
  • 原文地址:https://www.cnblogs.com/kooleven/p/5579649.html
Copyright © 2020-2023  润新知