`
hqs7636
  • 浏览: 216255 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

接 口 2.014

阅读更多
接口声明:
interface 标识符 接口体
interface 标识符 :上层接口 接口体
上层接口
标识符
标识符 , 上层接口

接口体:
{ 多个声明定义 }

接口(Interface)描述的是继承自某个接口的类所必须实现的一系列函数。一个接口的实现类可以被转换成对该接口的引用。接口相当于操作系统对象,如 Win32 的COM/OLE/ActiveX,所显露的接口。

接口不能由类派生,只能派生自其它接口。类不能多次从一个接口派生。

interface D
{
void foo();
}

class A : D, D // 错误,多重接口
{}

不允许创建接口的实例。
interface D
{
void foo();
}
...

D d = new D(); // 错误,不能创建接口的实例

接口成员函数不能有实现。

interface D
{
void bar() { } // 错误,不允许实现
}

继承接口的类必须实现接口中的所有函数:

interface D
{
void foo();
}
class A : D
{
void foo() { } // 正确,提供了实现
}
class B : D
{
int foo() { } // 错误,没有提供 void foo() 实现
}

接口可以被继承,其中的函数可以被重写:

interface D
{
int foo();
}
class A : D
{
int foo() { return 1; }
}
class B : A
{
int foo() { return 2; }
}
...
B b = new B();
b.foo(); // 返回 2
D d = cast(D) b; // 正确,因为 B 继承了 A 的 D 实现
d.foo(); // 返回 2;

接口可以在派生类中重新实现:
interface D
{
int foo();
}
class A : D
{
int foo() { return 1; }
}
class B : A, D
{
int foo() { return 2; }
}
...

B b = new B();
b.foo(); // 返回 2
D d = cast(D) b;
d.foo(); // 返回 2
A a = cast(A) b;
D d2 = cast(D) a;
d2.foo(); // 返回 2,尽管它是 A 的 D,不是 B 的 D

如果类要重新实现接口,必须重新实现接口的所有函数,不能从父类中继承:
interface D
{
int foo();
}
class A : D
{
int foo() { return 1; }
}
class B : A, D
{
} // 错误,接口 D 没有 foo()

2.014
Const and Invariant Interfaces

If an interface has const or invariant storage class, then all members of the interface are const or invariant. This storage class is not inherited.

13.1 COM 接口

接口的一个变体是 COM 接口。按照设计,COM 接口被为直接映射到 Windows COM 对
象。任何 COM 对象都由一个 COM 接口表示,任何带有 COM 接口的 D 对象都可以被外
部 COM 客户端使用。

按定义,COM 接口从 std.c.windows.com.IUnknown 接口派生。

COM 接口与普通 D接口的不同之处在于:
• 它从 std.c.windows.com.IUnknown 接口派生。
• 它不能成为 Delete表达式 的参数。
• 引用不能向上转型为封闭的类对象,也不能向下转型为从它派生的接口。为了达到这
个目的,必须按照标准的 COM 风格为接口实现一个合适的 QueryInterface()
方法。





。。。。。。。。。。。。。。
分享到:
评论

相关推荐

    乐贝熊人工智能机器人说明书.doc

    2.蓄电池为6V/1.3安时,在二公斤承重下可连续工作2小时以上. 3.车身支架由2毫米厚镀锌铁板冲压而成,在其上的11个铜固定锣孔可固定主电路板 和用户自制的支架及动作机构.车身支架的前部和后部均有传感器固定孔 二....

    可视手机方案设计.doc

    输入信号经第一片74121 (Cext=0.014μF)产生脉冲宽度为200ns的信号,信号由VO负端输出,与输入信号同时通 过与门后,产生比输入信号延迟200ns的信号。由与门输出的信号经过第二片74121(Ce xt=0.043μF)后,产生...

    VB编程资源大全(源码 其它3)

    o029_snow.zip 一个雪花飘落例子(3KB) 626,o028_zoomsys.zip 类似画图放大镜的东西(2KB) 627,o027_wiz2.zip 制作应用程序向导的例子(类似安装程序的界面)!(5KB) 628,o025_StopWatch.zip “跑表...

    酷开刷机升级 42K1 55K1 K1Y K1TY K1T 系统强刷 8A13强刷包 酷开4.21系统 V014.012.181

    3、请确保电视不是待机,然后关闭电源,插上U盘(建议插最上面主口); 4、长按电视机背后的 确定/待机 按键,通电,等30-60秒,屏幕出现2个齿轮相互转动即可; 如长按 确定/待机 按键,没有出现2个齿轮相互转动的...

    操作手册-VoIP服务器-Avaya语音服务器系统安装配置文档.docx

    连接端口为下面的左数第一个端口 使用交叉线缆连接S8700Service端口(eth2口),设置笔记本ip为192.11.13.5 255.255.255.252 telnet 192.11.13.6进入软件安装界面,开始安装 XX版本是R014x.00.5.742.0,图中只为...

    VB编程资源大全(源码 网络)

    i012.zip 如何在vb中调用i/o口的例子(10KB) 122,i011.zip 演示连接/断开network(3KB) 123,i010.zip chat程序例子(12KB) 124,i009.zip 简单的邮件发送例子 (13KB) 125,i008.zip 启动一个...

    VB编程资源大全(源码 其它2)

    o029_snow.zip 一个雪花飘落例子(3KB) 626,o028_zoomsys.zip 类似画图放大镜的东西(2KB) 627,o027_wiz2.zip 制作应用程序向导的例子(类似安装程序的界面)!(5KB) 628,o025_StopWatch.zip “跑表...

    VB编程资源大全(源码 其它1)

    o029_snow.zip 一个雪花飘落例子(3KB) 626,o028_zoomsys.zip 类似画图放大镜的东西(2KB) 627,o027_wiz2.zip 制作应用程序向导的例子(类似安装程序的界面)!(5KB) 628,o025_StopWatch.zip “跑表...

    VB编程资源大全(源码 其它4)

    o029_snow.zip 一个雪花飘落例子(3KB) 626,o028_zoomsys.zip 类似画图放大镜的东西(2KB) 627,o027_wiz2.zip 制作应用程序向导的例子(类似安装程序的界面)!(5KB) 628,o025_StopWatch.zip “跑表...

    PID算法的运用

    014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 ...

Global site tag (gtag.js) - Google Analytics