1. 程式人生 > >基礎知識系列?接口的顯示實現和隱式實現

基礎知識系列?接口的顯示實現和隱式實現

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

基礎知識系列?接口的顯示實現和隱式實現