【问题标题】:What is the difference between Activator.CreateInstance and a standard constructor?Activator.CreateInstance 和标准构造函数有什么区别?
【发布时间】:2012-11-08 02:10:58
【问题描述】:

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

1.

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

2.

Foo foo = new Foo()

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

Hereherehere

【问题讨论】:

  • 前者比后者慢
  • 顺便说一句,如果您花时间很好地格式化您的问题并使其尽可能可读,那么它更有可能得到回答和赞成。

标签: c# wpf c#-4.0


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        相关资源
        最近更新 更多