1

まず、私が計画している (そして以下で説明する) 方法が必ずしもこれを行うための「最良の」方法であるかどうかはわかりません。そのため、提案をお待ちしています。実行時にハードウェア モニターから情報を収集する機能を追加する必要があるアプリケーションがあります。この通信フレームワークを拡張可能な方法で構築して、異なる通信プロトコルで複数の異なるモニターをサポートできるようにする必要があります。

私の計画は、それぞれが同じメソッドを実装する異なるモニターごとにクラスを作成することでした。以下のようになります。

Monitor1.vb:

Public Function GetHR() as integer
    //Code specific to interact with Monitor 1
    return HR as integer
End Function

Monitor2.vb:

Public Function GetHR() as integer
    //Code specific to interact with Monitor 2
    return HR as integer
End Function

次に、実装ページでアクティブなモニターを選択し、Implementation.vb 関数を呼び出します。

ActiveMon = Monitor1
CurrentHR = ActiveMon.GetHR()

これがアクティブなクラスを設定するための許容可能な方法である場合、どのように設定しますか (単純に変数を設定する上記の例は正しい方法ではないと推測しています)。これが最善の方法ではない場合、どうすればよいですか?

4

1 に答える 1

2

一般に、このタイプのものでは、インターフェイスまたは継承を使用する必要があります。クラスに共通の共有コードがある場合は、継承の方が適しています。一般的なメソッドを提示する必要があるだけであれば、インターフェースは問題なく機能します。

Interface IMonitor
    Function GetHR() as Integer
End Interface

Public Class Monitor1
    Implements IMonitor

    Public Function GetHR() as Integer Implements IMonitor.GetHR
        ' Do Stuff
        Return someValue
    End Function
End Class

Public Class Monitor2
    Implements IMonitor

    Public Function GetHR() as Integer Implements IMonitor.GetHR
        ' Do other Stuff
        Return someValue
    End Function
End Class

次に、インターフェイス タイプの変数を取得して、それに割り当てることができます。

Dim myMonitor as IMonitor
myMonitor = new Monitor1()
Dim result = myMonitor.GetHR() ' Some result
myMonitor = new Monitor2()
result = myMonitor.GetHR()     ' Some other result
于 2013-01-29T21:10:27.200 に答える