Kevin Driedger
Kevin Driedger

Reputation: 54382

How to get interface basetype via reflection?

public interface IBar {} 
public interface IFoo : IBar {}

typeof(IFoo).BaseType == null

How can I get IBar?

Upvotes: 29

Views: 37720

Answers (3)

Coincoin
Coincoin

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

Paul-Jan
Paul-Jan

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

BFree
BFree

Reputation: 103770

Type[] types = typeof(IFoo).GetInterfaces();

Edit: If you specifically want IBar, you can do:

Type type = typeof(IFoo).GetInterface("IBar");

Upvotes: 63

Related Questions