ContructorInfo.Invoke vs delegate

时间:2011-02-25 14:17:15

标签: .net delegates constructor

我在SO上看到了几个关于让代表创建对象而不是使用ConstructorInfo.Invoke的问题。

以下是一个示例:Using a Delegate to call a constructor

我只是想知道为什么?如果它是性能方面的,为什么委托更快?

更新

我确实理解在创建委托时,您可以在重用它时删除验证。这是一次性能提升。

但是当通过委托调用构造函数时会发生这种情况吗?在做var a = new XXX()或其他什么时也一样?

ConstructorInfo.Invoke()new XXX()做同样的事吗? (无视任何验证)

使用Activator.CreateInstance()时,请执行与Constructor.Invoke()相同的操作(除了任何类型的查找/验证)。

我想我的问题归结为:可以用不同的方式创建对象(如不同的IL指令),还是使用相同的指令提及方法,但在实际创建之前使用不同类型的验证? / p>

1 个答案:

答案 0 :(得分:3)

有几个原因:

  • 在各个地方,您来提供代表。如果某些内容需要Func<T>,则不能只提供ConstructorInfo
  • 它是类型安全的 - 您可以保证将创建什么类型(或至少是兼容类型),并且您知道需要什么参数(如果有的话)。调用ConstructorInfo.Invoke,每次调用它时都会在执行时出错,而不仅仅是在创建委托时。
  • 它更快,因为在创建委托时,所有验证(访问,参数)等都是执行,而不是每次调用ConstructorInfo.Invoke方法时都会执行。