2011-11-20 37 views
5

我已經學會並檢查dynamic關鍵字的優勢,在C#4C#4.0'動態'關鍵字的優點和缺點?

任何機構可以告訴我的這個缺點。意爲:dynamic vs Var/Object/reflection ???

哪個東西是連擊更多。 dynamic在運行時更強大嗎?

+3

變量/反射不正確。 Var是在編譯時評估的隱式類型變量。另一方面的反思是評估運行時間。我認爲反思會比var更具動態性。 –

+0

如果你不知道你所知道的是什麼,我們就無法真正知道你所知道的是否足夠。有什麼優勢?請將此信息添加到問題中。 –

回答

13

dynamic關鍵字最有趣的事情之一,你可以做的是:執行雙派遣。在OOP中,在運行時調用虛擬(或抽象)方法的特定實現,其基於一個對象的運行時類型,該對象作爲this傳遞給成員函數。這就是所謂的單一發貨,因爲發貨取決於單一的對象的運行時間類型。在雙重調度中,它取決於兩個對象的類型。

這裏是一個例子:

public abstract class Base {} 
public class D1 : Base {} 
public class D2 : Base {} 
public class D3 : Base {} 

public class Test 
{ 
    public static void Main(string[] args) 
    { 
     Base b1 = new D1(); 
     Base b2 = new D2(); 

     Method(b1,b2); //calls 1 
     Method(b2,b1); //calls 1: arguments swapped! 
    } 

    public static void Method(Base b1, Base b2) // #1 
    { 
     dynamic x = b1; 
     dynamic y = b2; 

     Method(x,y); // calls 2 or 3: double-dispatch - the magic happens here! 

    } 
    public static void Method(D1 d1, D2 d2) // #2 
    { 
     Console.WriteLine("(D1,D2)"); 
    } 
    public static void Method(D2 d2, D1 d1) // #3: parameters swapped 
    { 
     Console.WriteLine("(D2,D1)"); 
    } 
} 

輸出:

(D1,D2) 
(D2,D1) 

即,實際的方法是在運行時選擇的基礎上,運行時類型2個的對象,而不是一個對象。