2010-10-08 9 views
6

Il metodo Type.IsSubclassOf funziona solo con due tipi di calcestruzzo, ad es.Come verificare se un'interfaccia ne estende un'altra in C#?

public class A {} 
public class B : A {} 
typeof(B).IsSubclassOf(typeof(A)) // returns true 

C'è un modo per scoprire se un'interfaccia ne estende un'altra? per esempio.

public interface IA {} 
public interface IB : IA {} 

L'unica cosa che mi viene in mente è quello di utilizzare getInterfaces su IB e verificare se contiene IA, qualcuno sa di un altro/modo migliore per fare questo?

risposta

12

Si può fare

bool isAssignable = typeof(IA).IsAssignableFrom(typeof(IB)); 

che vi dà le informazioni necessarie in questo caso immagino, ma anche opere, naturalmente non solo per le interfacce.

presuppongo che avere Type oggetti, se si dispone di casi reali, questo è più breve, più chiara e più performante:

public interface ICar : IVehicle { /**/ } 

ICar myCar = GetSomeCar(); 
bool isVehicle = myCar is IVehicle; 
1

IsAssignableFrom è quello che state cercando. È l'equivalente dell'operatore is ma con i valori di runtime come tipi.

Esempi:

// Does IDerivedInterface implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(typeof(IDerivedInterface)); 

// Does instance implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType()); 
Problemi correlati