C# 隐藏派生类

C# 隐藏派生类,c#,inheritance,C#,Inheritance,一般来说,我对C或OOP是新手,我想知道下一步继承是否可行: Link myLink; myLink = new LinkUdp("10.0.0.1"); myLink = new LinkSerial("10.0.0.1"); 我想建立一个通信链接,并希望能够使用udp或串行通信。 因此,我用方法定义了一个抽象基类“Link”。open、.close、.send、.receive 从这个基类中,我派生了两个类“LinkUdp”和“LinkSerial”,并覆盖了这4个方法 现在是否可以直接将

一般来说,我对C或OOP是新手,我想知道下一步继承是否可行:

Link myLink;
myLink = new LinkUdp("10.0.0.1");
myLink = new LinkSerial("10.0.0.1");
我想建立一个通信链接,并希望能够使用udp或串行通信。 因此,我用方法定义了一个抽象基类“Link”。open、.close、.send、.receive 从这个基类中,我派生了两个类“LinkUdp”和“LinkSerial”,并覆盖了这4个方法

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

Link myLink=新Link10.0.0.1//现在编译器知道 使用LinkUdp类 Link myLink=new LinkCOM1//编译器知道 使用LinkSerial类的步骤

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

LinkUdp myLink=新的LinkUdp10.0.0.1

希望这足够清楚。。。 谢谢

编辑: 我想使用“Link”类,这样我就可以将对象传递给子类,而无需编写两种不同的实现: 所以在这之后我有一节课

CommunicationHandler myCMM=新的CommunicationHandlermyLink


然后这个处理程序就不必担心我使用udp或串行…

除非您使用反射或工厂为您创建正确的实例,否则编译器无法仅基于变量名来选择要实例化的类型

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

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

无论接下来发生什么,myLink都可以是其中之一。使用的类型是Link,它允许应用程序尽可能通用。

除非使用反射或工厂为您创建正确的实例,否则编译器无法仅基于变量名选择要实例化的类型

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

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

无论接下来发生什么,myLink都可以是其中之一。使用的类型是Link,它允许应用程序尽可能通用。

不,类的构造函数只能返回该类的类型。您也可以使用静态创建函数工厂模式:

Link myLink = Link.Create("10.0.0.1");
乙二醇


不,类的构造函数只能返回该类的类型。您也可以使用静态创建函数工厂模式:

Link myLink = Link.Create("10.0.0.1");
乙二醇


我认为您必须实现工厂模式使用这个链接来理解如果链接是一个抽象类,那么您永远不能直接创建它的实例。新链接。。。无效。我认为您必须实现工厂模式使用此链接来理解如果链接是一个抽象类,那么您永远不能直接创建它的实例。新链接。。。无效。因此,正如我在上面的编辑中所述:我可以将此myLink传递给另一个方法,并且调用myLink不会有任何问题。例如,Open。只要LinkUdp.Open和LinkSerial.Open都存在?那么这就是我问题的答案。谢谢,不用担心。只需将Link用作参数的类型。这些方法应该在基类中定义,可能在派生类中使用实现进行抽象。因此,正如我在上面的编辑中所述:我可以将此myLink传递给另一个方法,并且调用myLink不会有任何问题。例如Open。只要LinkUdp.Open和LinkSerial.Open都存在?那么这就是我问题的答案。谢谢,不用担心。只需使用Link作为参数的类型。这些方法应该在基类中定义,可能在派生类中使用实现进行抽象。