2013-07-29 46 views
-5
var foo1 = new SomeClass(); 
SomeClass foo2 = new SomeClass(); 

这两行代码是否转换为相同的IL,并且dynamic与它们有何不同?我知道dynamic使用某种叫做后期绑定的技术,但它是如何工作的?var与常规对象声明C#

+3

这看起来像一个工作...... Skeet。 – christopher

+1

它们是一样的,在IL中没有区别。问题被多次询问和回答。 –

+0

你的问题实际上是关于'var'(按照标题)还是'dynamic'(按照身体)?它们完全不同 - 并且都被广泛记录。 –

回答

8

这两行代码是否转换为相同的IL?

以及如何动态从他们身上有什么不同?

直到您显示成员访问权限时无意义;例如:

dynamic foo3 = new SomeClass(); 
foo3.SomeMethod(); 

这里,SomeMethod完全在运行时经由任一动态调度层或上反射的顶部位于一个高速缓存元编程层分辨(取决于哪些功能SomeClass有)。在常规(非动态)IL中,它只是一个单一的callvirt操作码。