zoukankan      html  css  js  c++  java
  • C#逆变,协变,不变

    这里三种变化一般指的泛型,

    Covariance协变,当值作为返回值输出是(例:IEnumerable)

    Contravariance逆变,当值作为输入的时候(例:Action)

    Invariance不变,当值既是输入也是输出(例:IList)

    1.这个协变是没问题的

    因为他不能再添加元素,这是安全的,所以他可以进行

    IEnumerable<string> strings=new List<string>{"a","b"};
    IEnumerable<Object> object=strings;

    2.这个不变是不成功的

    因为他可以再继续添加元素

    IList<string> strings=new List<string>{"a","b"};
    IList<Object> objects=strings;

    比如

    objects.Add(ne Object());

    这样就在添加之前就会报错

    3.逆变是成功的

    Action<object> objects =obj=>Console.Write(obj);
    Action<string>  strings =objects;
  • 相关阅读:
    桶排序
    基数排序
    计数排序
    归并排序
    快速排序
    优先级队列-堆实现
    堆排序
    红黑树
    【转】二叉树
    ubuntu 16.04 mysql 相关
  • 原文地址:https://www.cnblogs.com/liuyang95/p/12942090.html
Copyright © 2011-2022 走看看