2016年3月28日 星期一

介面(Interface)

Source : 出處

介面說明

  • 介面為只有宣告成員,而沒有實作的類別
  • C#中使用interface來宣告介面
  • 介面只能定義屬性、方法、事件、索引,且不包含實作(Implementation)這些成員的程式碼
    • 介面可以有0個或多個成員
    • 介面的成員只能是屬性、方法、事件、索引子
      public interface 介面
      {
          int 屬性 { get; }               //屬性
          public void 方法();             //方法
          event MyEvent 事件;            //事件
          int this[int index] {get; set;} //索引子
      }
    • 介面的成員不能是常數、欄位運算子、建構函式、解構函式、型別、靜態成員
    • 由類別或結構提供介面的實作
      public interface 介面
      {
          string 屬性 { get; set; }
          string 方法();
      }
      
      class 類別 : 介面
      {
          private string 欄位 = "Hello";
          public  string 屬性
          {
              get { return 欄位;  }
              set { this.欄位 = value; }
          }
      
          public string 方法()
          {
              return 欄位 + " World";
          }
      }
  • 一個類別只能繼承一個父類別,但可以實作(繼承)多個介面
    class 類別 : 介面1, 介面2, 介面3
    {
        xxxxx
    }
  • 介面可以繼承多個介面
  • 介面不可以被實體化 即不可以new 介面
  • 若類別繼承介面,則要實作介面的所有成員
    • 若介面B有繼承其它介面A,則繼承介面B的類別需實作介面A和介面B的成員
      
      public interface 介面A
      {
          string 方法A();
      }
      
      public interface 介面B : 介面A
      {
          string 方法B();
      }
      
      class 類別 : 介面B
      {
          public string 方法()A
          {
              return "實作介面A的方法A";
          }
      
          public string 方法()B
          {
              return "實作介面B的方法B";
          }
      }

介面的用法

  • 下面的例子假設有基本的程式如下:
    public interface 介面 
    {
        string 方法();
    }
    
    class 類別A : 介面
    {
        public string 方法()
        {
            return "類別A";
        }
    }
    
    class 類別B : 介面
    {
        public string 方法()
        {
            return "類別B";
        }
    }
    
  • 介面基本用法:
    class 類別
    {
        public void 方法1()
        {
            介面 物件 = new 類別A();
            System.Console.WriteLine( 物件.方法() );     //顯示:類別A
    
            物件 = new 類別B();
            System.Console.WriteLine( 物件.方法() );     //顯示:類別B
        }
    }
  • 介面進階用法-多型(Polymorphism):
    方法2( )是很常使用的寫法,當一個方法傳入的參數可能是不同的類別時,可以讓這些類別繼承某個介面,並將方法的參數型別設為該介面
    class 類別
    {
    
        public void 方法2()
        {
            介面 物件 = new 類別A();
            顯示方法(物件);              //顯示:類別A
    
            物件 = new 類別B();
            顯示方法(物件);              //顯示:類別B
        }
    
        public void 顯示方法(介面 物件)
        {
            System.Console.WriteLine( 物件.方法() );
        }
    }
    

沒有留言:

張貼留言