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

C# 預設建構函式的角色與保留無參數建構函式的重要性

     編輯:關於C#

建構函式基礎

建構函式用於初始化物件,分為靜態與實例兩類。若類別未定義任何建構函式,編譯器會自動提供一個無參數的預設建構函式,將所有欄位初始化為預設值 (數值型為 0、參考型為 null)。

範例驗證

public class A
{
    public int Number;
    public string Word;
}

public class Test
{
    static void Main()
    {
        A a = new A(); // 呼叫預設建構函式
        Console.WriteLine($"Number = {a.Number}"); // 0
        Console.WriteLine($"Word = {a.Word}");     // (空字串)
    }
}

關鍵點:一旦自訂建構函式,預設建構函式消失

若類別定義了任何帶參數的建構函式,編譯器**不再**自動產生無參數建構函式。此時若程式碼仍嘗試 new A(),將導致編譯錯誤。

為何必須顯式保留無參數建構函式

  1. 序列化/反序列化:XmlSerializer、BinaryFormatter 等要求類別有公用無參數建構函式。
  2. 反射建立實例:Activator.CreateInstance(typeof(A)) 預設呼叫無參數建構函式。
  3. 繼承鏈:衍生類別預設呼叫基類無參數建構函式;若基類無此建構函式,衍生類別必須在建構函式中顯式呼叫 base(...)。
  4. 物件初始化語法:new A { Number = 1 } 先呼叫無參數建構函式再設定屬性。

最佳實踐

public class A
{
    public int Number;
    public string Word;

    // 顯式保留無參數建構函式
    public A() { }

    // 其他帶參數建構函式
    public A(int number, string word)
    {
        Number = number;
        Word = word;
    }
}

結論:除非確定類別永遠不需被序列化、反射建立、繼承或使用物件初始化語法,否則**務必顯式宣告公用無參數建構函式**,避免未來維護引發難以追蹤的錯誤。

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