c 介面使用詳解 c 中介面隱式與顯示實現 c 中介面可以隱式實現、顯示實現,隱式實現更常使用、顯示實現較少使用 其區別在於 1. 顯示實現避免介面函數簽名衝突 2. 顯示實現只可以以介面形式調用 3. 顯示實現其子類需無法繼承介面 4. 隱式實現可以撕裂調用、可以介面調用 5. 隱式實現其子類可以 ...
c#介面使用詳解
c#中介面隱式與顯示實現
c#中介面可以隱式實現、顯示實現,隱式實現更常使用、顯示實現較少使用
其區別在於
- 顯示實現避免介面函數簽名衝突
- 顯示實現只可以以介面形式調用
- 顯示實現其子類需無法繼承介面
- 隱式實現可以撕裂調用、可以介面調用
- 隱式實現其子類可以繼承介面的實現
- 隱式實現可以使用虛函數、子類可以重載
定義介面:
interface IShowMsg
{
void Show();
}
隱式實現示例:
class ShowMsgImplicit : IShowMsg
{
public void Show()
{
Console.WriteLine("ShowMsgImplicit");
}
}
顯示實現示例:
class ShowMsgExplicit : IShowMsg
{
void IShowMsg.Show()
{
Console.WriteLine("ShowMsgExplicit");
}
}
若使用:
var showMsgExplicit = new ShowMsgExplicit();
showMsgExplicit.Show();
將報錯,只能使用(showMsgExplicit as IShowMsg).Show();
調用
介面在繼承中的使用
介面顯示實現是無法在繼承中保留的,若希望子類繼承介面的實現需使用隱式實現。
- 使用隱式實現
- 若子類可以overwrite請使用virtual關鍵字修飾實現函數
- 可以定義abstract類繼承介面,強制子類實現介面
父類實現介面:
class ShowMsgImplicit : IShowMsg
{
public virtual void Show()
{
Console.WriteLine("ShowMsgImplicit");
}
}
子類繼承父類之後可以重載或者預設使用父類方法實現介面。
抽象類實現介面:
abstract class ShowMsgAbstract : IShowMsg
{
public abstract void Show();
}
子類繼承抽象類必須實現抽象方法實現介面。