Как получить классы, которые реализуют интерфейс в CodeRush? - PullRequest
3 голосов
/ 30 июня 2011

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

Какой-то метод, например

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

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

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

Пример:

enter image description here

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

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

В классе 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;
}
1 голос
/ 01 июля 2011

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

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