介面是 C# 實現多型與解耦合的核心機制。本文透過模擬 USB 裝置(隨身碟、行動硬碟、MP4)的讀寫與拔出操作,示範如何使用介面定義契約、多型實作與 IDisposable 模式管理資源釋放。
// USB 介面繼承 IDisposable,規範資源釋放契約
public interface USB : IDisposable
{
void OutputFile(); // 讀出檔案
void InputFile(); // 寫入檔案
}
// 隨身碟實作
public class UDisk : USB
{
public UDisk()
{
Console.WriteLine("隨身碟準備就緒...");
}
public void OutputFile()
{
Console.WriteLine("從隨身碟讀出檔案");
}
public void InputFile()
{
Console.WriteLine("往隨身碟寫入檔案");
}
public void Dispose()
{
Console.WriteLine("隨身碟已被拔出");
}
}
// 行動硬碟實作
public class MDisk : USB
{
public MDisk()
{
Console.WriteLine("行動硬碟準備就緒...");
}
public void OutputFile()
{
Console.WriteLine("從行動硬碟讀出檔案");
}
public void InputFile()
{
Console.WriteLine("往行動硬碟寫入檔案");
}
public void Dispose()
{
Console.WriteLine("行動硬碟已被拔出");
}
}
// MP4 播放器實作
public class MP4 : USB
{
public MP4()
{
Console.WriteLine("MP4 準備就緒...");
}
public void OutputFile()
{
Console.WriteLine("從 MP4 讀出檔案");
}
public void InputFile()
{
Console.WriteLine("往 MP4 寫入檔案");
}
public void Dispose()
{
Console.WriteLine("MP4 已被拔出");
}
}
class Program
{
static void Main(string[] args)
{
USB usb;
// 使用隨身碟
usb = new UDisk();
usb.OutputFile();
usb.InputFile();
usb.Dispose();
Console.WriteLine();
// 切換為行動硬碟
usb = new MDisk();
usb.OutputFile();
usb.InputFile();
usb.Dispose();
Console.WriteLine();
// 切換為 MP4
usb = new MP4();
usb.OutputFile();
usb.InputFile();
usb.Dispose();
Console.ReadKey();
}
}
隨身碟準備就緒...
從隨身碟讀出檔案
往隨身碟寫入檔案
隨身碟已被拔出
行動硬碟準備就緒...
從行動硬碟讀出檔案
往行動硬碟寫入檔案
行動硬碟已被拔出
MP4 準備就緒...
從 MP4 讀出檔案
往 MP4 寫入檔案
MP4 已被拔出
USB usbnew UDisk()、new MDisk()IDisposable 強制實作 Dispose()using 區塊確保釋放:using (USB usb = new UDisk())
{
usb.OutputFile();
usb.InputFile();
} // 自動呼叫 Dispose()
public static class UsbFactory
{
public static USB CreateDevice(string deviceType)
{
return deviceType.ToLower() switch
{
"udisk" => new UDisk(),
"mdisk" => new MDisk(),
"mp4" => new MP4(),
_ => throw new ArgumentException("不支援的裝置類型")
};
}
}
// 使用方式
USB device = UsbFactory.CreateDevice("udisk");
| 場景 | 介面角色 | 實作類別 |
|---|---|---|
| 資料庫存取 | IRepository | SqlRepository, MongoRepository, EfRepository |
| 付款處理 | IPaymentProcessor | CreditCardProcessor, PayPalProcessor, LinePayProcessor |
| 記錄系統 | ILogger | FileLogger, DatabaseLogger, CloudLogger |
| 快取策略 | ICacheProvider | MemoryCache, RedisCache, DistributedCache |
透過 USB 裝置模擬範例,展示了介面導向程式設計的核心價值:定義穩定契約、實現執行期多型、支援資源管理模式。這是建立可擴充、可測試、低耦合系統的基石。實務開發中,善用介面搭配依賴注入容器,能讓系統架構更彈性、維護性更高。