1

我有一个 MustInherit 类,它以通用高级表示形式表示可编程泵。

然后我在这个基类中有一个 MustOverride 函数 SetupTimeProgram。

正如我从 Overrides 定义中读到的,我必须有一个“匹配签名”。此声明的签名必须与它覆盖的属性或过程的签名完全匹配。这意味着参数列表必须具有相同数量的参数、相同的顺序、相同的数据类型。”</p>

这个函数的参数是我必须传递给泵的 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 方法,以便为所有泵编写相同的代码。这样,使用该类的人只应注意以正确的方式和格式传递参数。

我想知道这是否是正确的方法。

4

1 回答 1

3

您可以为参数使用接口,将DoSomething_ADoSomething_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

这边走:

  1. 用户必须将有效值传递给ITimeProgram方法
  2. ITimeProgram实例必须知道如何DoSomething
于 2013-08-14T08:43:42.620 回答