C#靜態類的繼承等疑惑解答
阿新 • • 發佈:2019-01-22
文章本人原創,請勿隨意貼上轉載
1.靜態類可以從靜態類中派生嗎?
靜態類不允許從靜態類中進行派生,也不允許從非靜態類中派生,靜態類必須從物件派生(個人覺得可能靜態類不允許繼承類),不允許有非靜態的建構函式。下面程式碼會報錯
public static class staFun { static staFun() { Console.WriteLine("this is staFun"); } } public static class staFunSon : staFun//靜態類不允許從靜態類中派生 { static staFunSon() { Console.WriteLine("this is staFunSon"); } staFunSon(int a)//靜態類不允許有非靜態建構函式 { } }
public class staFun { //下面的靜態建構函式無論是否註釋均報錯 //static staFun() //{ // Console.WriteLine("this is staFun"); //} } public static class staFunSon : staFun { static staFunSon() { Console.WriteLine("this is staFunSon"); } }
2.非靜態類的靜態建構函式會被子類繼承嗎?
非靜態類中的靜態建構函式不會被子類繼承,但為了對父類初始化,所以需要執行父類的建構函式。(注意繼承的概念:當類與類之間實現繼承的時候,子類可以將它的直接基類的所有成員當做自己的成員,除了類的靜態構造方法、例項構造方法和析構方法。)
3.靜態類初始化和不初始化直接呼叫有區別嗎?
當兩個類均含有靜態建構函式並互相繼承的時候,初始化後進行再進行呼叫和直接類名.靜態方法是有區別的
如果直接通過子類類名.父類方法進行呼叫父類方法,那麼子類中的靜態建構函式不會執行。直接對父類進行初始化然後執行父類的方法。如果對子類進行初始化,然後呼叫,vs會自動在後臺先對子類進行初始化,然後對父類初始化。
4.靜態類中可以有例項成員嗎?
靜態類中不允許有例項成員,只允許有靜態方法 靜態建構函式 靜態成員。