How to get interface basetype via reflection?
Solution 1
Type[] types = typeof(IFoo).GetInterfaces();
Edit: If you specifically want IBar, you can do:
Type type = typeof(IFoo).GetInterface("IBar");
Solution 2
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))) {
// ...
}
Solution 3
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.
Jesper Jensen
Job: C# Software Developer Favorite Project: Fundamentals of New Computing http://vpri.org/html/writings.php
Updated on July 21, 2022Comments
-
Jesper Jensen almost 2 years
public interface IBar {} public interface IFoo : IBar {} typeof(IFoo).BaseType == null
How can I get IBar?