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

C# 介面導向程式設計:USB 裝置模擬實作

     編輯:關於C#

前言

介面是 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 已被拔出

核心概念解析

介面契約

  • 定義「能做什麼」,不關心「怎麼做」
  • 所有實作類別必須實作介面定義的所有成員
  • 可繼承多個介面(C# 不支援多重繼承類別)

多型應用

  • 變數型別宣告為介面 USB usb
  • 執行期指派不同實作物件 new UDisk()、new MDisk()
  • 相同程式碼對不同物件產生不同行為

IDisposable 模式

  • 介面繼承 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");

實務應用場景

場景介面角色實作類別
資料庫存取IRepositorySqlRepository, MongoRepository, EfRepository
付款處理IPaymentProcessorCreditCardProcessor, PayPalProcessor, LinePayProcessor
記錄系統ILoggerFileLogger, DatabaseLogger, CloudLogger
快取策略ICacheProviderMemoryCache, RedisCache, DistributedCache

設計原則總結

  1. 依賴倒置原則 (DIP):高層模組不依賴低層模組,雙方依賴抽象
  2. 介面隔離原則 (ISP):介面應盡量精簡,避免強迫實作不需要的方法
  3. 里氏替換原則 (LSP):任何使用介面的地方,都能替換為實作類別而不影響正確性
  4. 開放封閉原則 (OCP):新增裝置類型只需新增實作類別,不修改既有程式碼

總結

透過 USB 裝置模擬範例,展示了介面導向程式設計的核心價值:定義穩定契約、實現執行期多型、支援資源管理模式。這是建立可擴充、可測試、低耦合系統的基石。實務開發中,善用介面搭配依賴注入容器,能讓系統架構更彈性、維護性更高。

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