3

私がやりたいことは次のようなものです(すべてのオブジェクトクラスには共通のインターフェースがあります):

MyDict.Add("A", MyAObjectClass); // Not an instance
MyDict.Add("B", MyBObjectClass);
MyDict.Add("C", MyCOjbectClass);
String typeIwant = "B"; // Could be passed to a function or something
MyCommonInterface myobject = MyDict[typeIwant]();

どうすればこのようなプログラムを作成できますか?

これの目的は、辞書に格納するすべての型のインスタンスを作成する必要がなく (かなりの数になる可能性があります)、実際に使用する型のみをインスタンス化することです。

4

2 に答える 2

5

Type オブジェクトを使用して型情報を保存できます。

var dict = new Dictionary<String, Type>();

dict.Add("A", typeof(TextBox));
dict.Add("B", typeof(Button));

次のようにオブジェクトを作成します。

object a = Activator.CreateInstance(dict["A"]);

これは、パラメーターなしのコンストラクターを持つ型でのみ機能します。たとえば、new TextBox(). 型に同じ引数を取るコンストラクターがある場合は、引数を後に追加するdict["A"]か、配列を渡すことができます。

于 2012-11-02T03:23:00.643 に答える
3

Unityまたはのような依存性注入ライブラリを使用することを強くお勧めしWindsor Castleますが、どうしても必要な場合は、次のようにする必要があります。

Dictionary<string, System.Type> MyDict = new Dictionary<string, System.Type>();
MyDict.Add("A", typeof(MyAObjectClass));
MyDict.Add("B", typeof(MyBObjectClass));
MyDict.Add("C", typeof(MyCObjectClass));

string typeIwant = "B";
var myobject = Activator.CreateInstance(MyDict[typeIwant]);
于 2012-11-02T03:26:13.047 に答える