0

そんな魔法が起きて欲しい…

class SomeClass {}

public static void main()

    MagicFunctionOrMacrosOrSomethingThatGetTypeOf("SomeClass") some_var = null;<br />
}

多分それはクレイジーですが、それは可能ですか?
多くのクラスがあるため、クレイジーな大きなスイッチケースを避けるために必要ですが、コードのある時点で、どのクラスを作成するかを伝えることができません。

例を見てみましょう:
私は基本クラスを持っています:
class baseCLASS {}

多くの子クラスがあります:
class class1 : baseCLASS {}
class class2 : baseCLASS {}
...
class classn : baseCLASS {}

外部からイベント ハンドラに渡されるフラグがあります:
string class_name; //実際には、辞書内の文字列名に接続する必要がある int フラグを使用します。

これを作ることを余儀なくされました:

   switch(class_name)

   case "class1":
      class1 some_class = new class1();
      some_class.RunHandler();
      break;
   case "class2":
      class2 some_class = new class2();
      some_class.RunHandler();
      break;
   case "classn":
      classn some_class = new classn();
      some_class.RunHandler();
      break;
   }


その大きな switch ステートメントを次のようなものに置き換えたいと思います。

MagicFunctionOrMacrosOrSomethingThatGetTypeOf(class_name) some_var = null;
... some initialization actions with some_var
some_var.Build();
some_var.RunHandler();

オーマイ...

4

1 に答える 1

0

2 つの問題があります。

  1. ユーザー入力が与えられたら、さまざまなクラスのオブジェクトをインスタンス化する必要があります。このために、ユーザー入力と .NET タイプ名の間のマッピングが必要です。まず、規則を使用できます。型名が入力と一致することを確認してください。または、 を使用してDictionary<string,type>入力することもできます。または、各クラスに属性を付けて、どの「動詞」を処理するかを示すことができます。それが完了したら、Activator.CreateInstance(実行時に) を使用して不明なクラスのインスタンスを作成できます。これは を返しますobject
  2. 不明なオブジェクトのメソッドを呼び出しています。基本クラスまたはクラスの共通インターフェイス (たとえばIRunnable、または何か) を定義するかdynamic、ダックタイピングを提供する を使用します。
于 2012-02-05T19:09:30.790 に答える