首页 > 开发 > 综合 > 正文

C# 语言规范--1.9 接口

2024-07-21 02:29:59
字体:
来源:转载
供稿:网友

    一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以包含方法、属性、索引器和事件作为成员。

    示例

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 方法命名为 icontrol.paint,将 bind 方法命名为 idatabound.bind 方法。

public class editbox: icontrol, idatabound
{
   void icontrol.paint() {...}
   void idatabound.bind(binder b) {...}
}

    用这种方式实现的接口成员称为显式接口成员,这是因为每个成员都显式地指定要实现的接口成员。显式接口成员只能通过接口来调用。例如,在 editbox 中实现的 paint 方法只能通过强制转换为 icontrol 接口来调用。

class test
{
   static void main() {
      editbox editbox = new editbox();
      editbox.paint();   // error: no such method
      icontrol control = editbox;
      control.paint();   // calls editbox's paint implementation
   }
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表