c#構(gòu)造初始化的順序淺析
這個(gè)很基礎(chǔ)的知識,但我至今才意識到它。想想也很失敗。
直接上代碼:很簡單
public class Base
{
int i=0;
public Base()
{
System.Console.WriteLine("我是基類構(gòu)造器");
}
}
class Program
{
static void Main(string[] args)
{
Base d = new Base();
}
}
對于上面的代碼。是先執(zhí)行構(gòu)造器,還是先初使化字段 i 變量呢?其實(shí)只要意識到這個(gè)問題,也就很容易試出來,它應(yīng)當(dāng)是先初使化字段 i 變量。
那么現(xiàn)在如果Base 派生出一個(gè)子類,那它的構(gòu)造順序又是怎么樣的呢?
/// <summary>
/// 基類
/// </summary>
public class Base
{
public int baseint = 100;
public Base()
{
System.Console.WriteLine("構(gòu)造器:我是基類構(gòu)造器");
}
private class Inner
{
public Inner()
{
System.Console.WriteLine("字段:我是基類Inner");
}
}
/// <summary>
/// 字段初使化
/// </summary>
private Inner inner = new Inner();
}
/// <summary>
/// 子類
/// </summary>
class Derived : Base
{
public Derived()
{
System.Console.WriteLine("構(gòu)造器:我是子類構(gòu)造器");
}
private class Inner
{
public Inner()
{
System.Console.WriteLine("字段:我是子類Inner");
}
}
/// <summary>
/// 字段初使化
/// </summary>
private Inner inner = new Inner();
}
所以說它的執(zhí)行順序?yàn)椋鹤宇愖侄危割愖侄危割悩?gòu)造器-子類構(gòu)造器
相關(guān)文章
C# 16進(jìn)制與字符串、字節(jié)數(shù)組之間的轉(zhuǎn)換
在串口通訊過程中,經(jīng)常要用到 16進(jìn)制與字符串、字節(jié)數(shù)組之間的轉(zhuǎn)換2009-05-05基于C#的socket編程的TCP異步的實(shí)現(xiàn)代碼
本篇文章主要介紹了基于C#的socket編程的TCP異步的實(shí)現(xiàn)代碼,詳解的講訴了TCP通信異步的實(shí)現(xiàn),有興趣的可以了解一下。2016-11-11SuperSocket入門--Telnet服務(wù)器和客戶端請求處理
本文的控制臺項(xiàng)目是根據(jù)SuperSocket官方Telnet示例代碼進(jìn)行調(diào)試的,官方示例代碼:Telnet示例。下面跟著小編一起來看下吧2017-01-01C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法
下面小編就為大家分享一篇C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12基于NET?Core?的Nuget包制作、發(fā)布和運(yùn)用流程解析(完整過程)
這篇文章主要介紹了基于NET?Core?的Nuget包制作、發(fā)布和運(yùn)用流程,本文通過圖文并茂的形式給大家介紹了Nuget包制作過程,感興趣的朋友跟隨小編一起看看吧2022-02-02