Как проверить, расширяет ли интерфейс другой в C #? - PullRequest
6 голосов
/ 08 октября 2010

Метод Type.IsSubclassOf работает только с двумя конкретными типами, например,

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

Есть ли способ узнать, расширяет ли интерфейс другой? например,

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

Единственное, о чем я могу думать, - это использовать GetInterfaces на IB и проверить, содержит ли он IA, кто-нибудь знает другой / лучший способ сделать это?

Ответы [ 2 ]

12 голосов
/ 08 октября 2010

Вы можете сделать

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

, которая дает вам необходимую информацию в этом случае, я думаю, но также, конечно, работает не только для интерфейсов.

Я предполагаю, что у вас есть Type объектов, если у вас есть реальные экземпляры, это короче, яснее и эффективнее:

public interface ICar : IVehicle { /**/ }

ICar myCar = GetSomeCar();
bool isVehicle = myCar is IVehicle;
1 голос
/ 08 октября 2010

IsAssignableFrom - это то, что вы ищете. Это эквивалент оператора is, но со значениями времени выполнения в качестве типов.

Примеры:

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

// Does instance implements IBaseInterface ?
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...