15.4.1 类对接口的实现
前面我们已经说过,接口定义不包括方法的实现部分。接口可以通过类或结构来实现。我们主要讲述通过类来实现接口。用类来实现接口时,接口的名称必须包括在类声明中的基类列表中。
下面的例子给出了由类来实现接口的例子。其中ISequence为一个队列接口,提供了向队列尾部添加对象的成员方法Add(),IRing为一个循环表接口,提供了向环中插入对象的方法Insert(object obj),方法返回插入的位置。类RingSquence实现了接口ISequence和接口IRing。
程序清单15-4:
using System; interface ISequence { object Add(); } interface IRing { int Insert(object obj); } class RingSequence:ISequence,IRing { public object Add(){...} public int Insert(object obj){...} }
如果类实现了某个接口,类也隐式地继承了该接口的所有父接口,不管这些父接口有没有在类声明的基类列表中列出。
using System; interface IControl { void Paint(); } interface ITextBox:IControl { void SetText(string text); } class TextBox:ITextBox { public void Paint(){...} public void SetText(string text){...} }
这里,类TextBox不仅实现了接口ITextBox,还实现了接口ITextBox的父接口IControl。
前面我们已经看到,一个类可以实现多个接口。再看下面的例子:
using System; interface IControl { void Paint(); } interface IDataBound { void Bind(Binder b); } public class Control:IControl { public void Paint(){...} } public class EditBox:Control,IControl,IDataBound { public void Paint(){...} public void Bind(Binter b){...} }
上例中,类EditBox从Control类继承并同时实现了IControl and IDataBound接口。EditBox中的Paint方法来自IControl接口,Bind方法来自IDataBound接口,二者在EditBox类中都作为公有成员实现。当然,在C#中我们也可以选择不作为公有成员实现接口。
如果每个成员都明显地指出了被实现的接口,通过这种途径被实现的接口我们称之为显式接口成员(explicit interface member)。用这种方式我们改写上面的例子:
public class EditBox:IControl,IDataBound { void IControl.Paint(){...} void IDataBound.Bind(Binder b){...} } 显式接口成员只能通过接口调用。例如: 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 } }
上述代码中对editbox.Paint()的调用是错误的,因为editbox本身并没有提供这一方法。control.Paint()是正确的调用方式。
注意:接口本身不提供所定义的成员的实现,它仅仅说明这些成员,这些成员必须依靠实现接口的类或其它接口的支持。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索接口
, kfcapi接口
, 实现
, interface
, paint
, public
, iring i
, 实现接口
, 接口实现
, 成员
void
接口、c#接口的实现、java接口的实现、接口的实现方式、接口的实现类,以便于您获取更多的相关知识。