国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#對象初始化順序實例分析

2020-01-24 01:46:12
字體:
來源:轉載
供稿:網友

本文實例分析了c#對象初始化順序。分享給大家供大家參考。具體如下:

using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 {  class Program {    static void Main(string[] args) {      A a = new B();      Console.ReadLine();    }  }  class A {    //調用到這個構造函數時:x=1,y=0    public A() {      //該函數在B類中被重載,因此輸出 x=1,y=0      Console.WriteLine("在A類的構造函數中");      PrintFields();    }    public virtual void PrintFields() { }  }  class B : A {    //派生類變量/靜態成員的執行順序優于基類    //先變量,因此,x=1,y=0    int x = 1;    int y;    //后構造函數,此時,先調用基類構造函數    public B() {      //運行到這里時,A類構造函數已經執行完畢      y = -1;      Console.WriteLine("在B類的構造函數中");      //此時 x=1,y=-1      PrintFields();    }    public override void PrintFields() {      Console.WriteLine("x={0},y={1}", x, y);    }  }}

這里備忘一下c#對象初始化順序及C++對象初始化順序:

C#對象初始化

1. 先變量后構造函數。變量先被初始化,然后構造函數被執行

2. 先靜態化后實例化。當一個類被訪問時,靜態變量和構造函數最先被初始化.接著是對象的實例化變量和構造函數被初始化

3. 先派生類后基類。對于變量和靜態構造函數,派生對象在基對象之前被初始化.比如C類派生自B類,B類派生自A類,那么變量和靜態構造函數被初始化次序是C-B-A.

4. 除了實例構造函數。對于實例構造函數,基類構造函數在派生類構造函數之前執行,實例構造函數被執行次序是A-B-C.

5. 不要假定變量的次序。Fields依據它們在源文件中的聲明的順序依次初始化.然而,自從程序員和工具可以隨意安排變量的聲明后,你不應該在依靠變量任何特別的次序初始化

6. 對虛方法用兩個階段的構建。避免從一個構造器調用虛方法. 如果在初始化一個對象時需要調用一些虛方法,應在完整構造該對象的地方使用兩階段的構建,并隨后調用已構造對象的初始化方法。

C++構造函數調用順序

1. 如果類里面有成員類,成員類的構造函數優先被調用;

2. 創建派生類的對象,基類的構造函數優先被調用(也優先于派生類里的成員類);

3. 基類構造函數如果有多個基類,則構造函數的調用順序是某類在類派生表中出現的順序而不是它們在成員初始化表中的順序;

4. 成員類對象構造函數如果有多個成員類對象,則構造函數的調用順序是對象在類中被聲明的順序而不是它們出現在成員初始化表中的順序;

5. 派生類構造函數,作為一般規則派生類構造函數應該不能直接向一個基類數據成員賦值而是把值傳遞給適當的基類構造函數,否則兩個類的實現變成緊耦合的(tightly coupled)將更加難于正確地修改或擴展基類的實現。(基類設計者的責任是提供一組適當的基類構造函數)

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 多伦县| 阿巴嘎旗| 新昌县| 茌平县| 灌阳县| 重庆市| 平和县| 淳安县| 肇庆市| 佛山市| 株洲县| 湘潭市| 藁城市| 紫阳县| 琼海市| 响水县| 吉木乃县| 天等县| 育儿| 沙洋县| 清徐县| 广州市| 云梦县| 兴宁市| 毕节市| 达尔| 崇信县| 建宁县| 仁化县| 天长市| 南汇区| 四子王旗| 黑水县| 黄石市| 杨浦区| 湄潭县| 黄浦区| 西乌珠穆沁旗| 安溪县| 行唐县| 洱源县|