我一般都是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 ...
答案 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
,它允许您的应用程序尽可能通用。