zoukankan      html  css  js  c++  java
  • C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型

    在C#中,存在两个泛型修饰符:in和out,他们分别对应逆变委托和协变委托。

    我们知道,在C#中要想将一个泛型对象转换为另一个泛型对象时,必须要将一个泛型对象拆箱,对元素进行显式或隐式转换后重新装箱。

    例如:

    List<Object> lobject=new List<Object>(){"0","1","2"};
    List<int> lint=new List<int>();
    foreach(Object obj in lobject)
    {
      lint.Add((int)obj);
    }

    在这个拆箱和装箱的过程中,要消耗掉相当于lobject对象两倍的内存和资源,如果lobject对象非常大,这将是非常巨大的资源消耗。泛型修饰符就是用来解决这个问题的。
    当两个泛型对象的元素存在继承关系是,可以在实现泛型对象是为泛型元素增加in或者out声明,以便逆变或协变。

    逆变泛型:

    ListIn:IList<in T>
    ListIn<Object> lobject = new ListIn<Object>(){"0","1","2"};
    ListIn<int> lint=new ListIn<int>;
    lint = lobject;

    ---------------------

    协变泛型:
    ListOut:IList<out T>
    ListOut<int> lint=new ListOut<int>(){0,1,2};
    ListOut<Object> lobject=new ListOut<Object>();
    lobject=lint;

    转自:https://blog.csdn.net/mykge/article/details/42918841

  • 相关阅读:
    二次冲刺站立会议五
    二次冲刺站立会议四
    二次冲刺站立会议三
    二次冲刺站立会议二
    自己常用网址导航
    Eclipse几个配置
    JVM参数和jvm.log
    JVM性能监控命令
    Linux基本信息查看命令
    Linux IO性能监控工具
  • 原文地址:https://www.cnblogs.com/evemen/p/10199625.html
Copyright © 2011-2022 走看看