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 關注
- 92 瀏覽
添加回答
舉報