2011-10-12 12 views
5

Zdarza mi się zobaczyć kod podobny do tego.dynamiczne rzutowanie w parametrze C#

function((dynamic) param1, param2); 

Kiedy i dlaczego potrzebujemy tego rodzaju dynamicznego odlewania pod parametry?

+0

Chciałbym zobaczyć więcej. Zasadniczo, jeśli funkcja przyjmuje zmienną dynamiczną, możesz * rzucić *, ale nie jest to konieczne. – scottm

+0

@scottm: Tak myślałem na początku, a potem przypomniałem sobie, że możesz również użyć go do wybrania właściwego przeciążenia metody w czasie wykonywania. –

+0

@ James MichaelHare Bardzo mały przypadek użycia. To jest coś, co chciałbym zbesztać poprzedniego programistę za celowe używanie. – scottm

Odpowiedz

5

Może być używany do dynamicznego wyboru przeciążenie function(...) oparciu o typ param1 w czasie wykonywania, na przykład:

public static void Something(string x) 
{ 
    Console.WriteLine("Hello"); 
} 

public static void Something(int x) 
{ 
    Console.WriteLine("Goodbye"); 
} 
public static void Main() 
{ 
    object x = "A String"; 

    // This will choose string overload of Something() and output "Hello" 
    Something((dynamic)x); 

    x = 13; 

    // This will choose int overload of Something() and output "Goodbye" 
    Something((dynamic)x); 
} 

Więc chociaż x jest nawiązaniem do object, będzie decydować w czasie wykonywania co przeciążenie Something(), aby zadzwonić. Zauważ, że jeśli nie ma odpowiedniego przeciążenia, zostanie zgłoszony wyjątek:

// ... 
    x = 3.14; 

    // No overload of Something(double) exists, so this throws at runtime. 
    Something((dynamic)x); 
Powiązane problemy