C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型

2021-06-23 11:03

阅读:498

标签:rip   tool   .net   lap   line   log   lis   必须   arp   

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

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

例如:

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

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

逆变泛型:

ListIn:IList
ListIn lobject = new ListIn(){"0","1","2"};
ListIn lint=new ListIn;
lint = lobject;

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

协变泛型:

ListOut:IList
ListOut lint=new ListOut(){0,1,2};
ListOut lobject=new ListOut();
lobject=lint;

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

C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型

标签:rip   tool   .net   lap   line   log   lis   必须   arp   

原文地址:https://www.cnblogs.com/evemen/p/10199625.html


评论


亲,登录后才可以留言!