我想要做的事情如下(所有对象类都有一个共同的接口):
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]();
我怎么能编写这样的东西?
这样做的目的是不必创建我将存储在我的字典中的每种类型的实例(可能是相当多的),而只是实例我实际将要使用的实例。
答案 0 :(得分: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"]
之后添加参数或传递数组。
答案 1 :(得分: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]);