Guidelines for when to use Static class over instance class?
Possible Duplicate:
When to Use Static Classes in C#
有人能提供什么时候创建的指导方针、标准检查点吗?静态类以及何时创建实例类。
基本上,我在编写代码时看到过很多次,使用静态类和方法可以完成相同的事情,我对许多事情感到困惑。
到目前为止,我知道以下检查点:
如果考虑中的对象在整个应用程序中只能存在一次,那么它将处于"静态"状态。
如果一个方法中没有使用任何字段变量,那么它可以是静态方法。
在我看来,状态是最好的区分因素。
如果您的类没有状态,只是一系列相关的方法,当给定一个输入时,这些方法将为您提供一个输出,那么您就有了一个优秀的静态类候选者。
如果您的类将得到输入,然后将其存储,或者以其他方式保持其当前状态,那么您就有了一个常规类。
此外,如果您的类将被声明为
简而言之:
- 如果是一袋方法或者没有状态
- 它不是抽象的、继承的或实现的接口
那么很有可能它是一个静态类:)
希望有帮助。
nb(根据下面的机敏评论)state是指存储一些表示对象当前事务状态的数据的类。可能是类级变量或属性。
如果它应该是一个函数集合,那么您将使用静态类。像:
1 2 | int result = calculation.add(int p1,int p2); float result = calculation.divide(int p1,int p2); |
在静态类上不能这样说:
1 |
因为它们不能被实例化。它们只能包含静态成员。
从这里拿走。
但是如果它是一个代码的成员,比如树中的苹果,那么您将使用实例类。每个苹果都有自己的特点,但这并不能改变它是一个苹果的事实。它是树的一部分,包含了苹果的多个实例。
1 2 3 4 5 6 7 |
等。
你可以看看这里。
静态类最好用于创建将被调用的函数库。正则类用于创建可以被操作的对象。它允许你封装一组代码的关系。例如,欧几里得空间中的一个点。您可以声明两个浮动并单独跟踪它们,或者您可以使用下面的契约来声明点如何工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Point{ float x; float y; Point(float x, float y); Point halfway(Point other); Line lineThrough(Point other); float distanceFrom(Point other); ... } |
这有点多余,但是它允许你在将来写更多的可读代码——更好地保持你所有的数据封装和设计,使你成为一个更好的程序员,因为一条线通过两点的方程是从
1 2 | float slope = (xone-xtwo)/(yone-ytwo); float yintercept = yone-slope*xone; |
到
1 2 3 |
对不起,伪代码是有点Java通知。我脑子里有爪哇。