Мне нужно написать функцию, которая принимает имя базового класса и возвращает имя всех его дочерних элементов в C#. как вы все знаете в пространстве имен, у нас есть несколько базовых классов, каждый из которых имеет своих детей. Назначение вышеуказанной функции (которая будет расположена в Сервисах) - получить имя базового класса от пользователя, а затем вернуть имя всех его дочерних элементов. (мы можем использовать результат при создании командного файла) Я предполагаю, что мне нужно использовать рефлексию и обобщения, но не знаю, как это сделать. Не могли бы вы помочь мне об этом.
Как будет выглядеть функция, если я передам имя базового класса в виде строки? и как это должно быть, если я передам имя базового класса как тип generi c?
Edition к вопросу после комментариев:
на основе страницы, предложенной в ответе I попробовал следующую функцию, но она вернула null как для детей, так и для blahKids
private object GetKidsOfBaseClass(string baseClass)
{
Type baseType = Type.GetType($"{baseClass}");
var blahKids = AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
.Where(p => p.IsSubclassOf(baseType));
var kids = Assembly.GetAssembly(baseType).GetTypes().Where(t => t.IsSubclassOf(baseType));
return kids;
}
Второе издание после предложения @madreflection: у меня работал следующий код:
private object GetKidsOfBaseClass(Type baseType)
{
var blahKids =
AppDomain.CurrentDomain.GetAssemblies().SelectMany(ass => ass.GetTypes())
.Where(p => p.IsSubclassOf(baseType)).ToList();
return blahKids;
}