首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 物件初始化完整解析(一):初始化順序完整示範與 Tracker 追蹤技巧

     編輯:關於C語言

原文出處

https://www.csharp411.com/c-object-initialization/

C# 物件初始化完整順序

  1. Derived 靜態欄位
  2. Derived 靜態建構函數
  3. Derived 實例欄位
  4. Base 靜態欄位
  5. Base 靜態建構函數
  6. Base 實例欄位
  7. Base 實例建構函數
  8. Derived 實例建構函數

完整示範程式碼


using System;

namespace ObjectInit
{
    class Program
    {
        static void Main(string[] args)
        {
            Derived d = new Derived();
            Console.ReadLine();
        }
    }

    class Base
    {
        public Base()
        {
            Console.WriteLine("Base.Instance.Constructor");
            this.m_Field3 = new Tracker("Base.Instance.Field3");
            this.Virtual(); // 陷阱:呼叫虛方法
        }
        static Base()
        {
            Console.WriteLine("Base.Static.Constructor");
        }
        private Tracker m_Field1 = new Tracker("Base.Instance.Field1");
        private Tracker m_Field2 = new Tracker("Base.Instance.Field2");
        private Tracker m_Field3;
        static private Tracker s_Field1 = new Tracker("Base.Static.Field1");
        static private Tracker s_Field2 = new Tracker("Base.Static.Field2");
        virtual public void Virtual() { Console.WriteLine("Base.Instance.Virtual"); }
    }

    class Derived : Base
    {
        public Derived()
        {
            Console.WriteLine("Derived.Instance.Constructor");
            this.m_Field3 = new Tracker("Derived.Instance.Field3");
        }
        static Derived()
        {
            Console.WriteLine("Derived.Static.Constructor");
        }
        private Tracker m_Field1 = new Tracker("Derived.Instance.Field1");
        private Tracker m_Field2 = new Tracker("Derived.Instance.Field2");
        private Tracker m_Field3;
        static private Tracker s_Field1 = new Tracker("Derived.Static.Field1");
        static private Tracker s_Field2 = new Tracker("Derived.Static.Field2");
        override public void Virtual() { Console.WriteLine("Derived.Instance.Virtual"); }
    }

    class Tracker
    {
        public Tracker(string text) { Console.WriteLine(text); }
    }
}

Tracker 追蹤技巧

使用建構函數寫入 Console 的輔助類別,無需中斷點即可完整記錄初始化時間點與順序,極適合教學與除錯。

程式碼設計亮點

  • 基類/派生類對稱結構,對比清晰
  • 欄位初始化器 vs 建構函數賦值 (Field1/2 vs Field3)
  • 虛方法覆寫展示多型行為
  • 靜態建構函數展示類別層級初始化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved