CLR via C#學習筆記-第六章-靜態類
阿新 • • 發佈:2018-10-07
eth clas cme rop () 接口 bstr field icm
6.4 靜態類
有一些永遠不需要實例化的類,例如Console,Math等。
這些類只有static成員。事實上,這種類的唯一作用就是組合一組相關的成員。
例如Math類就定義了一組執行數學運算的方法。
在C#中,要用static關鍵字定義不可實例化的類。該關鍵字只能用於類,不能用於結構(值類型)。
因為CLR總是允許值類型實例化,這是沒辦法阻止的。
C#編譯器對靜態類進行了如下限制。
- 靜態類必須直接從街壘System.Object派生,從其他任何基類派生都沒有意義。繼承只適用於對象,而你不能創建靜態類的實例。
- 靜態類不能實現任何接口,只有使用類的實例時,才可調用類的接口方法。
- 靜態類只能定義靜態成員(字段,方法,屬性,事件),任何實例成員都會導致編譯器報錯。
- 靜態類不能作為字段、方法參數或局部變量使用,因為他們都代表引用了實例的變量,不允許,會報錯。
下面是一個定義了靜態成員的靜態類。代碼雖然能通過編譯,有一個警告,但該類沒有做任何有意義的事情。
public static class AStaticClass { public static void AStaticMethod(){} public static String AStaticProperty() { get{return s_AStaticField;} set{s_AStaticField=value;} }private static String s_AStaticField; public static event EventHandler AStaticEvent; }
使用關鍵字static定義類,將導致C#編譯器將該類標記為abstract和sealed。
此外,編譯器不在類型中生成實例構造器方法。
CLR via C#學習筆記-第六章-靜態類