亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#類繼承中構造函數的執行序列示例詳解

2019-10-29 19:59:19
字體:
來源:轉載
供稿:網友

前言

大家都知道類的繼承規則:

1、派生類自動包含基類的所有成員。但對于基類的私有成員,派生類雖然繼承了,但是不能在派生類中訪問。

2、所有的類都是按照繼承鏈從頂層基類開始向下順序構造。最頂層的基類是System.Object類,所有的類都隱式派生于它。只要記住這條規則,就能理解派生類在實例化時對構造函數的調用過程。

不知道大家在使用繼承的過程中有木有遇到過調用構造函數時沒有按照我們預期的那樣執行呢?一般情況下,出現這樣的問題往往是因為類繼承結構中的某個基類沒有被正確實例化,或者沒有正確給基類構造函數提供信息,如果理解在對象生命周期的這個階段發生的事情,將更利于解決此類問題。

為了實例化派生的類,必須先實例化它的基類。而要實例化這個基類。又必須要實例化這個基類的基類,這樣一直到實例化System.Object(所有類的跟)為止,結果無論使用什么構造函數實例化一個類,總是首先調用System.Object.Object() .

下面一個示例演示執行順序:

基類:

public class MyBaseClass {  public MyBaseClass()  {   Console.WriteLine("I am MyBaseClass()");  }   public MyBaseClass(int i)  {   Console.WriteLine("I am MyBaseClass(int i)");  }             }

派生類:

public MyDerivedClass()  {   Console.WriteLine("I am MyDerivedCalss()");  }  public MyDerivedClass(int i)  {   Console.WriteLine("I am MyDerivedClass(int i)");  }  public MyDerivedClass(int i,int j)  {   Console.WriteLine("I am MyDerivedClass(int i,int j)");  }

接下來我們在Main函數中以不帶參數的構造函數實例化MyDerivedClass:

 MyDerivedClass myObj = new MyDerivedClass();

運行程序,控制臺輸出如下:

C#,類繼承,構造函數,執行序列

從結果可以看出,執行順序先是基類構造的函數,接下來才是派生類的構造函數,即

1.執行System.Object.Object()構造函數(Object比較特殊,所有類的基類,一般可以不考慮,但是得知道它也是被執行了的)

2.執行MyBaseClass.MyBaseClass()構造函數

3.執行MyDerivedClass.MyDerivedClass()構造函數

如果我們以帶一個參數的構造函數實例化MyDerivedClass:

 MyDerivedClass myObj = new MyDerivedClass(4);

運行程序,控制臺輸出如下:

C#,類繼承,構造函數,執行序列

可以看出執行順序如下:

1.執行System.Object.Object()構造函數

2.執行MyBaseClass.MyBaseClass()構造函數

3.執行MyDerivedClass.MyDerivedClass(int i)構造函數

同理如果我們以帶兩個參數的構造函數實例化MyDerivedClass

 MyDerivedClass myObj = new MyDerivedClass(4,8);

運行程序,控制臺輸出如下:

C#,類繼承,構造函數,執行序列

可以看出執行順序如下:

1.執行System.Object.Object()構造函數

2.執行MyBaseClass.MyBaseClass()構造函數

3.執行MyDerivedClass.MyDerivedClass(int i,int j)構造函數

大多數情況下這個都能正常工作,但是有時我們需要對發生的事件進行更多的控制。比如我們想得到如下所示的執行順序:

1.執行System.Object.Object()構造函數

2.執行MyBaseClass.MyBaseClass(int i)構造函數

3.執行MyDerivedClass.MyDerivedClass(int i,int j)構造函數

使用這個順序,可以把使用int i參數的代碼放到MyBaseClass(int i)中,MyDerivedClass(int i,int j)只需要處理int j(假設int i參數在MyBaseClass和 MyDerivedClass里含義是一樣的)

為此,只需要使用構造函數初始化器,把代碼放到方法定義的冒號后面,如在派生類的構造函數中指定所使用的基類的構造函數,如下所示:

 public MyDerivedClass(int i,int j) : base(i)  {   Console.WriteLine("I am MyDerivedClass(int i,int j)");  }

其中,base關鍵字指定在實例化過程中使用具有指定參數的構造函數。這里使用了int參數,其值通過i傳遞給MyDerivedClass構造函數,所以將使用MyBaseClass(int i) ,這樣就不會調用MyBaseClass()了,我們重新執行下前面兩個參數的實例化代碼,就可以看出執行結果確實如此:

C#,類繼承,構造函數,執行序列

除了base關鍵字,還可以使用this關鍵字用作構造函數初始化器,這個關鍵字指定在調用指定的構造函數前,實例化過程對當前類使用非默認的構造函數。例如:

 public MyDerivedClass():this(5,6)  {   Console.WriteLine("I am MyDerivedCalss()");  }

使用MyDerivedCalss()構造函數實例化,執行順序是:

C#,類繼承,構造函數,執行序列

1.執行System.Object.Object()構造函數

2.執行MyBaseClass.MyBaseClass(int i)構造函數

3.執行MyDerivedClass.MyDerivedClass(int i,int j)構造函數

4.執行MyDerivedClass.MyDerivedClass()構造函數

總之呢,無論派生類上使用什么樣的構造函數(默認的or不是默認的),除非明確指定(如使用base關鍵字),否則就先調用用基類的默認構造函數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线观看| 亚洲国产欧美精品| 亚洲精品日韩丝袜精品| 亚洲国产天堂久久国产91| 精品久久久久久亚洲国产300| 亚洲毛片一区二区| 欧洲日韩成人av| 欧美精品videossex88| 亚洲美女性生活视频| 久久久久久久久久av| 精品日韩视频在线观看| 亚洲天堂久久av| 日韩免费av片在线观看| 欧美日韩激情小视频| 亚洲成人精品久久久| 中文字幕亚洲无线码在线一区| 日韩欧美国产中文字幕| 国产精品入口尤物| 亚洲第一综合天堂另类专| 国产精品入口尤物| 91国产精品视频在线| 555www成人网| 欧美激情欧美狂野欧美精品| 日韩在线国产精品| 日韩a**站在线观看| 少妇高潮 亚洲精品| 亚洲xxxx妇黄裸体| 日韩中文字幕网址| 91国产精品视频在线| 成人网页在线免费观看| 国产成人在线播放| 欧美成人黑人xx视频免费观看| 日韩av网站大全| 欧美性猛交xxxx富婆| 国产日韩欧美视频在线| 国产成人欧美在线观看| 欧美一级黄色网| 精品国产老师黑色丝袜高跟鞋| 日韩精品小视频| 日韩中文字幕在线视频播放| 成人黄色大片在线免费观看| 北条麻妃在线一区二区| 日韩欧美在线播放| 午夜美女久久久久爽久久| 日韩动漫免费观看电视剧高清| 亚洲аv电影天堂网| 欧美一区二区三区四区在线| 乱亲女秽乱长久久久| 久久精视频免费在线久久完整在线看| 2024亚洲男人天堂| 成人激情黄色网| 一本色道久久88亚洲综合88| 亚洲人免费视频| 久久99视频免费| 国产玖玖精品视频| 91精品国产综合久久香蕉最新版| 人体精品一二三区| 精品日韩中文字幕| 色老头一区二区三区在线观看| 欧美国产亚洲视频| 国产精品女人久久久久久| 亚洲国产精品一区二区久| 欧美激情中文网| 亚洲精品自拍偷拍| 欧洲中文字幕国产精品| 欧美超级乱淫片喷水| 国产视频精品xxxx| 4444欧美成人kkkk| 在线观看不卡av| 日韩精品中文字| 国产一区二区三区四区福利| 欧美日韩一二三四五区| 国模精品视频一区二区三区| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精品国产欧美| 久久99精品视频一区97| 亚洲国产精品热久久| 97在线视频免费观看| 亚洲男子天堂网| 日韩精品在线第一页| 久久久精品国产网站| 久久中文字幕在线视频| 精品成人69xx.xyz| 国产精品久久99久久| 法国裸体一区二区| 欧美精品一二区| 国产精品高潮在线| 91av免费观看91av精品在线| 国产精品午夜一区二区欲梦| 国模私拍一区二区三区| 欧美高清一级大片| 国产日韩欧美综合| 亚洲国产精品网站| 这里只有精品在线播放| 国产亚洲成av人片在线观看桃| 国产精品夜色7777狼人| 日韩精品中文字幕视频在线| 在线播放日韩专区| 91av在线视频观看| 精品欧美国产一区二区三区| 国产精品99久久久久久久久| 国产成人精品综合| 欧美色视频日本版| 午夜精品福利电影| 日本一区二区三区四区视频| 91av在线国产| 欧美高清视频一区二区| 国产视频久久久| 免费不卡欧美自拍视频| 欧美激情国内偷拍| 亚洲视频第一页| 欧美精品亚州精品| 亚洲一区二区三区777| 久久久久久久一区二区| 欧美成人激情视频| 久久免费视频这里只有精品| 亚洲色图美腿丝袜| 日本高清久久天堂| 成人国内精品久久久久一区| 亚洲色图35p| 亚洲福利在线观看| www.欧美精品| 91久久精品国产91久久性色| 欧美大片免费观看| 久久亚洲私人国产精品va| 日本一区二三区好的精华液| 中文字幕精品一区二区精品| 久久免费在线观看| 日韩精品欧美国产精品忘忧草| 韩国国内大量揄拍精品视频| 欧美在线不卡区| 国产精品视频一区二区三区四| 欧美性xxxxxx| 在线a欧美视频| 成人黄色在线播放| 日韩高清中文字幕| 国产成人久久久精品一区| 午夜精品福利在线观看| 国产欧美日韩免费| 亚洲欧洲视频在线| 伊人伊成久久人综合网站| 国产精品白嫩美女在线观看| 欧美日韩免费在线观看| 亚洲国产天堂久久国产91| 亚洲影院色在线观看免费| 亚洲国产欧美一区二区三区久久| 一区二区三区国产在线观看| 亚洲美女在线看| 久久精品成人一区二区三区| 亚洲网在线观看| 日韩的一区二区| 不卡伊人av在线播放| 尤物yw午夜国产精品视频明星| 亚洲国产91精品在线观看| 久久99久久亚洲国产| 成人h片在线播放免费网站| 欧美肥老太性生活视频| 亚洲国产精彩中文乱码av在线播放| 国产91在线播放精品91| 91精品视频在线播放| 日韩av高清不卡| 欧美激情18p| 欧美中文字幕第一页| 清纯唯美亚洲激情|