我希望像这样发生魔法......
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();
哦,我的......
答案 0 :(得分:0)
你有两个问题:
Dictionary<string,type>
并填充它;或者你可以为每个类附加一个属性,显示它处理的“动词”。完成后,您可以使用Activator.CreateInstance
(在运行时)创建未知类的实例。这将返回object
。IRunnable
或其他东西),或者使用dynamic
,这样可以为您打字。