2011-10-19 10 views
23

Si tengo un parámetro dinámico el compilador parece zanja el tipo de retorno y creo que es dinámico.parámetro dinámico hace que el compilador de pensar de retorno del método es dinámica

Por ejemplo:

public MethodResult IsValid(object userLogin) 
{  
    return new MethodResult(); 
} 

Se podría pensar que:

var isValidResult = IsValid(someObject()); 

debe decir lo

dynamic -> MethodResult 

pero se cree que es:

dynamic -> dynamic 

¿Tiene la adición de un parámetro dinámico de la firma detener por completo el compilador de saber lo que el retorno debe ser a pesar del regreso de ser inflexible?

Respuesta

19

Sí, se detiene el compilador dinámico de conocer el tipo de cualquier tipo parámetros, propiedades o de retorno del método. Añadir una conversión explícita como:

(MethodResult)IsValid(someObject)); 

La razón es que una vez que entra en el mundo dinámico en C# que va a tener el enlace en tiempo. El compilador no puede verificar el código porque ya no se puede utilizar cualquier tipo de análisis estático. Entonces difiere hasta más tarde. Puede ayudar a superar esto proporcionando conversiones estáticas como una guía para el compilador.

+1

Para más detalles marque [MSDN - Uso de tipos dinámicos] (http://msdn.microsoft.com/en-us/library/dd264736.aspx) - "resolución de sobrecarga se produce en tiempo de ejecución en lugar de en tiempo de compilación si uno o más de los argumentos en una llamada de método tiene el tipo dinámico, o si el receptor de la llamada al método es de tipo dinámico ". - por lo tanto, como resultado, no se sabe hasta el momento de la ejecución qué método se llamará en absoluto. –

Cuestiones relacionadas