2011-04-27 64 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;} 
    } 

}