成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 默認接口方法詳解

開發 前端
通過合理使用這一特性,我們可以創建更加模塊化和可維護的代碼結構。但同時也要注意避免過度使用,保持接口的簡單性和清晰性。

默認接口方法是C# 8.0引入的一個重要特性。它允許我們在接口中定義方法的默認實現,這為代碼復用和接口演進提供了新的可能性,其實這么玩下去,與抽象類接近了,現在本來就少用抽象類了。

基本語法

// 基本接口定義
public interface IBasic
{
    // 傳統接口方法聲明
    void RegularMethod();

    // 帶默認實現的方法
    public void DefaultMethod()
    {
        Console.WriteLine("這是默認實現");
    }
}

實際應用案例

我們通過一個智能家居照明系統的例子來詳細說明接口應用,特別是默認實現。

基礎照明接口

public interface ILight
{
    void SwitchOn();
    void SwitchOff();
    bool IsOn();

    // 默認實現的電源狀態檢查
    public PowerStatus Power() => PowerStatus.NoPower;
}

publicenum PowerStatus
{
    NoPower,
    ACPower,
    FullBattery,
    MidBattery,
    LowBattery
}

定時功能接口

public interface ITimerLight : ILight
{
    // 帶默認實現的定時功能
    public async Task TurnOnFor(int duration)
    {
        // 默認實現使用基本的開關控制
        Console.WriteLine("啟動默認定時功能");
        SwitchOn();
        await Task.Delay(duration);
        SwitchOff();
        Console.WriteLine("定時功能完成");
    }
}

閃爍功能接口

public interface IBlinkingLight : ILight
{
    // 帶默認實現的閃爍功能
    public async Task Blink(int duration, int repeatCount)
    {
        Console.WriteLine("啟動默認閃爍功能");
        for (int i = 0; i < repeatCount; i++)
        {
            SwitchOn();
            await Task.Delay(duration);
            SwitchOff();
            await Task.Delay(duration);
        }
        Console.WriteLine("閃爍功能完成");
    }
}

具體實現類

// 基礎照明設備 - 使用所有默認實現
publicclass BasicLight : ILight, ITimerLight, IBlinkingLight
{
    privatebool isOn;

    public void SwitchOn() => isOn = true;
    public void SwitchOff() => isOn = false;
    public bool IsOn() => isOn;
}

// 高級LED燈 - 重寫部分默認實現
publicclass AdvancedLEDLight : ILight, ITimerLight, IBlinkingLight
{
    privatebool isOn;
    private readonly string deviceId;

    public AdvancedLEDLight(string id)
    {
        deviceId = id;
    }

    public void SwitchOn() => isOn = true;
    public void SwitchOff() => isOn = false;
    public bool IsOn() => isOn;

    // 自定義閃爍實現
    public async Task Blink(int duration, int repeatCount)
    {
        Console.WriteLine($"LED燈 {deviceId} 使用硬件閃爍功能");
        await Task.Delay(duration * repeatCount);
        Console.WriteLine("閃爍完成");
    }
}

功能測試

internal class Program
{
    static async Task Main(string[] args)
    {
        BasicLight light = new BasicLight();
        Console.WriteLine($"測試燈具: {light.GetType().Name}");

        // 基本功能測試
        light.SwitchOn();
        Console.WriteLine($"開啟狀態: {light.IsOn()}");

        // 使用模式匹配測試高級功能
        if (light is ITimerLight timer)
        {
            Console.WriteLine("測試定時功能");
            await timer.TurnOnFor(1000);
        }

        if (light is IBlinkingLight blinker)
        {
            Console.WriteLine("測試閃爍功能");
            await blinker.Blink(500, 3);
        }
        Console.ReadLine();
    }
}

圖片圖片

internal class Program
{
    static async Task Main(string[] args)
    {
        var light = new AdvancedLEDLight("ABC");
        Console.WriteLine($"測試燈具: {light.GetType().Name}");

        // 基本功能測試
        light.SwitchOn();
        Console.WriteLine($"開啟狀態: {light.IsOn()}");

        // 使用模式匹配測試高級功能
        if (light is ITimerLight timer)
        {
            Console.WriteLine("測試定時功能");
            await timer.TurnOnFor(1000);
        }

        if (light is IBlinkingLight blinker)
        {
            Console.WriteLine("測試閃爍功能");
            await blinker.Blink(500, 3);
        }
        Console.ReadLine();
    }
}

圖片圖片

注意事項

接口設計原則

  • 保持接口小而專注
  • 每個接口專注于一個特定功能
  • 避免在多個派生接口中重寫相同的方法

實現優先級

  • 類中的顯式實現優先級最高
  • 最具體的接口實現其次
  • 默認接口實現優先級最低

總結

默認接口方法為C#帶來了更靈活的代碼組織方式,特別適合:

  • 接口的演進
  • 可選功能的實現
  • 行為的組合
  • 代碼的復用

通過合理使用這一特性,我們可以創建更加模塊化和可維護的代碼結構。但同時也要注意避免過度使用,保持接口的簡單性和清晰性。

責任編輯:武曉燕 來源: 技術老小子
相關推薦

2021-01-28 05:14:40

C#接口簽名

2009-08-25 10:57:09

C#接口

2009-08-25 10:44:08

C#接口定義接口

2009-08-14 17:58:05

C#接口方法

2009-08-31 16:47:39

C#接口的定義

2009-08-31 16:23:13

C#接口

2009-08-20 13:47:57

C#驗證輸入方法

2009-09-24 15:20:54

C#接口定義

2009-09-02 13:15:23

C#數組復制

2009-09-02 10:49:46

C#調用析構方法

2009-08-28 12:47:30

C#靜態方法應用

2009-08-24 09:55:26

C#接口轉換

2009-08-24 11:02:52

C#接口映射

2009-09-07 03:07:11

C# Main方法

2009-08-25 16:54:28

C# RichText

2009-09-09 10:32:12

C# CheckBox

2009-08-31 09:41:05

C#反射靜態方法開發

2009-09-11 12:31:15

C# WinForm控設置默認值

2009-08-19 14:40:57

C#操作注冊表常用方法

2024-09-23 16:55:18

C#代碼開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲av毛片成人精品 | 精品视频一区二区 | 亚洲国产免费 | 亚洲国产一区二区视频 | 操操操日日日 | 伊人热久久 | 日韩欧美三区 | 视频一区在线 | 在线看片国产精品 | 欧美无乱码久久久免费午夜一区 | 黄色片在线观看网址 | 亚洲视频国产 | 久久成人精品视频 | 一区视频在线播放 | 一区二区三区回区在观看免费视频 | 亚洲精品v日韩精品 | 久久午夜剧场 | 天天色图 | 欧美久久国产精品 | h视频免费在线观看 | 久草新在线 | 成人在线视频网站 | 国产一区久久久 | 色视频欧美 | 精品综合久久久 | 亚洲性爰 | 久久777| 福利视频网 | 日韩精品久久一区二区三区 | 99精品热视频| 一区二区三区国产精品 | caoporn视频| 亚洲免费在线视频 | 国产精品久久久久久久久久免费 | 99re视频| 国产精品永久免费 | 成人精品久久日伦片大全免费 | 日韩一区二区三区av | 欧美成年黄网站色视频 | 色偷偷人人澡人人爽人人模 | 免费高潮视频95在线观看网站 |