2010-10-08 60 views
6

Type.IsSubclassOf方法僅適用於兩種具體類型,例如,如何檢查一個接口是否在C#中擴展另一個接口?

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

有沒有辦法找出接口是否擴展了另一個?例如

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

我能想到的唯一的事情就是在IB使用GetInterfaces,並檢查它是否包含IA,沒有人知道的另一個/更好的方式來做到這一點?

回答

12

你可以做

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

它給你,你在這種情況下,我想需要的信息,也當然不是僅適用於接口。

我假設你有Type對象,如果你有實際的情況下,這是更短,更清晰,更高性能:

public interface ICar : IVehicle { /**/ } 

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

IsAssignableFrom是你在找什麼。它等於is運算符,但運行時值類型。

實例:

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

// Does instance implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType()); 
相關問題