关于C#:何时在实例类上使用静态类的指导原则?

Guidelines for when to use Static class over instance class?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When to Use Static Classes in C#

有人能提供什么时候创建的指导方针、标准检查点吗?静态类以及何时创建实例类。

基本上,我在编写代码时看到过很多次,使用静态类和方法可以完成相同的事情,我对许多事情感到困惑。

到目前为止,我知道以下检查点:

  • 如果考虑中的对象在整个应用程序中只能存在一次,那么它将处于"静态"状态。

  • 如果一个方法中没有使用任何字段变量,那么它可以是静态方法。


  • 在我看来,状态是最好的区分因素。

    如果您的类没有状态,只是一系列相关的方法,当给定一个输入时,这些方法将为您提供一个输出,那么您就有了一个优秀的静态类候选者。

    如果您的类将得到输入,然后将其存储,或者以其他方式保持其当前状态,那么您就有了一个常规类。

    此外,如果您的类将被声明为abstract,或者将从另一个类继承行为,或者从接口实现行为,那么您将离开静态类并拥有一个普通类。

    简而言之:

    • 如果是一袋方法或者没有状态
    • 它不是抽象的、继承的或实现的接口

    那么很有可能它是一个静态类:)

    希望有帮助。

    nb(根据下面的机敏评论)state是指存储一些表示对象当前事务状态的数据的类。可能是类级变量或属性。


    如果它应该是一个函数集合,那么您将使用静态类。像:

    1
    2
    int result = calculation.add(int p1,int p2);
    float result = calculation.divide(int p1,int p2);

    在静态类上不能这样说:

    1
    Calculation mycalculator = new Calculation();

    因为它们不能被实例化。它们只能包含静态成员。

    从这里拿走。

    但是如果它是一个代码的成员,比如树中的苹果,那么您将使用实例类。每个苹果都有自己的特点,但这并不能改变它是一个苹果的事实。它是树的一部分,包含了苹果的多个实例。

    1
    2
    3
    4
    5
    6
    7
    Apple apple1 = new Apple();
    apple1.color = green;
    apple1.age = newborn;
    apple1.fallfromtree(speed);

    Apple apple2 = new Apple();
    apple2.color = red;

    等。

    你可以看看这里。


    静态类最好用于创建将被调用的函数库。正则类用于创建可以被操作的对象。它允许你封装一组代码的关系。例如,欧几里得空间中的一个点。您可以声明两个浮动并单独跟踪它们,或者您可以使用下面的契约来声明点如何工作。

    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
    Point p1 = new Point(xone, yone);
    Point p2 = new Point(xtwo, ytwo);
    Line linethrough = p1.lineThrough(p2);

    对不起,伪代码是有点Java通知。我脑子里有爪哇。