2011-11-20 19 views
5

dynamic anahtar kelimesinin avantajlarını C# 4'de öğrendim ve kontrol ettim.C# 4.0 'dinamik' anahtar kelimesinin Avantajları ve Dezavantajları?

Herhangi bir beden bana bunun dezavantajlarını anlatabilir. dynamic vs Var/Object/reflection ???

Hamuru daha fazla olan şey. Çalışma zamanında dynamic daha güçlü mü?

+3

Var/yansıma doğru değil. Var, derleme zamanında değerlendirilen örtülü tip değişkendir. Diğer taraftan yansıma çalışma zamanı değerlendirilir. Bence yansıma, dinamikten ziyade dinamik olarak duracak. –

+0

Gerçekten bildiğin şeyi bize söylemeden, bildiğin şeyin yeterli olduğunu söyleyemeyiz. Avantajları nelerdir? Lütfen bu bilgiyi soruya ekleyin. –

cevap

13

Yapabileceğiniz dynamic anahtar kelimesi ile en ilginç olanı şudur: çift gönderme uygulaması. OOP'da, çalışma zamanında, üye işlevine this olarak iletilen tek nesnesinin çalışma zamanı türüne dayalı olarak, sanal (veya soyut) yöntemin belirli bir uygulaması denir. Gönderme, tek nesnesinin çalışma zamanı türüne bağlı olduğundan, bu tek gönderim olarak adlandırılır. Çift gönderimde, iki nesnesinin türüne bağlıdır. Burada

bir örnektir:

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)"); 
    } 
} 

Çıkış: karşıt olarak, gerçek bir yöntem, iki nesnelerin zamanı türüne göre, çalışma için seçilen edilir

(D1,D2) 
(D2,D1) 

bir nesne

İlgili konular