隐藏派生类

时间:2016-04-01 12:39:53

标签: c# inheritance

我一般都是C#或OOP的新手,并且想知道接下来是否可以继承:

我想设置通信链接,并希望能够使用udp或串行通信。 所以我用方法.open,.close,.send,.receive定义了一个抽象基类'Link' 从这个基类我导出2个类'LinkUdp'和'LinkSerial'并覆盖4个方法

现在是否可以直接将带有对象的代码写入'Link'类?我的意思是:

  

链接myLink = new Link(“10.0.0.1”); //现在编译器知道了   使用LinkUdp类
  链接myLink = new Link(“COM1”); //编译器知道   使用LinkSerial类

或者我必须编写专用的代码:

  

LinkUdp myLink = new LinkUdp(“10.0.0.1”);

希望这很清楚...... 感谢

编辑: 我想使用'Link'类,所以我可以将对象传递给子类,而不必编写2个不同的实现: 所以在此之后我有一个班级

  

CommunicationHandler myComm = new CommunicationHandler(myLink);

然后这个处理程序不必担心我使用udp或serial ...

2 个答案:

答案 0 :(得分:7)

没有类的构造函数只能返回该类'类型。您也可以使用静态创建功能(工厂模式):

Link myLink = Link.Create("10.0.0.1");

例如

public static Link Create(string something)
{
    if (//determine that "something" is an IP address))
        return new LinkUdp(something);
    else
        return new LinkSerial(something);

}

答案 1 :(得分:1)

没有办法让编译器根据变量名选择要实例化的类型(除非你使用反射或工厂为你创建正确的实例)。

这是可能的,它显示了继承的一个好处:

Link myLink;
myLink = new LinkUdp("10.0.0.1");
myLink = new LinkSerial("10.0.0.1");

无论如何,myLink都可以是其中之一。使用的类型是Link,它允许您的应用程序尽可能通用。