Activator.CreateInstance和标准构造函数之间有什么区别?

时间:2012-11-07 17:45:30

标签: c# wpf c#-4.0

以下两个例子之间的差异是什么? Activator的目的是什么,我为什么要使用它?

1

string objTypeName = "Foo";
Foo foo = (Foo)Activator.CreateInstance(Type.GetType(objTypeName));

2

Foo foo = new Foo()

我浏览了下面链接的页面,但没有得到清晰的图片。

Hereherehere

3 个答案:

答案 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创建它会更有意义(和可读性)