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

C# 結構型別基礎:建構函式與初始化完整教學

     編輯:關於C語言

結構的建構函式規則

結構不能宣告無參數建構函式,編譯器會自動提供一個將所有欄位初始化為預設值(0、null、false)的建構函式。開發者只能定義帶參數的建構函式,且必須在建構函式中明確初始化所有實例欄位。

1. 定義帶參數建構函式

public struct Book
{
    public int BookId;
    public string BookName;
    public string BookAuthor;
    public double BookPrice;

    // 必須初始化所有欄位
    public Book(int id, string name, string author, double price)
    {
        BookId = id;
        BookName = name;
        BookAuthor = author;
        BookPrice = price;
    }
}

2. 使用 new 初始化

// 呼叫自訂建構函式
var book1 = new Book(1, "C# 深度解析", "張三", 599.0);

// 呼叫預設建構函式(所有欄位為預設值)
var book2 = new Book();
Console.WriteLine(book2.BookName); // null
Console.WriteLine(book2.BookPrice); // 0

3. 不使用 new 的手動初始化

結構允許在未呼叫建構函式的情況下逐欄位賦值,但必須在使用前完成所有欄位初始化,否則編譯錯誤。

Book book3;
book3.BookId = 2;
book3.BookName = "ASP.NET Core 實戰";
book3.BookAuthor = "李四";
book3.BookPrice = 499.0; // 此後才能使用 book3
Console.WriteLine(book3.BookName);

4. 重要限制提醒

  • 若定義了帶參建構函式,仍可使用 new Book() 呼叫預設建構函式。
  • 結構不可包含欄位初始化器(如 public int X = 5; 會編譯失敗)。
  • 結構不可宣告 finalize/解構函式。

5. 實務建議

  • 優先提供「完全初始化」的建構函式,確保物件一致性。
  • 考慮將結構設計為不可變(所有欄位 readonly、屬性唯讀),避免可變實值型別的陷阱。
  • 大型資料結構請改用類別,避免頻繁複製帶來的效能負擔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved