Как получить классы, которые реализуют интерфейс в CodeRush?
Я пытался написать метод, который возвращает список классов, который реализует интерфейс, но не смог сделать это.
Какой-то метод, как
public List<Class> GetImplementedClasses(Interface Interface1)
{
. . .
}
Я пытался использовать interface1.AllChildren и многие другие попытки. Ни один из них не дал никаких результатов.
Можно ли написать такой метод с использованием API DXCore?
ПРИМЕР:
Если я передаю Interface1, я должен получить Class1 и Class2 из метода GetImplementedClasses.
Заранее спасибо.
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));