2010-10-08 5 views
6

El método Type.IsSubclassOf solo funciona con dos tipos concretos, p. Ej.¿Cómo comprobar si una interfaz se extiende otra en C#?

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

¿Hay alguna manera de averiguar si una interfaz se extiende a otra? p.ej.

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

Lo único que se me ocurre es utilizar GetInterfaces en IB y comprobar si contiene IA, ¿alguien sabe de otro/mejor manera de hacer esto?

Respuesta

12

Usted puede hacer

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

que le da la información que necesita en este caso, supongo, pero también, por supuesto, no sólo funciona para las interfaces.

Asumo que tienen Type objetos, si usted tiene casos reales, esto es más corto, más clara y con más prestaciones:

public interface ICar : IVehicle { /**/ } 

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

IsAssignableFrom es lo que busca. Es el equivalente del operador is pero con valores de tiempo de ejecución como tipos.

Ejemplos:

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

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