C#中成员初始化顺序
生活随笔
收集整理的這篇文章主要介紹了
C#中成员初始化顺序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#中成員初始化順序
http://blog.csdn.net/huangcailian/article/details/25958967
一、成員初始化整體順序
1.成員賦值初始化先于構造函數; 2.成員賦值初始先從子類再到基類; 3.構造函數初始化先從基類再到子類; 4.靜態成員初始化優先于實例成員初始化;二、對類型靜態成員構造的大致過程
1.分配靜態成員的內存空間,此時空間存儲數據為0; 2.執行類的靜態成員的初始化語句; 3.執行類的靜態構造函數。三、對類型實例成員構造的大致過程
1.分配實例成員的內存空間,此時空間存儲數據為0; 2.執行子類實例成員初始化語句; 3.執行基類實例化成員初始化語句; 4.執行基類構造函數; 5.執行子類構造函數;四、同時有靜態成員和實例成員的大致構造過程
1.執行子類靜態成員初始化語句; 2.執行子類靜態構造函數; 3.執行子類實例成員初始化語句; 4.執行基類靜態成員初始化語句; 5.執行基類靜態構造函數; 6.執行基類實例成員初始化語句; 7.執行基類實例構造函數; 8.執行子類實例構造函數。五、說明
1.C#中靜態構造函數都是私有的,不能為其添加訪問修飾符; 2.只有創建類的實例或調用任何靜態成員時才能激發靜態構造函數; 3.調用一個未初始化類的靜態成員時,他會先去初始化這個類的靜態成員和靜態構造函數。 using System; using System.Diagnostics; using System.Text;class Test {class CTEST{}class SINGLE_TON{public static float sfx = 1; //1public static CTEST ot = new CTEST();//2private float fx = 13;static private double dx = 100.03;//3private string s = "hello";//public static readonly SINGLE_TON Instance = new SINGLE_TON();//加上這句就比較特殊了,這里雖有構造操作,但必須等到所有成員初始完成后才會進行public static int x;//22public string str;protected int y = 123;public SINGLE_TON(){Console.WriteLine("private single_ton");}//靜態構造函數最會多只會被調用一次,在首次訪問類的靜態成員變量或生成類的實例時被調用。static SINGLE_TON(){Console.WriteLine("static single_ton");}public void dosth(){Console.WriteLine("do some thing");}}static void Main(){//首次訪問類的靜態變量,編譯器首先會對所有有初始值的靜態變量進行賦值操作,如1和2,3處。//然后調用靜態構造函數。//不會對非靜態變量進行賦值。不過它們都有默認值,數值類型為0,引用類型為nullint x = SINGLE_TON.x;// SINGLE_TON.Instance.dosth();// SINGLE_TON.Instance.dosth();// SINGLE_TON.Instance.dosth();//生成類實例時,編譯器首先會對所有有初始值的靜態變量進行賦值操作,如1和2,3處。//然后調用靜態構造函數。//然后才對有初始值的非靜態變量進行賦值。//然后調用普通構造函數。SINGLE_TON sg = new SINGLE_TON();}//輸出結果: // private single_ton // static single_ton // do some thing // do some thing // do some thing }?
posted on 2016-11-03 21:34 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C#中成员初始化顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】 不适用Sqrt函数开方,精度小于
- 下一篇: C++函数内存占用