以下两个例子之间的差异是什么? Activator
的目的是什么,我为什么要使用它?
1
string objTypeName = "Foo";
Foo foo = (Foo)Activator.CreateInstance(Type.GetType(objTypeName));
2
Foo foo = new Foo()
我浏览了下面链接的页面,但没有得到清晰的图片。
答案 0 :(得分:2)
使用Activator.CreateInstance
即使无法直接访问它应该属于的类(例如Reflection),也可以创建对象,因此您可以创建与另一个对象相同类型的对象:
var duplicate = Activator.CreateInstance(original.GetType());
如果您不完全了解原始对象的类,则无法进行此操作。
答案 1 :(得分:2)
如果您知道将在设计时实例化的类型,则无需使用Activator.CreateInstance
。所有Activator.CreateInstance
都会调用公共默认构造函数。
Activator.CreateInstance
是“后期绑定”的一种形式,如果您想要在设计时实例化一个您不知道的Type
,则该形式非常有用。如果您在设计时已经知道具体类的类型,那么您肯定希望使用“Early Binding”实例化它,它更快,更简单,更明显。即直接调用适当的构造函数。
答案 2 :(得分:1)
Activator.CreatInstance将调用类Foo的默认构造函数。
唯一的区别是,如果您知道类型之前的类型,那么使用new
创建它会更有意义(和可读性)