文章出處

類和接口繼承

CLR和C#編譯器允許類繼承一個或者多個接口,但必須為繼承的接口提供方法的實現

定義接口

關鍵字interface,已I字母開頭;不許接口定義靜態成員;接口成員可以是屬性、索引器、事件、方法

泛型接口

  • 泛型接口提供了編譯時的安全性
  • 減少值類型的裝箱
  • 類可以實現同一接口若干次
    class Number:IComparable<int>,IComparable<string>
    {

        public int CompareTo(int other)
        {
            throw new NotImplementedException();
        }

        public int CompareTo(string other)
        {
            throw new NotImplementedException();
        }
    }

泛型和接口約束

可以將一個泛型類型參數約束為多個接口,傳遞的參數類型必須實現所有接口的約束

  public static int Max<T>(T t) where T : IComparable, IConvertible
  {
      return 0;//other result
  }

實現多個具有相同方法名和簽名的接口

    public interface IWindow {
        void GetMenu();
    }

    public interface IRestaurant
    {
         void GetMenu();
    }


    class Number : IWindow, IRestaurant
    {

        //顯示實現接口,在調用的時候必須將對象轉成對應的接口類型
        void IWindow.GetMenu()
        {
            throw new NotImplementedException();
        }

        void IRestaurant.GetMenu()
        {
            throw new NotImplementedException();
        }
    }

用顯式接口方法實現來增強編譯時類型的安全性

謹慎使用顯式接口方法實現

設計:基類還是接口

  • IS-A VS CAN-DO關系 如果類之間是IS-A的關系,建議使用繼承基類,如果是CAN-DO建議是繼承接口
  • 版本控制問題 向基類添加新的方法,派生類將繼承新方法,代碼能正常工作甚至不需要編譯代碼;但是接口增加新的方法,派生類必須實現新的接口,必須要編譯代碼

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()