c语言编程规范:C# 语言规范--1.9 接口

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

示例

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 同时从 itextboxilistbox 继承。

类和结构可以实现多个接口。在下面的示例中,

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

editbox 从类 control 派生,并且同时实现 icontrolidatabound

在前面的示例中,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 methodicontrol control = editbox;control.paint(); // calls editbox\'s paint implementation }}
Tags:  c语言编码规范 c语言接口 c语言接口与实现 c语言编程规范

延伸阅读

最新评论

发表评论