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

C# 建構函式進階:this 串聯、base 呼叫與屬性初始化

     編輯:關於C語言

this 串聯建構函式

避免重複初始化程式碼,一個建構函式呼叫另一個:


class MyClass
{
    private string _prefix = "ABC-";

    public MyClass() => Console.WriteLine("MyClass");
    public MyClass(string s) => Console.WriteLine(_prefix + s);
    public MyClass(int n) : this() { Console.WriteLine(n); }
    public MyClass(int x, int y) : this("XYZ") { Console.WriteLine(x + y); }
}

// 執行順序
new MyClass();        // MyClass
new MyClass("EFG");   // ABC-EFG
new MyClass(123);     // MyClass / 123
new MyClass(111,222); // ABC-XYZ / 333

base 呼叫基底建構函式

衍生類別**必須**透過 `base(...)` 顯式呼叫基底建構函式 (無參基底可省略):


abstract class Parent
{
    private byte _id;
    public Parent(byte n) => _id = n;
    public byte Id { get => _id; set => _id = value; }
}

class Child : Parent
{
    public Child(byte id) : base(id) { } // 必須傳 id 給基底
}

var c = new Child(6);
Console.WriteLine(c.Id); // 6
c.Id = 8;
Console.WriteLine(c.Id); // 8

屬性初始化器 (C# 6+)


class Person
{
    public string Name { get; set; } = "Unknown"; // 初始化器
    public int Age { get; init; } // C# 9: init 僅限物件初始化器指派
}

var p = new Person { Name = "Alice", Age = 30 };
// p.Age = 31; // 編譯錯誤 (init 唯讀)

建構函式執行順序

  1. 基底類別靜態建構函式 (首次存取前)
  2. 衍生類別靜態建構函式
  3. 基底類別實例欄位初始化器
  4. 基底類別實例建構函式
  5. 衍生類別實例欄位初始化器
  6. 衍生類別實例建構函式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved