繁体   English   中英

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

[英]What is the difference in these 2 underlying calls to create an instance?

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

               Activator.CreateInstance(typeof(MyType));

好了,Activator.CreateInstance可以是通用的,从而无需强制转换您创建的实例,但是什么时候可以对另一个使用?

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

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

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

一个明显的“问题”是前者是字符串类型的 ,这很少是件好事,但是它具有在运行时类型检查中的情况优势,因此您具有一定的活力。 就个人而言,重构因素最重要的是动态设计问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM