【问题标题】:Should I fully declare throw-away objects?我应该完全申报一次性物品吗?
【发布时间】:2010-07-30 04:33:21
【问题描述】:

如果我需要这样做:

var connection = new Connection(host);
connection.Execute(Commands.Delete);

这样做有什么问题吗:

(new Connection(host)).Execute(Commands.Delete);

第一个示例可能更具可读性,但如果我需要多次执行此操作,则第二个效果更好:

(new Connection(anotherHost)).Execute(Commands.Create);
(new Connection(someOtherHost)).Execute(Commands.Update);
(new Connection(host)).Execute(Commands.Delete);

【问题讨论】:

  • 你甚至可以使用new Connection(anotherHost).Execute(Commands.Create)(即没有括号),这样看起来更流畅
  • 啊酷。甚至没想过要尝试。

标签: c# declaration throwaway


【解决方案1】:

您的Connection 类是否实现IDisposable?那么:

using (var connection = new Connection(host))
{
    connection.Execute(Commands.Delete);
}

【讨论】:

    【解决方案2】:

    首先我是一个 Java 人,我没有使用过 C# 但是根据您的代码并了解与 java 的相似性,我可以说的是 -

    如果您的 Connection 类维护状态信息,那么每次创建新对象都有意义。但如果它是无状态的,那么创建多个对象的效率就很低了。您可以创建一个并重复使用它。

    即如果您无法在创建后将“主机”设置为连接,那么您提到的两种方法应该没有任何区别。

    【讨论】:

    • 除非这是一个超级紧密的循环,有大量 otherHosts 我会说多对象问题是一个过早的优化
    • @Earlz:对我来说,这听起来像是过早的“过早优化”资格。不管你怎么想,在任何一种方法中,一次就够了,创建一个对象 3 次是完全浪费的。在我看来,许多“不要过早优化”的思想流派已经走到了另一个极端:除非有人抱怨,否则不要在意浪费。
    【解决方案3】:

    您越详细,调试就越容易。

    对代码可读性的影响实际上取决于您尝试在一行中包含多少 - 如果您有一个需要很多不同单词来表达的单一想法,那么将它放在一行中是'在我看来没什么大不了的。但是,如果你试图将多个想法塞进一行,你就会失去清晰度。

    例如。我们将从一个需要一些空间来表达的简单想法开始:

    transactionTime = generationTime + retrievalTime + processingTime + loggingTime
    

    这里我们有一个更复杂的想法,我们恰好用一行来表达:

    logTransactionData(processTransaction(retrieveTransaction(generateTransactionQuery())))
    

    我认为第一个示例比第二个更容易理解,尽管它们的字符长度大致相同。

    因此,总的来说:考虑您需要调试生产线的可能性有多大,以及您的想法复杂度与生产线的比率。

    【讨论】:

      【解决方案4】:

      是的,您正在初始化一个新对象,使用它,然后丢失它!你不能再次使用它,它会在某个地方,直到 GC 收集它!因此,将新的初始化对象存储在变量中并在另一行中声明它们可以使您的代码更具可读性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        相关资源
        最近更新 更多