2010-10-08 8 views
6

Metoda Type.IsSubclassOf działa tylko z dwoma typami betonu, np.Jak sprawdzić, czy interfejs rozszerza inny w C#?

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

Czy istnieje sposób sprawdzenia, czy interfejs rozszerza inny? na przykład

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

Jedyne co mogę myśleć jest użycie GetInterfaces na IB i sprawdź, czy zawiera ona IA, czy ktoś wie o inny/lepszy sposób to zrobić?

Odpowiedz

12

Można zrobić

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

który daje informacje potrzebne w tym przypadku jak sądzę, ale też oczywiście działa nie tylko dla interfejsów.

Zakładam, że masz Type obiektów, jeśli rzeczywiste przypadki, to jest krótsza, bardziej przejrzyste i bardziej wydajnych:

public interface ICar : IVehicle { /**/ } 

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

IsAssignableFrom jest to, czego szukasz. Jest to odpowiednik operatora is, ale z wartościami wykonawczymi jako typami.

Przykłady:

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

// Does instance implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType()); 
Powiązane problemy