2011-10-12 3 views
5

Il m'arrive de voir un code quelque chose comme ça. Quand et pourquoi avons-nous besoin de ce type de moulage de type dynamique pour les paramètres?coulée de type dynamique dans le paramètre dans C#

+0

Je voudrais en savoir plus. Généralement, si la fonction prend une variable dynamique, vous pouvez lancer, mais ce n'est pas nécessaire. – scottm

+0

@scottm: C'est ce que je pensais initialement, puis je me suis souvenu que vous pouvez également l'utiliser pour choisir la surcharge correcte d'une méthode lors de l'exécution. –

+0

@JamesMichaelHare Très petit cas d'utilisation. C'est le genre de chose que je reprocherais à un développeur précédent d'utiliser intentionnellement. – scottm

Répondre

5

Il peut être utilisé pour choisir dynamiquement une surcharge de function(...) en fonction du type de param1 lors de l'exécution, par exemple:

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

Ainsi, même si x est une référence à object, il décidera lors de l'exécution que surcharge de Something() à appeler. Notez que s'il n'y a pas de surcharge appropriée, une exception sera levée:

// ... 
    x = 3.14; 

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