C 靜態類與非靜態類 靜態成員的區別

2022-01-13 05:20:17 字數 1543 閱讀 7322

靜態類

靜態類與非靜態類的重要區別在於靜態類不能例項化,也就是說,不能使用 new 關鍵字建立靜態類型別的變數。在宣告乙個類時使用static關鍵字,具有兩個方面的意義:首先,它防止程式設計師寫**來例項化該靜態類;其次,它防止在類的內部宣告任何例項欄位或方法。

靜態類是自c# 2.0才引入的,c# 1.0不支援靜態類宣告。程式設計師必須宣告乙個私有構造器。私有構造器禁止開發者在類的範圍之外例項化類的例項。使用私有構造器的效果與使用靜態類的效果非常相似。兩者的區別在於,私有構造器方式仍然可以從類的內部對類進行例項化,而靜態類禁止從任何地方例項化類,其中包括從類自身內部。靜態類和使用私有構造器的另乙個區別在於,在使用私有構造器的類中,是允許有例項成員的,而c# 2.0和更高版本的編譯器不允許靜態類有任何例項成員。使用靜態類的優點在於,編譯器能夠執行檢查以確保不致偶然地新增例項成員,編譯器將保證不會建立此類的例項。靜態類的另乙個特徵在於,c#編譯器會自動把它標記為sealed。這個關鍵字將類指定為不可擴充套件;換言之,不能從它派生出其他類。

靜態類的主要特性:

1:僅包含靜態成員。

2:無法例項化。

3:是密封的。

4:不能包含例項建構函式。

靜態成員

1:非靜態類可以包含靜態的方法、字段、屬性或事件;

2:無論對乙個類建立多少個例項,它的靜態成員都只有乙個副本;

3:靜態方法和屬性不能訪問其包含型別中的非靜態欄位和事件,並且不能訪問任何物件的例項變數;

4:靜態方法只能被過載,而不能被重寫,因為靜態方法不屬於類的例項成員;

5:雖然字段不能宣告為 static const,但const 欄位的行為在本質上是靜態的。這樣的字段屬於類,

不屬於類的例項。因此,可以同對待靜態字段一樣使用 classname.membername 表示法來訪問 const 字段;6:c# 不支援靜態區域性變數(在方法內部定義靜態變數)。

靜態建構函式

1:靜態類可以有靜態建構函式,靜態建構函式不可繼承;

2:靜態建構函式可以用於靜態類,也可用於非靜態類;

3:靜態建構函式無訪問修飾符、無引數,只有乙個 static 標誌;

4:靜態建構函式不可被直接呼叫,當建立類例項或引用任何靜態成員之前,靜態建構函式被自動執行,並且

只執行一次。

注意:

1:靜態類在記憶體中是一直有位置的;

2:非靜態類在例項化後是在記憶體中是獨立的,它的變數不會重複,在使用後會及時銷毀,所以不會出現未知

的錯誤。在c#中靜態成員是比較敏感的東西,在不是十分確認的情況下不要使用

使用選擇:

當定義的類不需要進行例項化時,我們使用靜態類;如果需要例項化物件,需要繼承等特性時,應該使用非靜態類,並且將統一使用的變數和方法設為靜態的,那麼所有例項物件都能訪問。

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...

C 類靜態成員與類靜態成員函式

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...