2016-07-11 14 views
2

私のプロジェクトでは、複数のモジュールがあり、すべてが同じサブセットを使用しています。アクセス方法とリーダーの出力が異なるので、私は別のブランドのRFIDカードリーダーのために私が使用する各モジュールを使用しますが、全く同じ手順に従います。私のアプリケーションでは、これらのステップを汎用コールする必要がありますが、コールするモジュールを決定するアプリケーション設定があり、すべてのプロジェクトをプロジェクトに変更する必要がありません。その後変数をモジュールに設定する

Public CARD_READER_MODULE As ModMTI 'Which doesn't work 

CARD_READER_MODULE.Connect() 
... etc 

それともこれを行うには良い方法があります:私のような何かをしたいですか?

+0

あなたのモジュールにそのような名前をつけないでください*。アッパーラクセルケースAKAパスケースを使用する: 'CardReaderModule'。 –

+0

ModMTIは私のモジュール、CARD_READER_MODULEはアプリケーションに使用するモジュールを教えてくれる定数です – Alex

+0

私の悪いです。そのように定数に名前を付けないでください。パスカルの場合。 –

答えて

5

説明した設計では、使用するメソッドを記述するインタフェースを使用し、このインタフェースを各タイプのデバイス用の新しいクラスに実装する必要があります。

だから例えば、あなたのインターフェイスは、次のようになります。

Public Class DeviceType1 
    Implements IDevice 

    Public Sub Connect() Implements IDevice.Connect 
     'connect to this type of device here 
    End Sub 
End Class 

の美しさ:

Public Interface IDevice 
    Sub Connect() 
End Interface 

が続いてここでは、各デバイスの特定実装されている各デバイス用のクラスを作成しますこのデザインでは、 'IDevice'タイプの変数を定義して、それを特定のタイプとしてインスタンス化することができます:

Dim dev As IDevice 
dev = New DeviceType1 
dev.Connect() 
0

私はあなたがしたいことを達成するためのより良い方法を見つけようとするべきだと思います。

あなたのRFIDリーダーのためにpublic classを作成し、そのクラスの中でその特定のリーダーに関連するプロパティと機能を持たせることができます。

Public class Readers 

Public function sharedFunction() 
End function 

    Public class Reader1 
    End Class 

End class 

クラス(オブジェクト)のインスタンスを作成せずに関数にアクセスしたい場合は、I.Eを使用します。コードを共有し、クラス内で「共有」機能を使用します。

自分のクラスのコンストラクタにパラメータを追加して、どのリーダ(子クラス)と連携したいかを指定します。あなたの親クラスは多くの子(リーダー)クラスと、それらすべてのクラスが使用できる共有関数のセットを持つことができます。

+0

モジュールに何が問題なのですか?これはC#の 'static'クラスとまったく同じです。私はC#で静的なクラスを避けるべきだと言っている多くの議論があるとは思わないでしょうか?モジュールではないにしても、クラスのすべてのメンバーを強制的に共有する "より新しい、より良い"方法は何ですか? –

+0

モジュールまたはクラスでは、私は同じSubを持つ8つのすべてを持っているだろう、私はジェネリックコールを作成し、コールするモジュール/クラスをアプリケーションに伝える単一の場所/変数を持っている。 – Alex

+1

インテリジェントクラスを作成しますか?パラメータを渡して、どちらのリーダーで作業するかを教えてください。クラス内では、さまざまな読者のための子クラスと、それらのすべてが使用できる共有関数の一組(再利用)を持つことができます –

関連する問題