C# 你会把这个方法设为静态的还是非静态的?

C# 你会把这个方法设为静态的还是非静态的?,c#,.net,linq-to-sql,static,C#,.net,Linq To Sql,Static,在一次代码审查期间,我迅速向团队介绍了一种方法,我已经将其设置为静态,一个人同意没有理由不将其设置为静态,另一个人不同意,他说他不会将其设置为静态,因为这是不必要的,只是为了安全起见,以便将来进行修改和测试 所以我做了很多研究,很明显这是一个特殊的案例,但我想知道在这种情况下你会怎么做,为什么 (这基本上是一个助手方法,我从几个不同的方法调用,一个流量非常低的页面。更多关于我的静态知识和学习。) private IEnumerable GetCategoryByID(int-id,上下文) {

在一次代码审查期间,我迅速向团队介绍了一种方法,我已经将其设置为静态,一个人同意没有理由不将其设置为静态,另一个人不同意,他说他不会将其设置为静态,因为这是不必要的,只是为了安全起见,以便将来进行修改和测试

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

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

private IEnumerable GetCategoryByID(int-id,上下文)
{
var categoryQuery=来自上下文中的selectAllProc。SelectAll_sp()
其中selectAllProc.CategoryID==id
选择selectAllProc;
返回类别查询;
}

使私有方法静态化是微观优化的一种形式;方法调用稍微快一点。但差别太小,没有意义

一般来说,在以下情况下,应将方法标记为静态:

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

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

    将私有方法设置为静态是一种微观优化形式;方法调用稍微快一点。但差别太小,没有意义

    一般来说,在以下情况下,应将方法标记为静态:

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

  • 通常,像您的示例这样的方法将进入它们自己的
    静态
    助手类,如果它们用于多个位置。

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

    Is it something which is related to type or instance of type?
    
    如果答案是肯定的,我会稍微倾向于让它成为静态的,否则,让它成为非静态的


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

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

    Is it something which is related to type or instance of type?
    
    如果答案是肯定的,我会稍微倾向于让它成为静态的,否则,让它成为非静态的


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

    我想到的第一句话是,通过声明此方法为静态,并可能在代码中的多个位置使用它,您引入了一种服务定位器类型的依赖性

    据我所知,它的主要问题是引入了隐式依赖,也就是说,不能通过查看方法签名来推断它们


    因此,评估修改静态方法对系统其他部分的影响可能会困难得多。

    我想到的第一句话是,通过声明此方法为静态方法,并可能在代码中的多个位置使用它,您引入了一种服务定位器的依赖性

    据我所知,它的主要问题是引入了隐式依赖,也就是说,不能通过查看方法签名来推断它们


    因此,评估修改静态方法对系统其他部分的影响可能会困难得多。

    对于
    上下文类型的扩展方法如何?
    ?该方法是
    私有的
    ;我不认为让它保持静态会让事情变得更加困难。这有点主观和争议。但是根据一些指导原则,如果您发现自己将相同的值/对象引用传递到许多实例方法中,则将它们改为私有字段。我看不出任何理由,如果它是私有的,为什么你会希望它是静态的。Resharper中有恼人的警告,只针对你的情况。建议您阅读关于使方法成为静态的内容关于
    上下文类型的扩展方法如何?该方法是
    私有的
    ;我不认为让它保持静态会让事情变得更加困难。这有点主观和争议。但是根据一些指导原则,如果您发现自己将相同的值/对象引用传递到许多实例方法中,则将它们改为私有字段。我看不出任何理由,如果它是私有的,为什么你会希望它是静态的。Resharper中有恼人的警告,只针对你的情况。建议您阅读有关使方法成为静态的内容