0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C#中的两个泛型修饰符

麦辣鸡腿堡 来源:CSDN博客 作者:mykge 2023-01-14 11:48 次阅读

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

    文章

    7606

    浏览量

    137051
  • 编程语言
    +关注

    关注

    10

    文章

    1946

    浏览量

    34791
收藏 人收藏

    评论

    相关推荐

    C#操作AP

    。Static修饰符则声明一静态元素,而这个元素属于类型本身而不是上面指定的对象。extern则表示这个方法将在工程外部执行,使用DllImport导入的方法必须使用extern修饰符
    发表于 12-26 12:23

    Python与C#对比

    生命周期可以分为编译时、链接时、加载时、运行时,这4阶段。在Python,这4阶段是一体的,而在C#却是严格分离的,在
    发表于 05-14 17:14

    “无注册”修饰符如何防止变量被保存到CPU寄存器

    好的,我的意思是,我希望真正的内存位置(无论是全局的还是本地的,不是基于堆栈的,变量)都要更新,所以当中断发生时,它会找到一更新的值。我知道“寄存器”修饰符,但它正好相反。F我想做什么,我在文档
    发表于 10-09 11:09

    请问C++代码的修饰符该怎么理解?

    有如下的代码段,写出下面除了宏定义外的其他代码的真实代码(即预处理后的代码)。然后写出对const的修饰符的理解(当前的代码用于单片机):#define DECL_PC_CMD_FUN(name
    发表于 11-11 04:35

    请问什么是正则表达式修饰符

    什么是正则表达式的修饰符
    发表于 11-04 06:10

    labview连接mongdb问题,找到不.NET类

    有没有人用labview连接mongodb数据库的?已下载mongodb的c#驱动,利用labview的.net控件调用相关函数,但是驱动中有部分函数在
    发表于 04-08 13:38

    HAL库__weak修饰符是什么?

    单片机系统时钟是什么?HAL库__weak修饰符是什么?
    发表于 02-23 07:32

    C语言类型修饰符Const的教程使用说明

    Const也是应该广泛的关键字,表示后面定义有可能是一不变的常量,但是跟各种数据类型定义组合,能演变出复杂含义。常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新
    的头像 发表于 09-20 09:37 3118次阅读

    C语言类型修饰符Volatile的使用说明

    C语言是我们经常需要用到的语言,C语言中的类型修饰符Volatile大家知道怎么使用吗? volatile是一类型修饰符(type spe
    的头像 发表于 09-19 10:54 3555次阅读

    C51单片机中断函数的修饰方法

    C51断函数必须通过该修饰符进行修饰。在C51程序设计,当函数定义时用了interruptm
    发表于 03-18 14:20 2731次阅读
    <b class='flag-5'>C</b>51单片机中断函数的<b class='flag-5'>修饰</b>方法

    一种修饰符能使变量在处理器复位而不被初始化

    有一种修饰符能使变量在处理器复位而不被初始化
    的头像 发表于 03-14 15:01 4049次阅读
    一种<b class='flag-5'>修饰符</b>能使变量在处理器复位而不被初始化

    Vue入门之事件操作

    事件修饰符 vue 通过事件修饰符对js事件进行细节控制。
    的头像 发表于 02-06 16:26 708次阅读
    Vue入门之事件操作

    Java四种访问修饰符及访问范围

    public修饰的类、类属变量及方法,包内及包外的任何类均可以访问;任何情况下都可以访问;如果一类、类属变量及方法没有用任何修饰符,则其访问权限为默认权限,只认包。同包下可以访问,同包下子类可以访问,只要不同包,普通类和子类都
    的头像 发表于 02-28 14:35 6661次阅读

    java内部类可以用public修饰

    使用任意访问权限修饰符,包括public、protected、默认和private。 方法内部类只能使用默认访问权限,即不加任何访问修饰符。 使用public修饰的内部类 内部类使用public
    的头像 发表于 11-21 10:23 1219次阅读

    浅析C语言中的变量修饰符

    一、修饰符类型51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线上定义不同的变量。在KEILC51定义了data、idata、xdata、code几种域修饰符。这些修饰符决定
    的头像 发表于 04-15 08:10 705次阅读
    浅析<b class='flag-5'>C</b>语言中的变量<b class='flag-5'>修饰符</b>