2010-10-08 35 views
6

Phương thức Type.IsSubclassOf chỉ hoạt động với hai loại cụ thể, ví dụ:Làm cách nào để kiểm tra xem một giao diện có mở rộng giao diện khác trong C# không?

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

Có cách nào để tìm hiểu xem giao diện có mở rộng giao diện khác không? ví dụ.

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

Điều duy nhất tôi có thể nghĩ là sử dụng GetInterfaces trên IB và kiểm tra xem nó có chứa IA, có ai biết cách khác/tốt hơn để làm điều này không?

Trả lời

12

Bạn có thể làm

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

mang đến cho bạn những thông tin bạn cần trong trường hợp này tôi đoán, mà còn tất nhiên hoạt động không chỉ cho các giao diện.

Tôi giả sử bạn có Type đối tượng, nếu bạn có các trường hợp thực tế, đây là ngắn hơn, rõ ràng hơn và hơn performant:

public interface ICar : IVehicle { /**/ } 

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

IsAssignableFrom là những gì bạn đang tìm kiếm. Nó tương đương với toán tử is nhưng với các giá trị thời gian chạy dưới dạng các loại.

Ví dụ:

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

// Does instance implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType()); 
Các vấn đề liên quan