C# 拳击及;拆箱
“i”被认为是装箱的吗?C#中的数组是引用类型,因此不需要装箱。但是,在本例中,您将使用拳击:C# 拳击及;拆箱,c#,.net,boxing,C#,.net,Boxing,“i”被认为是装箱的吗?C#中的数组是引用类型,因此不需要装箱。但是,在本例中,您将使用拳击: var i = new int[2]; 假设这是C#(var和类似C#的数组语法),不,i没有装箱。只能装箱基本值类型(考虑数值) 数组中的值也没有装箱,因为基本数组中的值不会装箱。不,没有要装箱的内容。var关键字并不意味着变量是boxx。它在运行时不进行任何转换。var关键字严格来说是一个C#构造。使用var时实际发生的情况是: var i = 123; object o = i; IL将其视
var i = new int[2];
假设这是C#(var
和类似C#的数组语法),不,i
没有装箱。只能装箱基本值类型(考虑数值)
数组中的值也没有装箱,因为基本数组中的值不会装箱。不,没有要装箱的内容。var关键字并不意味着变量是boxx。它在运行时不进行任何转换。var关键字严格来说是一个C#构造。使用var时实际发生的情况是:
var i = 123;
object o = i;
IL将其视为:
var i = new int[1];
现在,如果您询问,当您将int赋值给i do it框数组的一部分时
例如:
int[] i = new int[1]
不,没有
这与以下情况相反:
i[0] = 2;
这个例子确实如此,而且为什么在1.0、1.1(预泛型)中使用ArrayList(想想可扩展数组)是一个巨大的成本。以下注释也适用于对象[]
示例:
任何引用或值类型
添加到ArrayList的
向上投射到对象。如果项目是
值类型,则必须在
添加到列表中,并在
它们被找回了。两个演员
以及装箱和拆箱操作
降低性能;影响
装箱和拆箱可能非常复杂
在您
必须迭代大型集合
装箱仅在将(即基元类型、结构或枚举)视为引用类型时发生。数组被声明为保存int
类型的值。只告诉编译器推断变量i
的类型,而不是让编译器手动指定它
你有没有写过:
var o = new object[1];
o[0] = 2;
编译器会将其转换为object[]i=newobject[2]
,并且您在其中输入的任何int
值都会被装箱。放入同一数组中的任何引用类型都不需要任何装箱
简而言之,var
与装箱无关
这是一个在.NET中的应用程序。您可能还想阅读。您可以对任何结构进行装箱,包括您自己编写的结构,因此装箱比这意味着意义更深远。值类型在.NET中作为结构实现。@MarkRushakoff:)我知道这是一篇老文章,但我笑了,实际上洒了一些咖啡:))
var i = new object[2];