【发布时间】:2011-06-13 06:56:51
【问题描述】:
我有一个不依赖于类的任何成员变量的成员函数。 (在我的例子中,这个类是一个 ASP.Net 页面)
这个函数是受保护的,我在这个类之外不需要它。它的唯一目的是从给定对象构建 URL。
如果我的所有函数不依赖于类,我是否应该将它们设为静态,即使它们没有在该类之外使用? 是否有任何原因,例如性能或可维护性?
【问题讨论】:
标签: c# asp.net static static-methods
我有一个不依赖于类的任何成员变量的成员函数。 (在我的例子中,这个类是一个 ASP.Net 页面)
这个函数是受保护的,我在这个类之外不需要它。它的唯一目的是从给定对象构建 URL。
如果我的所有函数不依赖于类,我是否应该将它们设为静态,即使它们没有在该类之外使用? 是否有任何原因,例如性能或可维护性?
【问题讨论】:
标签: c# asp.net static static-methods
【讨论】:
我不能说我对性能有足够的了解,但我听说如果它不依赖于类成员,将其设为静态是个好主意。通常它为您提供了不必浪费分配的好处,以防您只需要该方法,但由于它就在您的类中,您可能已经在使用对象的实例。我会把它设为静态的,但在你的情况下,我不知道是否有很大的不同(从编码的角度来看)。
【讨论】:
如果您将方法设为静态,则无需实例化类即可使用它。这会更快。另外,如果它是静态的,我发现它会使代码更短。
我不认为静态有任何性能问题,如果有什么更快的话。想想新版本的 .net 中出现的所有扩展方法。它们都是静态的!
【讨论】:
最好将不与成员数据交互的函数设为静态。它只是帮助描述函数如何与其环境交互。不过应该没有性能问题。
【讨论】:
可能,但我会更进一步。
在这些情况下,您真的想问问自己,该方法是否仍然属于该类型。如果此方法不依赖于类型的数据,为什么它是该类型的一部分?有没有更好或更合适的类型?您是否有其中几个,可能分散在几个不同的类型中,可以在逻辑上组合在一起?
【讨论】:
这实际上取决于。您的方法是否使用任何实例数据是此方法的实现细节。如果它是私有的,则可以根据需要将其设为静态。但是,如果它可以在您的类之外可见(例如,它是受保护的方法),您应该首先考虑接口,并且只有在该方法访问对象数据没有意义时才将其设为静态。
【讨论】: