【问题标题】:Would you make this method Static or not? [closed]你会把这个方法设为静态吗? [关闭]
【发布时间】:2012-04-02 22:49:03
【问题描述】:

在代码审查期间,我快速向团队展示了一种我已将其设为静态的方法,一个人同意没有理由让它不是静态的,另一个人不同意说他不会将其设为静态,因为它不是'没有必要,只是为了以后的修改和测试安全。

所以我做了很多研究,显然这是一个专门的案例,但我想知道在这种情况下你会怎么做,为什么?

(它基本上是我从几个不同的方法调用的辅助方法,一个非常低流量的页面。更多关于我对静态的知识和学习。)

private IEnumerable<Category> GetCategoryByID(int id, Context context)
{
    var categoryQuery = from selectAllProc in context.SelectAll_sp()
                        where selectAllProc.CategoryID == id
                        select selectAllProc;
    return categoryQuery;
}

【问题讨论】:

  • context 类型的扩展方法怎么样?
  • 方法是private;我不明白将其设为静态会使任何事情变得更加困难。
  • 这有点主观和争论。但是根据一些指导方针,如果您发现自己将相同的值/对对象的引用传递给许多实例方法,请改为将它们设为私有字段。如果它是私有的,我看不出有什么理由要让它成为静态的。
  • Resharper 中存在烦人的警告,仅针对您的情况。建议您阅读有关将方法设为静态stackoverflow.com/questions/169378/…

标签: c# .net linq-to-sql static


【解决方案1】:

将私有方法设为静态是微优化的一种形式;方法调用快。但差异几乎太小而没有意义。

一般来说,你应该将一个方法标记为静态:

  1. 不以任何方式与实例成员交互,并且
  2. 您希望能够在不实例化类的情况下调用它,如Class.Method()

通常,像您的示例这样的方法会进入它们自己的 static 辅助类,如果它们在多个地方使用的话。

【讨论】:

    【解决方案2】:

    如果我是你,我会问自己以下问题。

    Is it something which is related to type or instance of type?
    

    如果答案是肯定的,我会稍微倾向于将其设为静态,否则将其设为非静态。

    如果您能给我们提供更多信息,社区可以提出一些不错的选择。

    【讨论】:

      【解决方案3】:

      我想到的第一句话是,通过将这个方法声明为静态并可能在代码中的多个位置使用它,您正在引入一种 Service-locator 类型的依赖关系。

      据我所知,它的主要问题是引入了隐式依赖关系,即无法通过查看方法签名来推断它们。

      因此,评估修改静态方法对系统其余部分的影响会变得更加困难。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2013-01-16
        • 2010-09-15
        • 2010-10-18
        • 2015-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多