首页 新闻 会员 周边 捐助

C#接口的作用

0
悬赏园豆:10 [已解决问题] 解决于 2015-10-12 18:24

开闭原则。比如说有一个打印机的接口Printer,三个不同的打印机类HP、Epson、Canon实现了打印机接口的打印方法print(),在Output类中有类型为Printer的变量p。不管系统与那种类型的打印机相连,输出时都调用p.print()方法。而p的具体类型在运行时由系统确定。我只想问怎么理解“p的具体类型在运行时由系统确定”这句话。系统运行了是怎么确定p的具体类型的?希望各位大师指点一下,举个例子或是提供关键点的代码更好。十分感谢!

十点阳光的主页 十点阳光 | 初学一级 | 园豆:121
提问于:2015-10-12 13:14
< >
分享
最佳答案
1
IPrinter myPrinter;
Switch(something)
{
    case 1:
          myPrinter=new HPPrinter;
    case 2:
          myPrinter=new CanonPrinter;
    case 3:
          myPrinter=new EpsonPrinter;
}

myPrinter.Print();

简单就是这样,复杂一点的就是配置动态构建对象。

收获园豆:7
爱编程的大叔 | 高人七级 |园豆:30844 | 2015-10-12 13:40

请问,这个something是什么?

十点阳光 | 园豆:121 (初学一级) | 2015-10-12 15:39

@张金棒: something就是条件,可能是数据库,可能是配置文件,可能是用户选择。

好像你提供三个打印机,用户选择了2,然后你就驱动CanonPrinter进行打印。

Print Interface(打印接口),通用方法是Print,

所有的打印类HPPrinter, CanonPrinter, EpsonPrinter都需要实现IPrinter接口方法Print。

所有下面就可以不管是啥打印机,

myPrinter.Print (myPrinter是一个实现了IPrinter接口的类)

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-10-12 16:32
其他回答(2)
0

“p的具体类型在运行时由系统确定”:p的具体类型看在代码中指向了哪个对象实例,例如:Printer p = new HP(),在运行时,运行时会在堆中给HP对象分配内存,并将分配后的实例的指针指向p。在调用p.print()的时候,运行时会根据指针去调用HP实例的print方法。

收获园豆:2
SauronKing | 园豆:208 (菜鸟二级) | 2015-10-12 14:22
0

就和USB接口一样,当你连接上HP打印机时(连接的具体类型在运行时),USB接口访问到是HP;当你连接到U盘时,系统确定为U盘。

收获园豆:1
JackWang-CUMT | 园豆:2866 (老鸟四级) | 2015-10-12 14:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册