2011-10-12 15 views
5

Resulta que veo un código como este.fundición de tipo dinámico en parámetro en C#

function((dynamic) param1, param2); 

¿Cuándo y por qué necesitamos este tipo de conversión de tipo dinámico para los parámetros?

+0

Me gustaría ver más. Generalmente, si la función toma una variable dinámica, * usted * podría * emitir, pero no es necesario. – scottm

+0

@scottm: Eso es lo que estaba pensando inicialmente, entonces recordé que también puedes usarlo para elegir la sobrecarga correcta de un método en tiempo de ejecución. –

+0

@JamesMichaelHare Caso de uso muy pequeño. Este es el tipo de cosas que regañaría a un desarrollador anterior por usar intencionalmente. – scottm

Respuesta

5

Se puede utilizar para seleccionar dinámicamente una sobrecarga de function(...) basado en el tipo de param1 en tiempo de ejecución, por ejemplo:

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

Así que, aunque x es una referencia a object, que decidirá en tiempo de ejecución lo sobrecarga de Something() para llamar. Tenga en cuenta que si no hay una sobrecarga adecuada, se lanzará una excepción:

// ... 
    x = 3.14; 

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