1. 程式人生 > >C#靜態類的繼承等疑惑解答

C#靜態類的繼承等疑惑解答

文章本人原創,請勿隨意貼上轉載

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.靜態類中可以有例項成員嗎?

靜態類中不允許有例項成員,只允許有靜態方法  靜態建構函式 靜態成員。