我在SO上看到了几个关于让代表创建对象而不是使用ConstructorInfo.Invoke
的问题。
以下是一个示例:Using a Delegate to call a constructor。
我只是想知道为什么?如果它是性能方面的,为什么委托更快?
我确实理解在创建委托时,您可以在重用它时删除验证。这是一次性能提升。
但是当通过委托调用构造函数时会发生这种情况吗?在做var a = new XXX()
或其他什么时也一样?
ConstructorInfo.Invoke()
与new XXX()
做同样的事吗? (无视任何验证)
使用Activator.CreateInstance()
时,请执行与Constructor.Invoke()
相同的操作(除了任何类型的查找/验证)。
我想我的问题归结为:可以用不同的方式创建对象(如不同的IL指令),还是使用相同的指令提及方法,但在实际创建之前使用不同类型的验证? / p>
答案 0 :(得分:3)
有几个原因:
Func<T>
,则不能只提供ConstructorInfo
。ConstructorInfo.Invoke
,每次调用它时都会在执行时出错,而不仅仅是在创建委托时。ConstructorInfo.Invoke
方法时都会执行。