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

C# 類別進階:建構函式、解構函式、base 與 this 關鍵字實戰

     編輯:關於C語言

建構函式多載與鏈結

using System;

class MyClass {
    private int FNum;
    public int Num { get { return FNum; } }

    // 無參數建構函式(預設值)
    public MyClass() { this.FNum = 2009; }

    // 單一參數建構函式
    public MyClass(int x) { this.FNum = x; }

    // params 可變參數建構函式
    public MyClass(params int[] arr) {
        foreach (int i in arr) this.FNum += i;
    }

    // 解構函式(Finalizer)
    ~MyClass() {
        // 由 GC 自動呼叫,釋放非託管資源
    }
}

class Program {
    static void Main() {
        MyClass obj1 = new MyClass();        // 2009
        MyClass obj2 = new MyClass(100);     // 100
        MyClass obj3 = new MyClass(1, 2, 3); // 6
        Console.WriteLine($"{obj1.Num}, {obj2.Num}, {obj3.Num}");
        Console.ReadKey();
    }
}

核心概念解析

1. 建構函式特性

  • 無回傳型別(連 void 都不寫)
  • 名稱必須與類別同名
  • 可多載(參數不同),支援 params 陣列
  • 若未定義任何建構函式,編譯器會自動產生無參數預設建構函式

2. this 關鍵字在建構函式中的用法

  • this.FNum:明確指定實例欄位,避免與參數同名衝突
  • this(...):建構函式鏈結,避免重複初始化邏輯
  • public MyClass(int x, string s) : this(x) { /* 額外初始化 */ }

3. base 關鍵字呼叫基底類別建構函式

class Child : Parent {
    public Child(int x) : base(x) { } // 必須在初始化清單中呼叫
}

4. 解構函式(Finalizer)

  • 語法:~ClassName()
  • 無參數、無存取修飾詞、不可手動呼叫
  • 由 GC 在回收物件前非同步呼叫
  • 主要用於釋放非託管資源(檔案控制代碼、COM 物件、記憶體指標等)
  • 搭配 IDisposable 實作 Dispose Pattern 為最佳實踐

進階補充:建構函式執行順序

  1. 衍生類別 this 鏈結的目標建構函式
  2. 基底類別建構函式(由 base(...) 指定或預設無參數)
  3. 欄位初始化器(private int x = 10;)
  4. 建構函式本體程式碼

理解此順序對於診斷初始化例外、設計不可變物件至關重要。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved