Reputation: 54382
public interface IBar {}
public interface IFoo : IBar {}
typeof(IFoo).BaseType == null
How can I get IBar?
Upvotes: 29
Views: 37720
Reputation: 28616
An interface is not a base type. Interfaces are not part of the inheritance tree.
To get access to interfaces list you can use:
typeof(IFoo).GetInterfaces()
or if you know the interface name:
typeof(IFoo).GetInterface("IBar")
If you are only interested in knowing if a type is implicitly compatible with another type (which I suspect is what you are looking for), use type.IsAssignableFrom(fromType). This is equivalent of 'is' keyword but with runtime types.
Example:
if(foo is IBar) {
// ...
}
Is equivalent to:
if(typeof(IBar).IsAssignableFrom(foo.GetType())) {
// ...
}
But in your case, you are probably more interested in:
if(typeof(IBar).IsAssignableFrom(typeof(IFoo))) {
// ...
}
Upvotes: 31
Reputation: 17278
In addition to what the other posters wrote, you can get the first interface from the GetInterface() list (if the list is not empty) to get the direct parent of IFoo. This would be the exact equivalent of your .BaseType attempt.
Upvotes: 1
Reputation: 103770
Type[] types = typeof(IFoo).GetInterfaces();
Edit: If you specifically want IBar, you can do:
Type type = typeof(IFoo).GetInterface("IBar");
Upvotes: 63