创建实例的这两个底层调用有什么区别?

时间:2010-12-03 14:56:58

标签: c# .net

               Assembly assembly = Assembly.GetCallingAssembly();
               assembly.CreateInstance("MyType");

               Activator.CreateInstance(typeof(MyType));

好的,Activator.CreateInstance可以是通用的,无需转换你创建的实例,但是什么时候才能使用另一个?

3 个答案:

答案 0 :(得分:2)

基于字符串的版本仅在当前程序集的根命名空间(因为不包含命名空间)中查找(因为不包括程序集名称),以及一些系统程序集。基于类型的版本已经知道要使用的类型,因此不需要搜索。它可以在任何命名空间或程序集中,但typeof的含义是你也可以使用“new”。

当您在运行时提供Type时,Type方法更有意义,但通常 不接近对象创建。

答案 1 :(得分:2)

在第一个实例中,您可以使用该方法动态创建实例,而无需在运行时知道类型。作为第二个,您在编写代码时需要知道类型。

答案 2 :(得分:2)

一个明显的“问题”是前者是字符串类型的,这很少是一件好事,但它具有运行时类型检查的情境优势,因此你有一定程度的活力。就个人而言,重构因素大多超过动态设计问题。