如果有一个像'Painter'这样的类,并且有一个人需要用户能够创建这个类@ runtime的一个或多个实例,那么最好的方法是什么?
因此,每次用户点击按钮时,我们都需要一个新的画家对象?
或者每当用户输入“新画家”时,我们需要一个新的画家实例?
答案 0 :(得分:5)
您可以使用Type
从string
获得Type.GetType
。
获得Type
对象后,可以调用Activator.CreateInstance
来实例化它,或者调用Type.GetConstructors
,选择合适的构造函数然后调用它。
顺便说一下,Type.GetType
有两个“陷阱”:
mscorlib
中,否则您需要指定程序集名称以及带有版本信息的,如果它的名称是 如果您对相关程序集有引用,那么Assembly.GetType
可能是一种更简单的方法 - 您仍需要包含命名空间。
答案 1 :(得分:3)
我猜你的问题的要点是在用户输入之前类类型是未知的。否则,如果您想在每个按钮上单击一个新的Painter类,您只需处理按钮单击并执行“var newpainter = new Painter();
”。
因此,假设您需要动态创建未知类型的实例,可以使用反射在运行时执行此操作。
var newpainter = Activator.CreateInstance(Type.GetType("Painter"), args);