【问题标题】:Is it better to use static functions if no class members are needed?如果不需要类成员,使用静态函数会更好吗?
【发布时间】:2011-06-13 06:56:51
【问题描述】:

我有一个不依赖于类的任何成员变量的成员函数。 (在我的例子中,这个类是一个 ASP.Net 页面)

这个函数是受保护的,我在这个类之外不需要它。它的唯一目的是从给定对象构建 URL。

如果我的所有函数不依赖于类,我是否应该将它们设为静态,即使它们没有在该类之外使用? 是否有任何原因,例如性能或可维护性?

【问题讨论】:

    标签: c# asp.net static static-methods


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      我不能说我对性能有足够的了解,但我听说如果它不依赖于类成员,将其设为静态是个好主意。通常它为您提供了不必浪费分配的好处,以防您只需要该方法,但由于它就在您的类中,您可能已经在使用对象的实例。我会把它设为静态的,但在你的情况下,我不知道是否有很大的不同(从编码的角度来看)。

      【讨论】:

        【解决方案3】:

        如果您将方法设为静态,则无需实例化类即可使用它。这会更快。另外,如果它是静态的,我发现它会使代码更短。

        我不认为静态有任何性能问题,如果有什么更快的话。想想新版本的 .net 中出现的所有扩展方法。它们都是静态的!

        【讨论】:

          【解决方案4】:

          最好将不与成员数据交互的函数设为静态。它只是帮助描述函数如何与其环境交互。不过应该没有性能问题。

          【讨论】:

          • 存在一点性能问题(没有隐藏此参数),但这不应该是决定因素。意图(你的第一点)更重要。
          • @Henk Holterman:当然,但这是一个非常小的性能问题。如果它是一个静态受保护函数,它可能是某种类型的辅助函数,因此它也已经在传入和/或返回数据。
          【解决方案5】:

          可能,但我会更进一步。

          在这些情况下,您真的想问问自己,该方法是否仍然属于该类型。如果此方法不依赖于类型的数据,为什么它是该类型的一部分?有没有更好或更合适的类型?您是否有其中几个,可能分散在几个不同的类型中,可以在逻辑上组合在一起?

          【讨论】:

            【解决方案6】:

            这实际上取决于。您的方法是否使用任何实例数据是此方法的实现细节。如果它是私有的,则可以根据需要将其设为静态。但是,如果它可以在您的类之外可见(例如,它是受保护的方法),您应该首先考虑接口,并且只有在该方法访问对象数据没有意义时才将其设为静态。

            【讨论】:

              猜你喜欢
              • 2012-03-14
              • 1970-01-01
              • 2013-03-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-15
              相关资源
              最近更新 更多