基礎知識系列?接口的顯示實現和隱式實現
阿新 • • 發佈:2018-07-17
ase 派生類 實現接口 int get 小結 ace pri 報錯
x
CLR via C#中的一個小結將標題定為:"13.5 隱式和顯式接口方法實現(幕後發生的事情)"...
直接上代碼
public interface I { int GetIntFun(); int GetIntFunVirtual(); string GetStrFun(); } public class 我是一個類名字叫雷雷 : I { /// <summary> /// 隱式實現-派生類不可以重寫 /// 0.必須標記為public,否則報錯:{“我是一個類名字叫雷雷”不實現接口成員“I.GetIntFun()”。“我是一個類名字叫雷雷.GetIntFun()”無法實現接口成員,因為它不是公共的。}/// </summary> /// <returns></returns> public int GetIntFun() { return 0; } /// <summary> /// 隱式實現-派生類可以重寫 /// </summary> /// <returns></returns> public virtual int GetIntFunVirtual() {return 0; } /// <summary> /// 顯式實現 /// 0.不允許指定可訪問性(但是,編譯器生成方法的元數據時,可訪問性會設為private) /// 1.不允許標記virtual /// 1.只有通過接口類型的變量才能調用 /// </summary> /// <returns></returns> string I.GetStrFun() { return ""; } }/// <summary> /// 擴展知識點, /// 涉及virtual ,sealed ... /// new關鍵字,使派生類隱藏父類方法 /// </summary> public class 我是一個類名字叫小雷 : 我是一個類名字叫雷雷 { public override int GetIntFunVirtual() { return base.GetIntFunVirtual(); } public new int GetIntFun() { return 1; } }
調用
class Program { static void Main(string[] args) { 我是一個類名字叫雷雷 ll = new 我是一個類名字叫雷雷(); ll.GetIntFun(); ll.GetIntFunVirtual(); //ll.GetStrFun();//報錯!!!顯式實現,派生類訪問不到的 I i = new 我是一個類名字叫雷雷(); i.GetIntFun(); i.GetIntFunVirtual(); i.GetStrFun(); 我是一個類名字叫小雷 xl = new 我是一個類名字叫小雷(); xl.GetIntFun(); xl.GetIntFunVirtual(); Console.ReadKey(); } }
x
基礎知識系列?接口的顯示實現和隱式實現