C# 明確方式實作介面

明確方式實作介面(Explicit Interface Implementation)

如果一個class去實作兩個有相同方法的interface,會發生什麼事?
程式如下,分別有兩個interface IControlIAction都含有Move()方法,其中ExampleClass去實作這兩個Interface。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface IControl
{
void Move();
}
public interface IAction
{
void Move();
}
public class ExampleClass : IControl, IAction
{
// Both IAction.Move and IControl.Move call this method.
public void Move()
{
Console.WriteLine("Move method in ExampleClass");
}
}

執行

1
2
3
4
5
6
7
8
9
10
11
12
13
ExampleClass example = new ExampleClass();
IControl control = example;
IAction action = example;

// The following lines all call the same method.
example.Move();
control.Move();
action.Move();

// Output:
// Move method in ExampleClass
// Move method in ExampleClass
// Move method in ExampleClass

結果是都會呼叫同一個實作。


但是你可能希望個自Interface執行不同的實作,這時就可以使用Explicit Interface Implementation如下:

1
2
3
4
5
6
7
8
9
10
11
public class ExampleClass2 : IControl, IAction
{
void IControl.Move()
{
System.Console.WriteLine("IControl.Move");
}
void IAction.Move()
{
System.Console.WriteLine("IAction.Move");
}
}

執行

1
2
3
4
5
6
7
8
9
10
11
12
ExampleClass2 example2 = new ExampleClass2();
IControl control = example2;
IAction action = example2;

// The following lines all call the same method.
//example2.Move(); // Compiler error.
control.Move(); // Calls IControl.Move on ExampleClass2.
action.Move(); // Calls IAction.Move on ExampleClass2.

// Output:
// IControl.Move
// ISurface.Move

此時,不可以直接透過實作class的物件去直接呼叫,會出現編譯錯誤,必須要把該物件轉換為對應的interface,例如如果你想呼叫IControl的Move方法,那麼就把它轉換為IControl。

注意:Explicit Interface Implementation是沒有存取修飾詞的,因為它無法當做其定義類型的成員來存取。它只有在透過interface的執行個體呼叫時才能存取。

參考:https://learn.microsoft.com/zh-tw/dotnet/csharp/programming-guide/interfaces/explicit-interface-implementation

使用Hexo Admin

透過 hexo-admin 這套插件,就能透過GUI介面進行後台管理,如新增或編輯markdown文件,簡化了發布文章的流程。

  1. 安裝套件
  2. 使用終端機,並移動到Hexo專案位置下,之後執行以下指令
    1
    $ npm install --save hexo-admin 

安裝完成之後,啟動本地端Server就可以進入後台管理,如下

  1. bash $ hexo server -d
  2. 進入 http://localhost:4000/admin 可進入後台管理

注意: Hexo Admin已經不維護了