C# 不将新实例分配给变量是一种糟糕的编码方式吗?

C# 不将新实例分配给变量是一种糟糕的编码方式吗?,c#,coding-style,C#,Coding Style,在我的程序顶部有一个代码段,看起来像这样 var XXXAssembler = new XXXAssembler(ctx); XXXAssembler.LoadXXX(); var YYYAssembler = new YYYAssembler(ctx ); YYYAssembler.LoadYYY(); var ZZZAssembler = new ZZZAssembler(ctx); ZZZAssembler.LoadZZZ(); 在上面的逻辑中,我使用每个varaible一次来调用相

在我的程序顶部有一个代码段,看起来像这样

var XXXAssembler = new XXXAssembler(ctx);
XXXAssembler.LoadXXX();

var YYYAssembler = new YYYAssembler(ctx );
YYYAssembler.LoadYYY();

var ZZZAssembler = new ZZZAssembler(ctx);
ZZZAssembler.LoadZZZ();
在上面的逻辑中,我使用每个varaible一次来调用相应的加载程序,并且我不在其他任何地方使用变量

我可以把代码改成这个

new XXXAssembler(ctx).LoadXXX();
new YYYAssembler(ctx ).LoadYYY();
new ZZZAssembler(ctx).LoadZZZ();
这减少了代码的大小,但我认为它也简化了代码。我可以看到变量对于调试的有用性,但我认为这不一定是一个好的理由。其他人可能不同意


非变量版本被认为是糟糕的编码风格吗?

除非您要使用分配给汇编器变量的对象,否则就不需要它


我要说的是扔掉它,清理代码,然后如果以后需要它,可以把它带回来。

new-XXXAssembler(ctx).LoadXXX()new-XXXAssembler(ctx)
返回的引用,code>就完全可以了。

如果您再也不打算使用该对象,但在这种情况下,我不认为给它们命名有什么意义。它会给你的代码增加不必要的混乱行。

如果你问我,代码的大小并不重要。唯一的问题是,当你在一年后看到代码时,你要知道它是如何做它需要做的事情的,以及如何重写/重用/等等。

我认为不使用变量是可以的。我在很多情况下都会这样做,例如,对于某些unittest Mock
new Mock.Object
或callbacks functors
SomeFunctionAcceptingCallback(args,new CallbackHandler())
,正如您所提到的,将创建的对象分配给变量的唯一技术原因是您是否需要使用它或在某个地方查看它。如果您确信永远不需要这样做,那么就不需要创建新的变量,并且可以将代码缩短一点

但我要提出两个警告:

(1) 我经常发现我需要在方法返回之前查看它的输出,或者在调试时查看由新语句创建的对象的实例。因此,有时不这样做:

public MyObject ReturnSomeObject()
{
    return new MyObject();
}
我将这样做:

public MyObject ReturnSomeObject()
{
    var myObject = new MyObject();
    return myObject;
}
这样我就可以在调试器中查看它了。它使我的代码有点混乱,但当我试图找出其他错误的原因时,它会非常有用

(2) 如果你发现你可以做你经常描述的事情,你可能想更仔细地看看你的类是如何构造的。如果一个类的方法不返回任何内容,并且不会以您感兴趣的方式修改该类的内部状态,那么这个类的意义何在?以上面的例子为例,假设您的各种LoadXXX()方法应该返回某种状态代码,或者修改对象的某些状态属性,或者返回指向它们加载的文件的指针,或者,嗯,返回一些东西。如果他们这样做了,但你却懒得去看——好吧,那是另一个问题。如果这些方法真的不需要修改对象内部状态的任何方面,那么您应该仔细考虑使它们成为静态的:它允许您避免每次调用它们时运行类构造函数,它更清楚地表达了它们的意图,如果您确实决定将来某个时候需要修改对象状态,它允许编译器通知您可能存在的不一致


这里没有硬性规定,只是一些指导原则。

我认为您的实例化需要括号,因此您的代码如下所示:
(新的XXXAssembler(ctx)).LoadXXX()否则,您将在抽象类上调用该方法。Mini-rant:我个人无法忍受,但后来,我遇到一位同事,他会在同一个方法中,在代码中乱扔许多相同类型的实例。因此,我对这种做法有过度的偏见。@Justin谢谢,很高兴知道。