How to get interface basetype via reflection?

33,073

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.

Share:
33,073
Jesper Jensen
Author by

Jesper Jensen

Job: C# Software Developer Favorite Project: Fundamentals of New Computing http://vpri.org/html/writings.php

Updated on July 21, 2022

Comments

  • Jesper Jensen
    Jesper Jensen almost 2 years
    public interface IBar {} 
    public interface IFoo : IBar {}
    
    typeof(IFoo).BaseType == null
    

    How can I get IBar?