给引用类型的值类型字段赋值需要装箱吗?

如有引用类型Point,它有两个字段:int x, int y,那么
var p=new Point();
p.x=10;
p.y=20;
这样赋值会装箱吗?
我理解的是堆上所有类型都有类型对象指针和同步块索引,至少要有类型对象指针,否则CLR无法知道其真实类型(因为存在继承,CLR根据类型对象指针才能知道这是基类还是派生类),所以上面的代码也需要装箱。
但是看书上说泛型集合不需要装箱,因为泛型集合的接口参数是值类型,比如List<int>的Add方法,但我不明白,List是在堆里,List的每个元素也是在堆里,元素保存的只是一个int,没有类型对象指针吗?

第1个回答  2022-08-14

    第一个问题:因为new其实是在堆里分配了空间,实例化了一个类对象(x和y两个int值也分配好了空间,大小为4字节),所以这样赋值不会存在装箱拆箱。

    装箱和拆箱

  2. 第二个问题:List<int>其实是一个容量可动态伸缩的数组,也是分配到堆里面的。所以也        不存在装箱和拆箱。int是值类型,不是类,不需要什么类型对象指针。整个List<int>是一        个类对象,它本身有对象指针而已。

第2个回答  2022-08-27
接通水系统电源及主电源开关,检查面板有无报警,将“泵+外部冷却水关”开关打到“0”。水系统的循环泵、风机及喷淋泵的开关设置在自动位置,出水压力为0.15-0.3mpa。氮气罐充气压力达到0.4-0.8mpa,按下主控制柜上的“驱动开”按钮。检查炉门前机械式压力表的指针是否在1000mbar的位置,如果不是,需要按下炉门控制柜“冷却室充气”按钮,使压力达到1000mbar,与大气压平衡,按下“开门”按钮,打开炉门,用装/卸料车将工件送到炉门前,将工件送入冷却室。退出装/卸料车,观看料盘位置,按下“关门”和“炉门关闭安全提示”按钮,关闭炉门。将加热室超温仪表调到比工艺要求高出10-20℃。在电脑vacu-prof系统的“程序”中选择待处理工件所需工艺,按“新程序 →炉子”。渗碳时打开乙炔气瓶及阀门,压力表压力为1.0-1.5mbar,在控制柜上依次按下“加热室泵循环开”、“冷却室泵循环开”、“外部加热过程循环开”和“工作循环开”按钮,程序运行。当在炉内压力抽至低于10pa,真空室基本达到无氧条件时,真空炉开始加热。
  工件采用脉冲方式供气;真空室达到设定渗碳温度,通入乙炔,控制炉内压力在10-1000pa之间,这时进入第一渗碳时段。当工件表面达到该渗碳温度下的奥氏体中的碳的溶解度极限值时,停止通入乙炔,并对真空室抽真空,进入扩散时段。渗碳时段和扩散时段重复进行,直至工件的渗碳层深度符合要求。富化气单个脉冲时间不应小于50s。
  真空炉开始降温至淬火温度后进行淬火操作,淬火时,油淬室应充入高纯氮气,压强为400mbar-800mbar。淬火时,油槽应进行搅拌和循环冷却。
  程序运行结束,出炉铃响,将冷却室回冲高纯氮气至1000mbar,到主控制柜上按“外部加热过程循环关”和“加热室泵循环关”按钮到炉前控制柜上按下“开门”按钮,炉门打开,工件在冷却室放置10-20分钟。
  2.4 清洗(设备型号:wpsd-5-e)本回答被网友采纳
第3个回答  2022-07-25

问题中的操作不需要装箱。

你的理解模型有问题,抱歉我能力欠缺,暂时没办法文字描述出我的理解模型。

List本身是class,不在堆里。List的每个元素也不在堆里。

拆箱装箱,值类型,引用类型,这些和堆栈没有必然联系。

C#从来都是让程序员不要去管堆栈,本来就对上层不透明的,最近几年才填加了stackalloc等一些强制手动分配的关键字。

一本书<CLR via C#>建议看一下。我印象中即使是这本深入clr的书,也都很少提及堆栈。

网上的很多结构体优化也都是为了有更高的几率被分配到堆上。

第4个回答  2022-08-29
如何引进历史比较强的教材内容。在初中语文教材中有一定程度的历史比较强的内容,所以对于课堂教材中历史较强的内容导入教师应该采取有针对性的措施,选择最佳的课程导入方式。一般在导入这类教材内容时,教师首先应该简单地向学生介绍环境背景,让学生有一个大致的认识。所以学生在学习文本后能在一定程度上与教材内容产生共鸣。如在诗教《诗》的七个步骤中我将这样做时导入课程。这首诗的作者是曹氏的儿子,那么皇帝是曹氏的儿子,也就是说,与曹氏的兄弟,但不是曹氏的怀疑,那是人才是高的,所以故意要求在七步以内做一首诗,否则你会被先杀了。但这已经完成了,这就是“诗”的起源的七个步骤。简单介绍之后,作者会给学生展示一个简单的动画,内容只是描述一下而已。这样学生对于这首诗的主题就有了大概的了解。为了体现指环的张力,环境氛围的作者和三国演义电视剧给学生里面的背景音乐,给学生一种亲切感。使学这首诗的学生再一次了解诗的程度和硕士的程度是明显的下一个层次。通过导入视频、音频等方式帮助学生理解课程,促进学生学习质量的提高是完全可行的。
第5个回答  2022-08-27
如果不为引用类型的局部变量和成员字段赋值,会发生什么?如果未指定值,则值类型成员的默认值为0;引用类型成员的默认值为null。在VS中,如果使用未分配的成员(或变量),将收到警告,但不会出现错误。
相似回答