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

    文章

    7533

    浏览量

    128779
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33138
收藏 人收藏

    评论

    相关推荐

    C#操作AP

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

    scanf函数简单问题讨论

    ("%d\n",&a);//这里多了一回车\nprintf("%d",a);return 0;}结果要输入两个数程序才结束,而不是预期的一。why?原因
    发表于 12-21 16:55

    Python与C#对比

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

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

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

    如何在非main.c文件中使用任务内嵌信号量

    任务控制块定义的时候都加了static修饰符,我写的app在一单独的c文件,我想用任务内嵌信号量,结果提示任务控制块未定义,好 那我取消static
    发表于 07-23 04:35

    请问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

    C51语言的变量定义方式

    C51 语言的变量定义定义方式:普通变量:(修饰符)数据类型 [存储类型] 变量名 [= 值]指针变量: (修饰符)所指向的地址的数据类型 [所指向的地址的存储类型] *[指针的存储类型] 变量名
    发表于 12-01 06:18

    HAL库__weak修饰符是什么?

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

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

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

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

    C语言是我们经常需要用到的语言,C语言中的类型修饰符Volatile大家知道怎么使用吗? volatile是一个类型修饰符(type specifier).volatile的作用是作为指令关键字
    的头像 发表于 09-19 10:54 3296次阅读

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

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

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

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

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

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