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