接口的实现

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接口的实现、接口的实现方式、接口的实现类,以便于您获取更多的相关知识。

时间: 2024-12-28 09:15:31

接口的实现的相关文章

网吧路由器接口故障的处理方法

  路由器有几个接口,每一个接口对应属性. 当网吧路由器接口出现故障时,需要及时排查解决.在讲述路由器接口故障的处理方法前,小编先简单介绍下路由器CE1接口.路由器CE1接口是将2M,一个E1用作若干个64k及其组合,这就是CE1.CE1的传输线路的带宽是2048k. 假设网吧路由器A和其他厂商的设备B通过CE1链路相连,带宽为2M,配置完成后,发现在B上有大量数据包溢出告警,在A上,当CE1接口上没有流量时,报文传输时延正常,当CE1接口上有流量时,时延达到300多秒,网速较慢. 下面是具体的

一个类如何实现两个接口中同名同参数不同返回值的函数

假设有如下两个接口: public interface IA{    string GetA(string a);}public interface IB{    int GetA(string a);} 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该

请问下有谁调用过银联代付的接口

问题描述 请问下有谁调用过银联代付的接口 有前辈在吗,我可以贴代码,访问接口,返回值表示参数错误,我可以贴代码 解决方案 如果用java的话,可以参考以下链接的几个文件看看 http://www.chendw.cn/original/205.html 解决方案二: 贴出来吧哥们. 我也想知道

java当中的接口里面的方法全是抽象的而且是public的

问题描述 java当中的接口里面的方法全是抽象的而且是public的 java当中的接口里面的方法全是抽象的而且是public的,为什么没有abstract和public关键词修饰呢 解决方案 接口中不允许private.protected,只能是public,所以语法规定不用写了.同理,接口不能包含函数实现,肯定是abstract的.所以也不用写了. 解决方案二: 14. JAVA 枚举(Enum.类集EnumMap&EnumSet .实现接口.定义抽象方法) ----- 学习笔记

android 如何通过接口向服务器上传视频

问题描述 android 如何通过接口向服务器上传视频 在搞一个小项目 需要用到 新手 没接触过 希望会的朋友提供一个Demo 谢谢! 解决方案 你就找一个上传文件的例子就行了,不管你是视频还是图片,都一样的方式 解决方案二: http://www.cnblogs.com/top5/archive/2013/03/07/2947344.html

数据-android 地铁查询怎么查,接口在哪里找呢

问题描述 android 地铁查询怎么查,接口在哪里找呢 比如查询广州地铁,貌似不提供接口啊,数据或功能都是从哪里来了,我现在在做这方面,接口都没有.. 解决方案 你还是选择跟人家谈谈合作吧,这类接口,不是你随便能得到的 解决方案二: 当然不排除自己做数据库,自己把所有线路采集到你们自己的数据库,自己查 解决方案三: 自己采集数据去啊 .差距不大的. 解决方案四: 可以去聚合数据和易源API看看 解决方案五: 上百度api store查查,应该会有

PostgreSQL 11 preview - compress method 接口 - 暨开放接口系列

标签 PostgreSQL , 开放接口 , udf , type , index , scan , language , fdw , sample , aggregate , operator , window , storage , compress 背景 PostgreSQL是一款扩展能力极强的数据库,这也是PG可以深入各个垂直行业的原因. PostgreSQL的开放式接口 已有非常多跟进自定义接口扩展出来的插件. 下面是自定义接口对应的文档. 1.自定义函数 https://www.po

spring+ibatis的dao接口 能使用内部类吗?

问题描述 spring+ibatis的dao接口 能使用内部类吗? spring+ibatis的dao接口 能使用内部类吗? spring扫描xml加载的 要怎么配置? 现在加载不到namespace指定的内部类 public interface MissionTypeMatterMapper { int deleteByPrimaryKey(Integer mission_matter_id); void insert(MissionTypeMatter record); List<Missi

xml-携程api接口请求成功返回的String数据怎样拿来使用

问题描述 携程api接口请求成功返回的String数据怎样拿来使用 携程官网提供的java方法,配置好后,请求成功,返回的是xml形式的一串String类型的字符串,怎么才能拿来使用? 解决方案 用xml解析库,或者反序列化成对象后就可以用了. 解决方案二: 用xml解析库,或者反序列化成对象后就可以用了. 解决方案三: google java xml解析.http://bbs.csdn.net/topics/290027113 http://developer.51cto.com/art/20

网银-网站引入各大银行支付接口

问题描述 网站引入各大银行支付接口 公司网站要加入支付功能,之前没做过,不了解流程,是否去开户行办理什么的,做的朋友给讲解一下,详细点最好谢谢 解决方案 只需要引入支付宝或者财付通就好了,不要尝试去和银行对接,没必要