2011-04-27 62 views
12

在我的一次采访中,我被问到static修饰符是什么意思。我回答告诉面试官,静态类的对象不能被创建和其他有用的点。静态修饰符在面向对象编程中的用途是什么?

但是面试官问什么是创建这样一个类,其对象不能创建的用法。基本上,他们问为什么首先需要static

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

+2

我会说,有作为面向对象编程“静态”没有这样的事。一些支持面向对象的语言也支持静态。我可能不会得到这份工作。 – 2011-09-15 01:22:16

回答

17

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

一般的经验法则,大多数程序员遵循的是,如果你在工作中的数据不与对象的任何特定实例相关联的,它可能是有道理的,被标记为静态的字段/方法。否则,它应该可能是对象实例的常规成员。

MSDN documentation已经有一个很好的解释:

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

static改性剂还具有在C#更具体的用途,如定义扩展方法(它只能内部静态类的定义),定义互操作的方法等,这也是值得注意的是所有的静态类sealed在C#中,因为没有构造函数,它们不能被继承。

0

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

使用静态类的好处是编译器可以检查以确保没有实例成员被意外添加。编译器将保证不能创建这个类的实例。

+0

不完全正确。 'static'可以应用于C#中的类。我不知道细节,但可以推测这是类比静态成员的,因为静态类每次都是一次,可能是每个AppDomain。 – 2011-04-27 11:40:31

+0

您也可以将类标记为'static'。然后不能创建它的任何实例。 – CodesInChaos 2011-04-27 11:40:42

+0

不知道。我已经更新了我的答案。 – ThiefMaster 2011-04-27 11:42:28

-1

Static classes当他们对外部数据进行操作,并不需要设置或检索他们的任何字段(S)是有用的。

+0

有静态字段..... – 2011-04-27 11:39:35

+0

只能在静态类中定义扩展方法。 – CodesInChaos 2011-04-27 11:41:31

+0

静态字段可以用于非静态类。 – lnu 2011-04-27 11:47:37

3

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

2

您可以查看关于对象/类别的状态的“静态”。当你有一个类,它并不需要维护状态信息单个对象,而是状态信息保持类

  1. “静”字。例子是静态变量。
  2. 另一件事是声明一个类本身作为静态的地方在对象不能实例化,而不是你可以调用静态方法,它不需要有它自己的状态信息。

其他人已经给出了一些有用的例子,我不会重申。

0

静态修饰符意味着该类的成员属于类本身,而不属于该类的实例。

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

请参阅以下链接了解更多信息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;} 
    } 

}