静态方法的好理由?

时间:2013-06-26 11:40:45

标签: c# static resharper static-methods

我使用静态方法来实现我真正想要的静态方法。我使用ReSharper来提高代码质量。有时候ReSharper建议一种方法可以是静态的。

当我得到以下课程时:

public class WhatEverClass {
    private string DoSomethingFancy(string input) 
    {
       string fancyStuff;
       // Fancy Stuff here
       return fancyStuff;
    }

    public WhatEverClass() {
       string awesome=DoSomethingFancy("some fancy string");
    }
}

ReSharper可能会说“DoSomethingFancy可以变为静态”。

我知道可以变得静态,但有充分的理由真正做到这一点吗?或者我应该忽略这些建议?

6 个答案:

答案 0 :(得分:4)

通过定义静态方法,以及计算某事的过程,您API关于无状态的消费者显示意图你的功能

当我们使用static函数时,我们不希望它在其内部static private变量中的某处保存计算状态或某个计算内部值,因此下一次调用即使第一次调用期间传递的参数相同,该函数也可能有不同的结果。

简而言之:每当你看到一个函数只是对参数执行一个动作而不保留某个状态时,它就是一个很好的候选者static

答案 1 :(得分:1)

如果你的方法不需要说或改变实例化对象的状态,那么它应该是静态的。

答案 2 :(得分:1)

通常的想法是,如果你没有创建任何实例,你可以将它声明为静态。至于应该在何处使用,ReSharper会根据标准编程实践为您提供建议。但是,我采取了“标准编程实践”的方法。这是一些个人编程偏好的问题。以下是关于该主题的详细参考:

http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

答案 3 :(得分:0)

如果方法DoSomethingFancy没有在对象WhatEverClass中使用任何东西,那么在我的书中它应该是静态的,因为它实际上与它所在的对象没有任何关系使用。

答案 4 :(得分:0)

因为您将通过创建WhatEverClass()实例从类外部调用WhatEverClass方法。因此,每个实例的值都是不同的,因为变量是本地的,并且每次创建类的实例时都会创建。

但是如果你想为所有实例保留相同的值,那么你可以使它static,这样它就会在内存中创建一次,所有实例都会使用它。

答案 5 :(得分:0)

注意使方法静态化的后果!

通过使您的方法保持静态,您可以让消费者更难以隐藏算法的实现并将其替换为自己的算法(显然,如果方法为private您没有这样的担忧) 。

静态方法的消费者将您的实现融入他们的代码中 - 他们不能使用依赖注入来解析算法的特定实例(没有一点工作)。这使得他们的系统更难以测试,并且通常适用于不太可扩展的代码库。