What I want to do is something like the following (All object class have a common interface):
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]();
How could I program something like this?
The purpose of this is to not have to create instances of every single type I will store in my dictionary (could be quite a bit of them) and instead only instance the one I'm actually going to use.
You can store type information with a Type object:
var dict = new Dictionary<String, Type>();
dict.Add("A", typeof(TextBox));
dict.Add("B", typeof(Button));
and create objects from it like this:
object a = Activator.CreateInstance(dict["A"]);
This will only work with types with a parameterless constructor. For instance, new TextBox()
. If your types have constructors that take the same arguments, you can add the arguments after dict["A"]
or pass an array.
I strongly recommend using a dependency injection library like Unity
or Windsor Castle
, but if you absolutely must, then you should do something like this:
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]);
来源:https://stackoverflow.com/questions/13188784/store-class-definition-in-dictionary-instance-later