110,566
社区成员
发帖
与我相关
我的任务
分享
{
.entrypoint
// Code size 20 (0x14)
.maxstack 1
.locals init ([0] int32 a,
[1] object b,
[2] object c)
IL_0000: nop
IL_0001: ldc.i4.1
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: box [mscorlib]System.Int32
IL_0009: stloc.1
IL_000a: ldloc.1
IL_000b: stloc.2
IL_000c: ldc.i4.2
IL_000d: box [mscorlib]System.Int32
IL_0012: stloc.2
IL_0013: ret
}
var a=new User();
a.name = "111";
aaa(a); // a不受影响
bbb(a); // a被影响了,name变了
void aaa(User x){
x = new User();
x.name = "222";
}
void bbb(User x){
x.name = "222";
}
object b=a;
object c = b;
c = 2;
这里的c = 2,跟改成 c=new User()是一样的效果,
我建议可以这么理解,所有的变量本身都是值类型的,比如: object a = xxx;
这个a存储的是一个值类型的地址,修改这个a本身,对地址的指向没影响,
如果修改a.name,那么是修改地址指向的内容了,所以有影响
个人见解var a = new User();
a.name = "xxx";
var b = a;
b=new User();
b.name = "ddd";
来来来,你告诉我,为什么a.name没变,还是xxx???