给对象变量赋值是否有代价

本文关键字:代价 是否 赋值 对象 变量 | 更新日期: 2023-09-27 18:11:22

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

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

new Foo().DoSomething();

给定的情况下,我不需要做任何其他与Foo,并可以愉快地扔掉它后调用DoSomething,这两者之间是否有一个偏好,或者他们编译成相同的东西?

我知道可能有更好的方法来写Foo,但我现在不能这样做,所以我只是想知道如何最好地使用我所拥有的

给对象变量赋值是否有代价

这是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

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