C# 中有很多靜態類的例子,例如 Console 類就是一個靜態類。
如果希望構建一個 helper 工具類,考慮使用靜態類。
原因是:helper 工具類會使用頻繁,如果是非靜態的,則每次使用都要在堆上分配空間。
如果是做成靜態類,則只需要一次分配空間,之後,該類就永遠駐留在載入堆上,這樣既省空間又省時間。
static 關鍵字只能用於類而不能用於結構,這是因為 CLR 永遠允許值型別範例化。
型別中的靜態成員(欄位和屬性)是全域性的,屬於這個型別。如果這個型別有多個範例,則它們共用其中的靜態成員(即一個範例更改了該靜態變數的值,所有其他範例都會受到影響)。
靜態類和範例類的靜態成員駐留在載入堆中,不受 GC 控制。
靜態類中的所有方法必須都是靜態方法,所有成員(欄位或屬性)必須都是靜態的。
靜態類的使用不需要新建範例。靜態類直接從 System.Object 派生。
靜態類的主要功能如下:
-
僅包含靜態成員,函數成員和變數都必須有 static 修飾。
-
不能被範例化。
-
是密封的,編譯器編譯時自動生成 sealed 標記。
-
不能包含範例建構函式。
因此建立靜態類與建立僅包含靜態成員和私有建構函式的類大致一樣。私有建構函式阻止類被範例化。
使用靜態類的優點在於,編譯器能夠執行檢查以確保不致偶然地新增範例成員。編譯器將保證不會建立此類的實利。
靜態類是密封的,因此不可被繼承。靜態類不能包含建構函式,但仍可宣告靜態建構函式以分配初始值或設定某個靜態狀態。