抽象類別實作介面時,不需立即提供所有介面成員的實體實作,可將介面方法映射至抽象方法,強制衍生類別實作。這結合了「介面契約」與「抽象類別部分實作」的彈性。
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 方法,間接強制衍生類別實作。 |
| 非抽象衍生類別 | 必須實作所有繼承的抽象方法(含映射來的介面方法)。 |
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),同時強制實作核心邏輯。