public class Employee
{
string name, alias;
public Employee(string name, string alias)
{
this.name = name; // 欄位 = 參數
this.alias = alias;
}
}
public void Process() => TaxCalculator.CalcTax(this);
public int this[int index]
{
get => _array[index];
set => _array[index] = value;
}
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string str) => string.IsNullOrEmpty(str);
}
// 呼叫:"abc".IsNullOrEmpty()
靜態方法屬於類別層級,無實例概念,編譯器會報錯。
public class Person
{
public virtual void GetInfo() => Console.WriteLine($"Name: {Name}");
}
public class Employee : Person
{
public string Id { get; set; }
public override void GetInfo()
{
base.GetInfo(); // 呼叫基底實作
Console.WriteLine($"Employee ID: {Id}");
}
}
public class BaseClass
{
public BaseClass() => Console.WriteLine("BaseClass()");
public BaseClass(int i) => Console.WriteLine($"BaseClass({i})");
}
public class DerivedClass : BaseClass
{
public DerivedClass() : base() { } // 呼叫 BaseClass()
public DerivedClass(int i) : base(i) { } // 呼叫 BaseClass(int)
}
public class Vehicle
{
public string Name { get; set; }
public Vehicle(string name) => Name = name;
}
public class Car : Vehicle
{
public Car(string name) : base(name) { } // 傳遞參數給基底建構函式
public void Show() => Console.WriteLine(base.Name); // 存取基底屬性
}
class A { public A() => Console.WriteLine("A"); }
class B : A { public B() : base() => Console.WriteLine("B"); }
class C : B { public C() : base("param") => Console.WriteLine("C"); } // 錯誤:B 無此建構函式
// base 只能存取「直接父類別」,無法跨層級存取祖父類別
DerivedClass d = new DerivedClass(1); 輸出: BaseClass(1) → 基底類別建構函式先執行 DerivedClass(1) → 衍生類別建構函式後執行
| 關鍵字 | 代表 | 主要用途 | 限制 |
|---|---|---|---|
| this | 目前實例 | 區分同名、傳遞自身、索引器、擴充方法 | 靜態成員不可用 |
| base | 直接父類別 | 呼叫基底方法、指定基底建構函式、存取基底成員 | 僅限建構函式、實例方法、屬性存取子;靜態不可用 |