2 回答
TA贡献1780条经验 获得超5个赞
SharpLab正在获取已编译的IL并尝试将其转换回可读的C#,生成的C#并不总是与最初编译的代码完全匹配。
相反,如果我们查看生成的 IL,在调试模式下,我们会得到以下内容(我删除了一些 nop(no-op)指令以保持整洁:
.locals init (
[0] class Employee
)
IL_0001: newobj instance void Employee::.ctor()
IL_0006: dup
IL_0007: ldstr "Jeff"
IL_000c: callvirt instance void Employee::set_Name(string)
IL_0012: dup
IL_0013: ldc.i4.s 45
IL_0015: callvirt instance void Employee::set_Age(int32)
IL_001b: stloc.0
IL_001c: ret
在版本中,它几乎是相同的:
IL_0000: newobj instance void Employee::.ctor()
IL_0005: dup
IL_0006: ldstr "Jeff"
IL_000b: callvirt instance void Employee::set_Name(string)
IL_0010: dup
IL_0011: ldc.i4.s 45
IL_0013: callvirt instance void Employee::set_Age(int32)
IL_0018: pop
IL_0019: ret
唯一真正的区别是,在 Debug 版本为其 分配局部变量的情况下,发布版本不会,因为它从未使用过,因此不是必需的。employee
正如我们所看到的,您在调试版本中看到的“额外”变量实际上并不存在,它只是SharpLab尝试将编译后的IL转换回可读C#的产物,实际上发布版本已经“丢失”了一个局部变量,因为它不是必需的。
TA贡献1883条经验 获得超3个赞
我想你应该像这样创建你的第二个对象。
Employee employee2 = new Employee();
然后
employee2= employee;
- 2 回答
- 0 关注
- 73 浏览
添加回答
举报