我有一个MustInherit类,代表一个通用高级表示的可编程泵。
然后我在这个基类中有一个MustOverride函数SetupTimeProgram。
当我从Overrides定义中读到时,我必须有一个“匹配签名”。此声明的签名必须与其覆盖的属性或过程的签名完全匹配。这意味着参数列表必须具有相同数量的参数,顺序相同,数据类型相同。“
这个函数的参数是我必须传递给泵的TimeProgram,但是每个泵都有不同的方法来设置自己的时间程序。出于这个原因,我无法在高级别定义参数的类型。
所以我在基类中做了:
Public MustOverride Function SetupTimeProgram(ByRef TimeProgram As Object) As Boolean
其中TimeProgram被定义为通用对象。
然后在SetupTimeProgram的每个单独实现中,我做了类似的事情:
实施-A
Public Overrides Function SetupTimeProgram(ByRef Program As Object) As Boolean
Return DoSomething_A (Program.Time(), Program.Steps())
End Function
实施-B
Public Overrides Function SetupTimeProgram(ByRef Program As Object) As Boolean
Return DoSomething_B (Program.Line(), Program.MaxPressure, Program.MinPressure)
End Function
换句话说,每个实现中的参数完全不同。
我的目标是创建一个通用的SetupTimeProgram方法,以便为所有泵编写相同的代码。通过这种方式,谁使用该类应该只关心以正确的方式和格式传递参数。
我想知道这是否是正确的方法。
答案 0 :(得分:3)
您可以使用参数的接口,将DoSomething_A
和DoSomething_B
方法的职责放在具体的类实现中。
Interface ITimeProgram
Sub DoSomething()
End Interface
Class TimeProgramA : Implements ITimeProgram
Public Property Time As DateTime
Public Property Steps As Integer
Public Sub DoSomething() Implements ITimeProgram.DoSomething
' do something with the Time and steps properties
End Sub
End Class
Class TimeProgramB : Implements ITimeProgram
Public Property Line As String
Public Property MaxPressure As Integer
Public Property MinPressure As Integer
Public Sub DoSomething() Implements ITimeProgram.DoSomething
' do something with the Line and min/max pressure properties
End Sub
End Class
然后,不要使用抽象(MustOverride
)方法,而是像
Public Function SetupTimeProgram(ByRef Program As ITimeProgram) As Boolean
Return Program.DoSomething()
End Function
这样:
ITimeProgram
传递给方法ITimeProgram
实例必须知道如何DoSomething