我有一个普遍的问题......我什么时候应该使用静态类或静态方法? 我知道可以在不实例化的情况下调用静态方法的想法......静态类只应该用于静态方法吗?...但是它是否也有任何性能问题......什么时候应该优先于实例方法和班级?如果有人可以简单地提及我何时应该选择使用它们以及何时应该避免使用它们?
答案 0 :(得分:6)
我认为以下两个链接为您所寻找的内容提供了明确的答案。看看他们:
对于静态类:
When to Use Static Classes in C#
对于静态方法:
When is it appropriate to use static methods?(Jon Skeet [大师]回答了这个问题:o))
答案 1 :(得分:4)
要记住的一件事是静态方法的测试含义。静态方法“密封”了很多seams。接缝是您可以在不更改生产代码的情况下更改行为的地方;示例是子类化或链接到测试库。由于静态方法在编译时被解析并且不是动态绑定的,因此您不能引入测试对象并改变静态方法的行为方式。测试该类将是一个拖累。
对于像数学函数这样的东西,你可以非常肯定静态方法是可以的,但你几乎肯定不会想要一个连接到数据库的静态方法。 考虑如何测试使用您正在考虑制作的静态方法的代码。
以下是Google测试博客的一个很好的链接:Static Methods are Death to Testability
答案 2 :(得分:1)
这里有一个先前的条目似乎是:When to use static classes in C#
我认为静态类用于保存要调用的函数或数据,而无需为其创建对象。如果我记得,实例化一个对象会把它放在内存中。并且暗示,非对象静态类不会进入内存?自从我参加理论课以来已经有一段时间了;(对不起。
答案 3 :(得分:1)
我认为一般的经验法则是效用函数应该是静态的。一个典型的例子是在任何oop语言中,Math类如何包含像sqrt()这样的静态方法,因为实际上不需要像单独的Math对象那样。
对于静态类,您应该考虑保持状态形式的类,通常类似于会话信息,无论通过应用程序传递的确切路径如何,您通常只需要一个。 (想想你的浏览器,可能总是保持1个类似jar的jar)
静态变量是全局变量中较不邪恶的双胞胎(它们保留其值,但其范围仅限于函数),这通常对于保持某种形式的状态(例如缓存数据)或枚举事物非常有用这应该是唯一的,但其编号在您的函数或应用程序范围之外并不是非常重要(例如,编写调试或分析来自您自己的debug(“..”)或profile()函数的哭声)
基本上,当你非常确定以“正确”的OOP方式做事会导致怪物的创造时,只使用它们中的任何一个。
答案 4 :(得分:0)
据我所知,当创建一个类的对象来调用一个动作或该类在应用程序中是常见的时候是没有意义的。例如,在C#中,Console类是密封的(因此你不能创建一个对象并继承它,并且没有任何意义去做)。但是,专业人士会更好地解释你。