2011-04-27 14 views
5

Sto chiamando un metodo su un assieme utilizzando la riflessione e devo prima confrontare se uno dei parametri per il metodo ha lo stesso tipo di base con il parametro che sto passando per esso.Confronto dei tipi di base nella riflessione

Ma ogni volta che lo chiamo passedInParameter.GetType().BaseType() che restituisce "

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

caso non si presenterà l'interfaccia è sta implementando?

risposta

4

Il runtime ha aiutanti per questo:

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

Backgrounder:

interfacce sono non baseTypes. I tipi CLR non possono avere più tipi di base.

Dovreste essere in grado di enumerare interfacce implementate da un tipo, ma come si può vedere dalla mia soluzione proposta, non mi consiglia di fare tutto ciò che

+0

+1 buona risposta. – Stecya

+0

Ho notato che "typeof (SomeType) .IsAssignableFrom (param.GetType())" restituirà false quando param è un TransparentProxy, mentre "param is SomeType" restituirà true. – Tom

2

L'interfaccia non è una classe base. La classe può implementare molte interfacce Se si desidera ottenere l'elenco di interf di assi basta usare

passedInParameter.GetType().GetInterfaces(); 

inoltre si può provare ad usare is operatore

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

tenta di utilizzare questo frammento di codice

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

È possibile passare tipi concreti nel parametro di un metodo che si aspetta un interfaccia. Come si chiama? Passando dalla sua implementazione? – Gho5t

+0

Basta passare l'oggetto che implementa l'interfaccia – Stecya

+0

@Stecya - giusto ... è quello che ho detto. Ho solo pensato che fosse chiamato passando per il suo tipo di base ... Mi chiedevo solo che cosa significa questo. – Gho5t

Problemi correlati