在C#中,存在两个泛型修饰符:in和out,他们分别对应逆变委托和协变委托。
我们知道,在C#中要想将一个泛型对象转换为另一个泛型对象时,必须要将一个泛型对象拆箱,对元素进行显式或隐式转换后重新装箱。
例如:
Listlobject=new List(){"0","1","2"};
List lint=new List();
foreach(Object obj in lobject)
{
lint.Add((int)obj);
}
在这个拆箱和装箱的过程中,要消耗掉相当于lobject对象两倍的内存和资源,如果lobject对象非常大,这将是非常巨大的资源消耗。泛型修饰符就是用来解决这个问题的。
当两个泛型对象的元素存在继承关系是,可以在实现泛型对象是为泛型元素增加in或者out声明,以便逆变或协变。
逆变泛型:
ListIn:IList
ListInlobject = new ListIn(){"0","1","2"};
ListIn lint=new ListIn;
lint = lobject;
协变泛型:
ListOut:IList
ListOut lint=new ListOut(){0,1,2};
ListOutlobject=new ListOut();
lobject=lint;
原文链接:https://blog.csdn.net/mykge/article/details/42918841
编辑:何安
-
C语言
+关注
关注
180文章
7616浏览量
138004 -
编程语言
+关注
关注
10文章
1951浏览量
35054
发布评论请先 登录
相关推荐
C#中操作AP
“无注册”修饰符如何防止变量被保存到CPU寄存器中?
请问C++代码的修饰符该怎么理解?
labview连接mongdb问题,找到不.NET类中的泛型类
C语言类型修饰符Const的教程使用说明
C语言类型修饰符Volatile的使用说明
Java四种访问修饰符及访问范围
java内部类可以用public修饰吗
浅析C语言中的变量修饰符
![浅析<b class='flag-5'>C</b>语言中的变量<b class='flag-5'>修饰符</b>](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
评论