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

C# this 與 base 關鍵字完整指南:實例參考、建構函式鏈與擴充方法

     編輯:關於C#

this 關鍵字四大用法

1. 區分同名欄位與參數


public class Employee
{
    string name, alias;
    public Employee(string name, string alias)
    {
        this.name = name;     // 欄位 = 參數
        this.alias = alias;
    }
}

2. 當前實例傳遞給其他方法


public void Process() => TaxCalculator.CalcTax(this);

3. 索引器宣告


public int this[int index]
{
    get => _array[index];
    set => _array[index] = value;
}

4. 擴充方法第一個參數修飾詞 (C# 3+)


public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str) => string.IsNullOrEmpty(str);
}
// 呼叫:"abc".IsNullOrEmpty()

⚠️ 靜態成員中不可使用 this

靜態方法屬於類別層級,無實例概念,編譯器會報錯。

base 關鍵字三大用法

1. 呼叫被覆寫的基底類別方法


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}");
    }
}

2. 指定呼叫基底類別建構函式


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)
}

3. 存取基底類別成員(欄位/屬性/方法)


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); // 存取基底屬性
}

多層繼承中的 base 行為


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直接父類別呼叫基底方法、指定基底建構函式、存取基底成員僅限建構函式、實例方法、屬性存取子;靜態不可用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved