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