WinForms、C# ベースのアプリケーションのアーキテクチャに関する質問があります。誰かがこれを解決する方法を教えてくれることを本当に願っています。
インターフェイス ITest1 または ITest2 またはその両方を実装するさまざまなクラスがあります。
class1 : ITest1
class2 : ITest1, ITest2
class3 : ITest2
アプリケーションの開始時に、ITest1 と ITest2 のアプリケーションのライフタイプ全体 (class1、class2、または class3) で使用するクラスをアプリケーションに指示する構成ソースがあります。
ITest1 test1;
ITest2 test2;
switch (configresult)
{
case "configuration1":
test1 = new class1();
test2 = new class2();
break;
case "configuration2":
test1 = new class2();
test2 = new class3();
break;
case "configuration3": // This happens the most!
test1 = new class2();
test2 = (class2)test1;
break;
}
ここで、実行時に特定のインターフェイスを実装するクラスを知りたいと思います。擬似コード:
if( test1 is implemented by class2 )
((class2)test1).Class2Method();
if( test2 is implemented by class1 )
((class1)test1).Class1Method();
インターフェイス変数を利用できるようにすることで、インターフェイスの実装に使用されるクラスを見つける方法はありますか?
実際のプログラムでは、40 以上のクラスによってまったく異なる方法で実装されている 10 を超えるインターフェイスがあるため、元のクラスにキャストバックする必要があるすべての瞬間に switch ステートメントを実行したくありません。
- - - - - - - - - アップデート!
いくつかの背景情報が問題を解決しやすくしていると思います。はい、それは私の設計に関する問題であるという Ed S. の意見に同意しますが、すべてを変更したいと思っています。
私の科学アプリケーションは、半導体を測定するために 40 以上の異なる科学機器をサポートしています。温度、電流、電圧、スイッチなど、何でも構いません。ユーザーが利用できる 10 の機能を定義しました: 温度、電圧、電流、スイッチングなど....これらはすべてインターフェイスに組み込まれています。ITemperature、IVoltage など...
すべてをこなせる楽器もあれば、パートだけをこなせる楽器もあります。ユーザーがサポートされている高品質の温度測定デバイスを持っている場合は、それを使用して ITemperature を実装しますが、温度も測定できる高価な電圧計を持っている場合は、同じ機器を使用して温度と電圧を測定します (したがって、機器は ITemperature を実装します)。および IVoltage)。すべてのインストゥルメントは非常に異なっており、1 つの抽象クラスですべてをカバーすることはほとんど不可能です。一部は Web インターフェイスで制御する必要があり、一部は USB で制御する必要があり、多くのことが異なると思います。そのため、インストルメント クラスに直接アクセスする必要がある場合があります (レジスタのリセット、初期化など)。これが私がやろうとしていることです。どんな提案でも大歓迎です。