静态修饰符在面向对象编程中的用途是什么?

时间:2011-04-27 11:35:50

标签: c# oop design-patterns static static-methods

在我的一次采访中,我被问到static修饰符的含义。我回答告诉采访者,无法创建静态类的对象和其他有用的点。

但是访问者询问创建这样一个无法创建对象的类有什么用。基本上,他们问的是为什么首先需要static

我不确定如何回答这个问题。我应该怎么说?

6 个答案:

答案 0 :(得分:18)

面试官可能希望您讨论面向对象的设计和模式,而不是他们希望您背诵该特定修饰符的定义。这里真的没有正确的答案。纯粹主义者可能认为static是令人厌恶的。实用主义者可能会争辩说,它填补了“一切都是对象”抽象中的一个漏洞,允许您调用实用程序方法,实例化一个新对象只是为了调用它们是没有意义的。这个典型的例子是System.Math class

大多数程序员遵循的一般经验法则是,如果您正在操作的数据与对象的任何特定实例无关,那么将该字段/方法标记为静态可能是有意义的。否则,它应该是对象实例的常规成员。

MSDN documentation已经有了很好的解释:

  

使用static修饰符声明一个静态成员,该成员属于该类型本身而不是特定对象。 static修饰符可以与类,字段,方法,属性,运算符,事件和构造函数一起使用,但不能与索引器,析构函数或类以外的类型一起使用。有关详细信息,请参阅Static Classes and Static Class Members (C# Programming Guide)

static修饰符在C#中也有更多特定用途,例如定义扩展方法(只能在静态类中定义),定义互操作方法等。还值得注意的是所有静态类在C#中是sealed,因为没有构造函数,它们不能继承。

答案 1 :(得分:3)

静态不仅适用于类,成员也可以是静态的。使用静态的原因是提供实用程序类型的功能,实例化对象以使用它是没有意义的。例如。为什么要创建一个int才能使用int.Parse()

答案 2 :(得分:2)

您可以查看关于对象/类的状态的“静态”。

    如果您的类不需要为单个对象维护状态信息,而是为该类维护状态信息,则使用
  1. “static”。例子是静态变量。
  2. 另一件事是将一个类本身声明为静态,而在对象中无法实例化,您可以调用不需要自己的状态信息的静态方法。
  3. 其他人提供了一些有用的例子,我不会重申。

答案 3 :(得分:0)

参见http://msdn.microsoft.com/en-us/library/79b3xss3%28v=vs.80%29.aspx - 它解释了静态类的优点。

  

使用静态类的优点是编译器可以检查以确保不会意外添加实例成员。编译器将保证无法创建此类的实例。

答案 4 :(得分:0)

static修饰符表示类的成员属于类本身而不是类的实例。

即使创建了许多类的实例,也无法在应用程序中复制静态成员。

请参阅以下链接以获取更多信息Static Modifiers

使用静态成员查看以下示例类:

class myClass
{
    static int x = 5;
    static string name = "Ashraf";

    public int X 
    {
        get {return x;}
        set {x = value;}
    }

    public string name 
    {
        get {return name;}
        set {name = value;}
    }

}

答案 5 :(得分:-1)

Static classes在对外部数据进行操作时非常有用,并且不需要设置或检索其中的任何字段。