引用类型中的值类型属性是否包含装箱值?传递时是否按值复制?
关于引用类型中值类型属性的装箱与传值问题
1. 引用类型中的值类型属性是否包含装箱值?
不会。引用类型实例存储在托管堆时,其值类型属性是直接以原始值的形式嵌入在实例的内存区域里的,不存在装箱后的对象。比如你定义的SomeClass里的intProperty,它就是普通的32位整数,和单独的int变量存储逻辑完全一致,没有装箱操作。
2. 代码执行时的具体行为
针对你给出的代码:
public class SomeClass { public int intProperty { get; set; } ... } var obj = new SomeClass(); obj.intProperty = 1; SomeMethod(obj.intProperty); public void SomeMethod(int value) { ... }
执行SomeMethod(obj.intProperty)时:
- 首先读取
obj.intProperty的当前值(即1); - 由于
SomeMethod的参数是值类型int,会把读取到的数值复制一份,将副本传入方法内部; - 方法内对参数
value的任何修改都不会影响obj.intProperty的原始值,完全遵循值类型的传值行为。
内容的提问来源于stack exchange,提问作者Aleksandr Sheianov
相关产品推荐
相关产品推荐

