1
8
答案是“是”,值类型是
装箱的
. 这就是为什么总是一件好事
|
2
7
编辑: kek444's answer 是正确的。我很抱歉误读了这个问题。我把我的答案留在这里,因为我相信它对未来的读者有附加价值和相关信息。 我也认为这句话出自 reference 在里面 Mehrdad's answer 特别值得思考的是:
因此,人们不能编写一个程序来证明拳击正在进行。只有通过观察IL并完全理解
根据C语言规范第11.3.5节 http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc ( http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx ): 当结构类型重写从System.Object继承的虚拟方法(如Equals、GetHashCode或ToString)时,通过结构类型的实例调用虚拟方法不会导致装箱。即使将结构用作类型参数,并且通过类型参数类型的实例进行调用,也是如此。例如:
程序输出为:
虽然ToString有副作用是不好的风格,但是这个例子证明了对于x.ToString()的三个调用没有装箱。 同样,在访问受约束类型参数上的成员时,装箱也不会隐式发生。例如,假设接口ICounter包含可用于修改值的方法增量。如果将ICounter用作约束,则调用increment方法的实现时引用了对其调用increment的变量,而不是装箱副本。
对increment的第一个调用修改变量x中的值。这不等于对increment的第二个调用,后者修改x的装箱副本中的值。因此,程序的输出是:
有关装箱和拆箱的详细信息,请参见第4.3节。 |
3
4
不,你打电话的时候它没有盒装
更新:
抱歉,这可能造成误解。我写的答案是重写结构中的方法(这就是我提到的非虚拟方法需要装箱的原因,我应该更明确一些,不要混淆读者,特别是因为我错过了您关于不重写方法的声明),就好像您不重写它一样,
然而,关键是,对值类型调用虚方法的性质
不
导致发出
|
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
Prince · 复制大型文件需要更多时间 2 年前 |
Sagar · 为什么在循环之外声明变量会更快? 2 年前 |
seco · 如何在不挂起页面的情况下加载JS 2 年前 |