2010-10-08 7 views
6

La méthode Type.IsSubclassOf ne fonctionne qu'avec deux types de béton, par ex.Comment vérifier si une interface étend une autre en C#?

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

Existe-t-il un moyen de savoir si une interface en étend une autre? par exemple.

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

La seule chose que je peux penser est d'utiliser GetInterfaces sur IB et vérifier si elle contient des IA, personne ne sait d'un autre/meilleure façon de le faire?

Répondre

12

Vous pouvez faire

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

qui vous donne les informations dont vous avez besoin dans ce cas, je suppose, mais aussi fonctionne bien sûr, non seulement pour les interfaces.

Je suppose que vous avez Type objets, si vous avez des cas réels, cela est plus courte, plus claire et plus performant:

public interface ICar : IVehicle { /**/ } 

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

IsAssignableFrom est ce que vous recherchez. C'est l'équivalent de l'opérateur is mais avec des valeurs d'exécution en tant que types.

Exemples:

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

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