Assembly assembly = Assembly.GetCallingAssembly();
assembly.CreateInstance("MyType");
和
Activator.CreateInstance(typeof(MyType));
好的,Activator.CreateInstance可以是通用的,无需转换你创建的实例,但是什么时候才能使用另一个?
答案 0 :(得分:2)
基于字符串的版本仅在当前程序集的根命名空间(因为不包含命名空间)中查找(因为不包括程序集名称),以及一些系统程序集。基于类型的版本已经知道要使用的类型,因此不需要搜索。它可以在任何命名空间或程序集中,但typeof的含义是你也可以使用“new”。
当您在运行时提供Type时,Type方法更有意义,但通常 不接近对象创建。
答案 1 :(得分:2)
在第一个实例中,您可以使用该方法动态创建实例,而无需在运行时知道类型。作为第二个,您在编写代码时需要知道类型。
答案 2 :(得分:2)
一个明显的“问题”是前者是字符串类型的,这很少是一件好事,但它具有运行时类型检查的情境优势,因此你有一定程度的活力。就个人而言,重构因素大多超过动态设计问题。