2013-07-29 44 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操作碼。