给对象变量赋值是否有代价
本文关键字:代价 是否 赋值 对象 变量 | 更新日期: 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
后一个比第一个短两条指令,但你不应该担心这一点,除非你有大量的调用,因为这将是一个微不足道的差异。