是否需要分配对象变量?

时间:2013-04-29 06:37:44

标签: c# memory-management compilation

给定一个带有方法DoSomething的非静态类Foo,以下两个代码片段是有效的:

Foo myFoo = new Foo();
Foo.DoSomething();

new Foo().DoSomething();

考虑到我不需要对Foo做任何其他事情的情况,并且在调用DoSomething之后可以高兴地抛弃它,这两者之间是否存在偏好,或者它们是否编译成相同的东西?

我知道写Foo可能有更好的方法,但我现在无法做到这一点,所以我只是想知道使用我所拥有的最佳方式。

1 个答案:

答案 0 :(得分:1)

这是IL:

案例1。

var t = new Foo();
t.DoSomething();

编译到

IL_0000:  newobj     instance void Tests.Foo::.ctor()
IL_0005:  stloc.0
IL_0006:  ldloc.0
IL_0007:  callvirt   instance void Tests.Foo::DoSomething()
IL_000c:  ret

案例2。

new Foo().DoSomething();

编译到

IL_0000:  newobj     instance void Tests.Foo::.ctor()
IL_0005:  call       instance void Tests.Foo::DoSomething()
IL_000a:  ret

后者是比第一个更短的两个指令,但你不应该担心这个,除非你有大量的调用,因为这将是一个微不足道的差异。