Как получить классы, реализующие интерфейс в CodeRush?


Я пытался написать метод, который возвращает список классов, реализующих интерфейс, но не смог этого сделать.

Какой-нибудь метод вроде

  public List<Class> GetImplementedClasses(Interface Interface1)
   {
        . . . 
   }

Я попытался использовать interface1.Все дети и многие другие попытки. Ни один из них не дал никаких результатов.

Можно ли написать такой метод, используя API DXCore?

Пример:

Введите описание изображения здесь

Если я передаю Interface1, я должен получить Class1 и Class2 из метода GetImplementedClasses.

Спасибо в Продвижение.

2 3

2 ответа:

В классе Intrerface есть метод GetDescendants, который может быть полезен для вашей задачи. Код будет выглядеть примерно так:

public List<Class> GetImplementedClasses(Interface Interface1)
{
  List<Class> result = new List<Class>();
  if (Interface1 != null)
  {
    ITypeElement[] descendants = Interface1.GetDescendants();
    foreach (ITypeElement descendant in descendants)
    {
      if (!descendant.InReferencedAssembly)
      {
        Class classDescendant = descendant.ToLanguageElement() as Class;
        if (classDescendant != null)
          result.Add(classDescendant);
      }
    }
  }
  return result;
}

Я не уверен насчет dxcore, но в обычном C# я написал метод расширения, который получает все типы, доступные в развертывании; вы можете использовать его следующим образом:

Assembly.GetExecutingAssembly().GetAvailableTypes(
    typeFilter: t => 
        (t != typeof(interfaceType)) 
        && 
        typeof(interfaceType).IsAssignableFrom(t));