[C#] static 修飾詞-靜態類別和靜態類別成員

摘要:[C#] static 修飾詞

靜態類別和靜態類別成員 (C# 程式設計手冊)

 

靜態類別和類別成員可用來建立資料和函式,讓您無須建立類別的執行個體,即可存取這些資料和函式。靜態類別成員可將資料和行為分隔開來,獨立於任何物件識別以外,也就是說,無論物件受到什麼影響,資料和函式都不會變更。當類別中沒有資料或行為相依於物件識別時,就可以使用靜態類別。

將類別宣告為靜態時,表示其中只包含靜態成員。您不能使用 new 關鍵字建立靜態類別的執行個體。當載入包含靜態類別的程式或命名空間時,.NET Framework Common Language Runtime (CLR) 也會自動載入這些類別。

請使用靜態類別來包含未與特定物件關聯的方法。例如,您通常會需要建立一組方法,這些方法既不會對執行個體資料執行任何動作,也不會與程式碼中的特定物件產生關聯。這時就可以使用靜態類別來存放這些方法。

靜態類別的主要特色如下:

因此,建立靜態類別就像是建立只包含靜態成員和私用建構函式 (Private Constructor) 的類別。私用建構函式可讓類別避免執行個體化。

使用靜態類別的好處是,編譯器可進行檢查,確定不會在不小心的情況下加入執行個體成員。編譯器將可確保這個類別不會建立執行個體。

靜態類別是密封的,因此無法繼承。靜態類別無法包含建構函式,不過您仍可以宣告靜態建構函式,以指定初始值或設定靜態狀態。如需詳細資訊,請參閱靜態建構函式 (C# 程式設計手冊)

假設現在有一個類別 CompanyInfo,其中包含下列方法,可取得公司名稱和地址等資訊。

class CompanyInfo
{
    public string GetCompanyName() { return "CompanyName"; }
    public string GetCompanyAddress() { return "CompanyAddress"; }
    //...
}

這些方法並不需要附加至類別的特定執行個體。因此,您不需要為這個類別建立執行個體,而可以將其宣告為靜態類別,如下所示:

static class CompanyInfo
{
    public static string GetCompanyName() { return "CompanyName"; }
    public static string GetCompanyAddress() { return "CompanyAddress"; }
    //...
}

未與特定物件關聯的方法可以使用靜態類別當做組織單位。此外,靜態類別也可以使實作 (Implementation) 更簡易也更快速,因為您並不需要建立物件,即可呼叫其方法。在類別內透過有意義的方式組織方法會很有用,就像 System 命名空間中的 Math 類別一樣。

即使沒有建立類別的執行個體,您還是可以在類別上呼叫靜態方法、欄位、屬性或事件。如果類別建立了任何執行個體,這些執行個體並不能用來存取靜態成員。靜態欄位和事件只會有一個複本存在,而靜態方法和屬性也只能存取靜態欄位和靜態事件。靜態成員常用來代表不會隨物件狀態改變的資料或計算,例如,數學函式庫可能會包含靜態方法來計算正弦函數 (Sine) 和餘弦函數 (Cosine)。

靜態類別成員的宣告方式是在該成員的傳回型別前面加上 static 關鍵字,例如:

public class Automobile
{
    public static int NumberOfWheels = 4;
    public static int SizeOfGasTank
    {
        get
        {
            return 15;
        }
    }
    public static void Drive() { }
    public static event EventType RunOutOfGas;

    //other non-static fields and properties...
}

第一次存取靜態成員以及呼叫靜態建構函式 (如有呼叫) 之前,會先初始化靜態成員。若要存取靜態類別成員,請使用類別名稱 (而非變數名稱) 來指定成員的位置。例如:

Automobile.Drive();
int i = Automobile.NumberOfWheels;

內容轉自 http://msdn.microsoft.com/zh-tw/library/79b3xss3(VS.80).aspx