更改班级

时间:2018-01-06 10:52:01

标签: vb.net inheritance

我有一个包含很多辅助方法的类。我需要在实例化类的实例时创建串行连接或TCP连接。我还需要保留这个类的对象列表。它只是不同的传输类型。

 Public Class CommsClass
       Public Property master As SomeClassFromElsewhere 'This clearly isn't right

       Public Sub New(host as String, port As String)
           master = New SpecificTCPClassFromElsewhere
       End Sub

       Public Sub New (comPort as String)
           master = New SpecficSerialClassFromElsewhere
       End Sub

       Public Sub Read
          master.Read()
       End Sub

       Public Sub Write()
          master.Write()
       Sub

    End Class

    Public Sub Main
       Dim masters as List(Of CommsClass)
    End Sub

我可以用

Public Property master As Object

但是我在VS中失去了Intellisense,如果我知道我正确地做到这一点,我想我可以忍受,但它感觉不对。

我还可以从CommsClass继承两个新类(TCPCommsClass和SerialCommsClass),但这使得维护列表变得棘手。

没有定义" master"作为通用对象或创建通用对象列表,是否有更优雅的方式来实现我想要做的事情?

1 个答案:

答案 0 :(得分:0)

我觉得你在不必要地进行优化,并试图让CommsClass.Read()只调用master.Read() - 只是无缘无故地包装一个方法。也许考虑一个工厂方法,它接受一个参数来指定它是TCP还是串行,然后返回一个CommsClassTCP或一个CommsClassSerial。这两个类都继承了CommsClass。使CommsClass.Read为MustInherit,然后在CommsClassTcp和CommsClassSerial类中实现它。在某些时候,这些类必须分歧,不要与之斗争。根据您正在进行的通信类型,从TcpClient或SerialPort类中获取Stream可能就是您所追求的。