1

下面两个例子有什么区别?的目的是什么Activator,我为什么要使用它?

1.

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

2.

Foo foo = new Foo()

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

这里这里这里

4

3 回答 3

2

Activator.CreateInstance即使不能直接访问它应该属于的类(例如反射),您也可以创建对象,因此您可以例如创建与另一个对象相同类型的对象:

var duplicate = Activator.CreateInstance(original.GetType());

如果您不完全了解原始对象的类别,这是不可能的。

于 2012-11-07T17:58:52.350 回答
2

如果您知道将在设计时实例化的类型,则无需使用Activator.CreateInstance. 所做Activator.CreateInstance的只是调用公共默认构造函数。

Activator.CreateInstance是“后期绑定”的一种形式,如果您想实例化Type您在设计时不知道的 a,它会很有用。如果您在设计时已经知道具体类的类型,那么您肯定希望使用“早期绑定”来实例化它,它更快、更简单且显而易见。即直接调用适当的构造函数。

于 2012-11-07T18:10:58.477 回答
1

Activator.CreatInstance 将调用类 Foo 的默认构造函数。

唯一的区别是,如果你在类型之前知道你的类型,那么创建它new会更有意义(和可读性)

于 2012-11-07T17:58:53.843 回答