gpt4 book ai didi

c# - 调用类的非静态方法

转载 作者:太空狗 更新时间:2023-10-29 19:56:27 25 4
gpt4 key购买 nike

按以下方式调用类的非静态方法的优点或缺点是什么(如果有的话)(性能、良好的编码习惯、垃圾收集等):

new ClassA().MethodA(param1, param2);

相对于更“传统”的方式

ClassA classA = new ClassA();
classA.MethodA(param1, param2);

如有任何想法,我们将不胜感激。

最佳答案

编码
至于编码实践,第二种选择更好,其中对象首先存储在变量中。使它更好的原因是您可以根据使用对象的上下文来命名对象。例如:

var pendingUserForRegistration = new User();

性能
至于性能,第一个选项可能稍微好一些,因为它直接使用堆栈中的对象并跳过将对象存储在局部变量中。从方法的IL可以看出:

第一个 IL:

.maxstack 8
L_0000: nop
L_0001: newobj instance void NS.ClassA::.ctor()
L_0006: call instance void MS.ClassA::M()
L_000b: nop
L_000c: ret

秒的 IL:

.maxstack 1
.locals init (
[0] class NS.ClassA c)
L_0000: nop
L_0001: newobj instance void NS.ClassA::.ctor()
L_0006: stloc.0
L_0007: ldloc.0
L_0008: callvirt instance void NS.ClassA::M()
L_000d: nop
L_000e: ret

这通常是一个很小的性能开销,很难找到它能解决真正性能问题的案例。


底线
由于此处代码增益的可维护性大于性能增益,因此最好将对象存储在具有有意义名称的变量中。

关于c# - 调用类的非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com