具有通用对象参数的基类方法

时间:2013-08-14 08:31:51

标签: .net vb.net

我有一个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方法,以便为所有泵编写相同的代码。通过这种方式,谁使用该类应该只关心以正确的方式和格式传递参数。

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

1 个答案:

答案 0 :(得分: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