1

一般的な高レベル表現でプログラム可能なポンプを表す MustInherit クラスがあります。

次に、この基本クラスに MustOverride Function 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_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

次に、abstract(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 に答える