熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C# 語言規范--1.9 接口

2022-06-13   來源: .NET編程 

  一個接口定義一個協定實現接口的類或結構必須遵守其協定接口可以包含方法屬性索引器和事件作為成員

  示例

  interface IExample
{
   string this[int index] { get; set; }
   event EventHandler E;
   void F(int value);
   string P { get; set; }
}
public delegate void EventHandler(object sender EventArgs e);

  顯示了一個包含索引器事件 E方法 F 和屬性 P 的接口

  接口可以使用多重繼承在下面的示例中

  interface IControl
{
   void Paint();
}
interface ITextBox: IControl
{
   void SetText(string text);
}
interface IListBox: IControl
{
   void SetItems(string[] items);
}
interface IComboBox: ITextBox IListBox {}

  接口 IComboBox 同時從 ITextBox 和 IListBox 繼承

  類和結構可以實現多個接口在下面的示例中

  interface IDataBound
{
   void Bind(Binder b);
}
public class EditBox: Control IControl IDataBound
{
   public void Paint() {}
   public void Bind(Binder b) {}
}

  類 EditBox 從類 Control 派生並且同時實現 IControl 和 IDataBound

  在前面的示例中IControl 接口中的 Paint 方法和 IDataBound 接口中的 Bind 方法是使用 EditBox 類的公共成員實現的C# 提供了另一種方式來實現這些方法使得實現類避免將這些成員設置成公共的這就是接口成員可以用限定名來實現例如在 EditBox 類中將 Paint 方法命名為 IControlPaint將 Bind 方法命名為 IDataBoundBind 方法

  public class EditBox: IControl IDataBound
{
   void IControlPaint() {}
   void IDataBoundBind(Binder b) {}
}

  用這種方式實現的接口成員稱為顯式接口成員這是因為每個成員都顯式地指定要實現的接口成員顯式接口成員只能通過接口來調用例如在 EditBox 中實現的 Paint 方法只能通過強制轉換為 IControl 接口來調用

  class Test
{
   static void Main() {
      EditBox editbox = new EditBox();
      editboxPaint();   // error: no such method
      IControl control = editbox;
      controlPaint();   // calls EditBoxs Paint implementation
   }
}


From:http://tw.wingwit.com/Article/program/net/201311/13782.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.