请问一个接口设计、使用的有关问题,高手

请教一个接口设计、使用的问题,在线等高手!
请问一个接口设计、使用的有关问题,高手

这是为了描述各种硬件设备而设计的,应用的时候有点问题。

接口:A类设备 d1 = new 类:1号设备
接口:A类设备 d2 = new 类:2号设备

可是无法直接调用接口:串口或者接口:网口中的方法
暂时有一个变通的办法就是

(d1 as 接口:串口).Port = 10;

(d2 as 接口:网口).Port = 10;
(d2 as 接口:网口).IP ="192.168.0.2";

在这里我想请教两个问题
1、我这样设计接口合理吗?
2、我这样使用接口合理吗?
------解决思路----------------------
只是感觉第二层接口可能有些多余,接口有差别,可以分成多个接口,一个类可以继承多接口的
------解决思路----------------------
类:1号设备 d1 = new 类:1号设备
类:2号设备 d2 = new 类:2号设备


或者

接口:串口 d1 = new 类:1号设备
接口:网口 d2 = new 类:2号设备


滥用抽象是不对的。既然你的d1被当作串口用,你的被当作网口用,就不应该再空洞地使用什么更抽象的概念,而应该具体化。
------解决思路----------------------
晕死,用上继承不好吗
什么都用接口吗
这不是典型的为了接口而接口了吗
------解决思路----------------------
请问一个接口设计、使用的有关问题,高手

楼主你的意是 一种设备可以有多种接口吧,好比一台电视机的输入口有PIN口,HTMI口,这两个口都是为电视输入数据源?
------解决思路----------------------
引用:
Quote: 引用:

只是感觉第二层接口可能有些多余,接口有差别,可以分成多个接口,一个类可以继承多接口的


我本意是顶层接口是电器接口,下层接口是电视机接口、冰箱接口,再往下走就是具体的海尔电视机、长虹电视机这样的结构。
但是海尔电视机是VGA接口的,长虹电视机是HDMI接口的,所以我这样设计了。

但这样使用起来很不方便,如果我专门给海尔电视机VGA做一个接口,这个接口继承自电器接口和VGA接口,那么可以解决这些问题,但我觉得更多余。


当你实例化对象时,将引用变量d1、d2声明为抽象的接口,就是一种多余的做法。

如果我们声明为
类:1号设备 d1 = new 类:1号设备
类:2号设备 d2 = new 类:2号设备
ABCD.测试最合适的波特率参数(d1)

然后把d1传给一个针对串口的处理方法,例如
class ABCD
{
    public static void 测试最合适的波特率参数(I串口 x)
    {
           ........

这才是多态的概念。

也就是说,把d1声明为什么“接口”其实根本是多余的,纯粹是滥用“多态”这个概念。
------解决思路----------------------
应该可以的,使用的时候判断一下是否为某接口:
if(d1 is 串口) (d1 as 串口).xxx = yyy;

------解决思路----------------------
引用:
Quote: 引用:

请问一个接口设计、使用的有关问题,高手

楼主你的意是 一种设备可以有多种接口吧,好比一台电视机的输入口有PIN口,HTMI口,这两个口都是为电视输入数据源?

是的,就是这个意思。


那好办呀,只要两个接口就可以了,不要写那么多一层一层的。就定义
网口电视接口
串口电视接口

然后你的电视
长虹电视(两种接口都有):网口电视接口,串口电视接口// 在这里实现两种接口
{

}
长虹网口电视:网口电视接口
{

}
没必要套那么多层太多层你自己也麻烦。
------解决思路----------------------
滥用接口,其实就是“反过来”使用多态。也就是在不需要声明更加抽象类型的变量时去声明,这是不应该的。

当你写一个针对“A类设备”的方法时,你明知道接下来的处理是需要确保是“A类设备”才有的操作,你就不应该把对象引用变量声明“串口”。也就是说,写程序应该尽量具体化才是好的。这是最起码的道理,规矩。

真正会使用抽象的人也不是滥用抽象的。