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

我强烈建议使用类似Unityor的依赖注入库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 回答