我已經學會並檢查dynamic
關鍵字的優勢,在C#4C#4.0'動態'關鍵字的優點和缺點?
任何機構可以告訴我的這個缺點。意爲:dynamic
vs Var
/Object
/reflection
???
哪個東西是連擊更多。 dynamic
在運行時更強大嗎?
我已經學會並檢查dynamic
關鍵字的優勢,在C#4C#4.0'動態'關鍵字的優點和缺點?
任何機構可以告訴我的這個缺點。意爲:dynamic
vs Var
/Object
/reflection
???
哪個東西是連擊更多。 dynamic
在運行時更強大嗎?
不完全變種與動態,但以下SO鏈接討論反射與動態。退房:dynamic vs Var/Object/reflection
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個的對象,而不是一個對象。
變量/反射不正確。 Var是在編譯時評估的隱式類型變量。另一方面的反思是評估運行時間。我認爲反思會比var更具動態性。 –
如果你不知道你所知道的是什麼,我們就無法真正知道你所知道的是否足夠。有什麼優勢?請將此信息添加到問題中。 –