小编Emr*_*tar的帖子

调用非指定类的方法

我怀疑这两个方面;

第一;

        Test test = new Test();

        result = test.DoWork(_param);
Run Code Online (Sandbox Code Playgroud)

第二个;

       result = new Test().DoWork(_param);
Run Code Online (Sandbox Code Playgroud)

如果我们不将新创建的实例分配给变量并直接调用该方法会发生什么?

我看到IL代码的两种方式有所不同.


下面这个是第一个c#代码的IL输出

 IL_0000:  ldstr      "job "
 IL_0005:  stloc.0
 IL_0006:  newobj     instance void Works.Test::.ctor()
 IL_000b:  stloc.1
 IL_000c:  ldloc.1
 IL_000d:  ldloc.0
 IL_000e:  callvirt   instance string Works.Test::DoWork(string)
 IL_0013:  pop
 IL_0014:  ret
Run Code Online (Sandbox Code Playgroud)

这个是第二个c#代码的IL输出

 IL_0000:  ldstr      "job "
 IL_0005:  stloc.0
 IL_0006:  newobj     instance void Works.Test::.ctor()
 IL_000b:  ldloc.0
 IL_000c:  call       instance string Works.Test::DoWork(string)
 IL_0011:  pop
 IL_0012:  ret
Run Code Online (Sandbox Code Playgroud)

你能告诉我吗?

c# oop il

5
推荐指数
1
解决办法
251
查看次数

标签 统计

c# ×1

il ×1

oop ×1