Home [C# 筆記][多型] Interface 明確介面實作
Post
Cancel

[C# 筆記][多型] Interface 明確介面實作

明確介面實作

明確介面實作的目的:解決方法重名問題

語法

1
2
3
4
5
6
7
8
9
10
11
public class Bird : IFlyable {
    public void Fly() {
        Console.WriteLine("鳥會飛");
    }
    /// <summary>
    /// 明確介面實作
    /// </summary>
    void IFlyable.Fly() {
        Console.WriteLine("我是介面的飛");
    }
}

什麼時候顯示的去實現介面?
當繼承的介面中的方法和參數一模一樣的時候,就是用明確介面實作。

當一個抽象類實現介面的時候,需要子類去實現介面。

範例:類別與介面方法 重名問題

直接顯示介面名就可以了 void IFlyable.Fly()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//明確介面實作:就是為了解決方法的重名問題

IFlyable fly = new Bird();
fly.Fly(); //調的是介面的fly,為什麼?因為fly是IFlyable介面類型

//如要調鳥的fly,要這宣告為Bird的類型↓↓↓
//不要跟override搞混了
Bird bird = new Bird();
bird.Fly(); //這調的才是鳥的fly

Console.ReadKey();

//類別
public class Bird : IFlyable
{
    public void Fly() {
        Console.WriteLine("鳥會飛");
    }
    /// <summary>
    /// 明確介面實作
    /// 這個強調的是介面的飛
    /// 且不能加修飾符(ex:public)
    /// 方法因為是在類別裡面,所以默認是 private,
    /// (方法在介面裡面,默認是 public)
    /// </summary>
    void IFlyable.Fly() {
        Console.WriteLine("我是介面的飛");
    }
}

//介面
public interface IFlyable {
    void Fly();
}

interfaces/explicit-interface-implementation

This post is licensed under CC BY 4.0 by the author.