2010-10-08 17 views
6

Type.IsSubclassOf yöntemi, yalnızca iki beton türü ile çalışır, örn.Bir arabirimin C# içinde başka bir tane olup olmadığını nasıl kontrol edilir?

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

Bir arabirimin bir diğerini mi uzattığını öğrenmenin bir yolu var mı? Örneğin. Aklıma

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

tek şey herkes/diğerinin Bunun için daha iyi bir yol biliyor mu, IB GetInterfaces kullanmak ve IA içeriyorsa kontrol etmektir?

cevap

12

Sen size sanırım bu durumda gereken bilgiyi verir, ama aynı zamanda tabii arayüzleri için sadece çalışır

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

yapabilirsiniz.

Bu, daha kısa daha net ve daha performanslısı, gerçek örneklerini varsa, Type nesneleri varsayalım:

public interface ICar : IVehicle { /**/ } 

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

IsAssignableFrom aradığınız budur. is operatörünün eşdeğeri, ancak çalışma zamanı değerleri tür olarak.

Örnekler:

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

// Does instance implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType()); 
İlgili konular