7

我有一个一般性问题...我应该什么时候使用静态类或静态方法?...我知道可以在不实例化的情况下调用静态方法的想法...而静态类只能用于静态方法?...但是它是否也存在任何性能问题......以及何时应该优先使用它们而不是实例方法和类?..如果有人可以简单地提及我应该何时选择使用它们以及何时应该避免它们?

4

4 回答 4

6

我认为以下两个链接为您正在寻找的内容提供了明确的答案。看看他们:

对于静态类:

何时在 C# 中使用静态类

对于静态方法:

什么时候适合使用静态方法?Jon Skeet [the Guru] 回答了这个:o))

于 2010-07-14T23:23:37.300 回答
4

要记住的一件事是静态方法的测试含义。静态方法“密封”了很多接缝。接缝是您可以在不更改生产代码的情况下更改行为的地方;示例是子类化或链接到测试库。由于静态方法是在编译时解析的并且不是动态绑定的,因此您不能放入测试对象并更改静态方法的行为方式。测试那个类会很麻烦。

对于诸如数学函数之类的事情,您可以肯定静态方法是可以的,但您几乎可以肯定不想要连接到数据库的静态方法。想想你将如何测试使用你正在考虑制作的静态方法的代码

这是来自谷歌测试博客的一个很好的链接:静态方法是可测试性的死亡

于 2010-07-15T01:07:17.723 回答
1

我认为一般的经验法则可能是实用程序函数应该是静态的。一个典型的例子是在任何 oop 语言中 Math 类如何包含像 sqrt() 这样的静态方法,因为实际上不需要像单独的 Math 对象这样的东西。

至于静态类,您应该考虑保持一种状态形式的类,通常像会话信息,无论通过应用程序的确切路径如何,都需要它,并且您通常需要其中一个。(想想你的浏览器,可能总是保留 1 个类似 cookie-jar 的类)

静态变量是全局变量的不那么邪恶的双胞胎(它们保持它们的值,但它们的范围仅限于一个函数),它们通常对于保持某种形式的状态(例如数据缓存)或枚举应该是有用的东西唯一,但其编号在您的函数或应用程序范围之外不是很重要(例如,对您自己的 debug("..") 或 profile() 函数中的调试或分析调用进行编号)

基本上,只有在您非常确定以“正确”的类似 OOP 的方式做事会导致创建怪物时才使用它们中的任何一个。

于 2010-07-15T00:08:36.117 回答
0

据我了解,这是没有意义的创建类的对象来调用操作或者该类在应用程序中是常见的。比如在C#中,Console类是密封的(所以你不能创建一个对象并继承它,这样做真的没有意义)。但是,专业人士会更好地为您解释。

于 2010-07-15T00:12:49.747 回答