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

C# 介面基礎教程第七節:抽象類別實作介面與虛擬介面方法映射

     編輯:關於C語言

核心概念

抽象類別實作介面時,不需立即提供所有介面成員的實體實作,可將介面方法映射至抽象方法,強制衍生類別實作。這結合了「介面契約」與「抽象類別部分實作」的彈性。

情境一:介面方法映射至抽象方法

public interface IMethods
{
    void F();
    void G();
}

public abstract class Base : IMethods
{
    // 介面方法 → 抽象方法,衍生類別必須 override
    public abstract void F();
    public abstract void G();
}

// 具體類別必須實作 F、G
public class Concrete : Base
{
    public override void F() => Console.WriteLine("Concrete.F");
    public override void G() => Console.WriteLine("Concrete.G");
}

情境二:顯式介面實作呼叫受保護抽象方法

顯式介面實作(void IMethods.F())不能標記為 abstract,但可在內部呼叫 protected abstract 方法,達到相同強制實作效果。

public interface IMethods
{
    void F();
    void G();
}

public abstract class Base : IMethods
{
    // 顯式介面實作(非虛擬、不可 override)
    void IMethods.F() => FF(); // 呼叫受保護抽象方法
    void IMethods.G() => GG();

    // 衍生類別必須實作這兩個受保護抽象方法
    protected abstract void FF();
    protected abstract void GG();
}

public class Concrete : Base
{
    protected override void FF() => Console.WriteLine("Concrete.FF");
    protected override void GG() => Console.WriteLine("Concrete.GG");
}

關鍵規則總結

規則說明
抽象類別實作介面可選擇「實作」或「映射至抽象方法」。
顯式介面實作不可為 abstract/virtual/override。
顯式介面實作體可呼叫 protected abstract 方法,間接強制衍生類別實作。
非抽象衍生類別必須實作所有繼承的抽象方法(含映射來的介面方法)。

設計模式應用:Template Method + Interface

public interface IProcessor
{
    void Process();
}

public abstract class ProcessorBase : IProcessor
{
    // 顯式介面實作定義演算法骨架
    void IProcessor.Process()
    {
        Initialize();
        ExecuteCore();      // 抽象:核心邏輯由子類實作
        Cleanup();
    }

    protected virtual void Initialize() => Console.WriteLine("Init");
    protected abstract void ExecuteCore(); // 強制實作
    protected virtual void Cleanup() => Console.WriteLine("Cleanup");
}

public class ConcreteProcessor : ProcessorBase
{
    protected override void ExecuteCore() => Console.WriteLine("核心業務邏輯");
}

此模式確保所有處理器遵循統一流程(Initialize → ExecuteCore → Cleanup),同時強制實作核心邏輯。

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