2011-04-27 12 views
5

Llamo a un método en un ensamblaje usando reflexión y necesito comparar primero si uno de los parámetros para el método tiene el mismo tipo de base con el parámetro que le estoy pasando.Comparación de tipos de base en la reflexión

Pero cada vez que llamo passedInParameter.GetType().BaseType() devuelve "

{Nombre = "MarshalByRefObject" FullName = "System.MarshalByRefObject"}.

¿No debería estar mostrando la interfaz se está implementando?

Respuesta

4

El tiempo de ejecución tiene ayudantes para esto:

if (typeof(ISomeInterface).IsAssignableFrom(passedInParameter.GetType())) 
{ 
} 

Datos:

interfaces son no basetypes. Los tipos de CLR no pueden tener múltiples tipos de base.

Usted debe ser capaz de enumerar las interfaces implementadas por un tipo, pero como se puede ver en mi propuesta de solución, yo no recomendaría hacer todo lo que

+0

+1 buena respuesta. – Stecya

+0

He observado que "typeof (SomeType) .IsAssignableFrom (param.GetType())" devolverá false cuando param sea TransparentProxy, mientras que "param es SomeType" devolverá true. – Tom

2

La interfaz no es una clase base. La clase puede implementar muchas interfaces Si desea obtener la lista de interf ases sólo tiene que utilizar

passedInParameter.GetType().GetInterfaces(); 

también se puede tratar de utilizar is operador

if(passedInParameter is ISomeInterface) 
{ 
    // do some logic 
} 

intenta utilizar este fragmento de código

ParameterInfo param = paramList[i]; 
    Type type = paramArray[i].GetType(); 

    bool valid = false; 
    if (info.ParameterType.IsInterface) 
     valid = type.GetInterfaces().Contains(param.ParameterType); 
    else 
     valid = type.IsSubclassOf(param.ParameterType); 
+0

Puede pasar tipos de hormigón en el parámetro de un método que se espera una interfaz. ¿Cómo se llama eso? ¿Pasando por su implementación? – Gho5t

+0

Acaba de pasar el objeto que implementa esas Interfaz – Stecya

+0

@Stecya - bien ... eso es lo que dije. Solo pensé que se llamaba pasar por su tipo base ... Solo preguntaba cuál era el término para hacer eso. – Gho5t

Cuestiones relacionadas