Список классов в сборке
-
29-08-2019 - |
Вопрос
У меня есть DLL-сборка, в которой есть различные классы.Каждый класс насчитывает около 50-100 членов и 4-5 функций.Как я могу создать список всех классов и их соответствующих членов, используя программу VB.NET?
Мне нужно показать пользователю для выполнения операции с использованием определенного класса.
Решение
Смотрите документацию для Система.Отражение.Сборка.Типы получения() и System.Type.GetMembers() Система.Тип.GetMembers()
--ларсв
Другие советы
Предполагая, что вы загрузили свою сборку в thisAsm (в этом примере я использую исполняемую сборку),
Это даст вам все неабстрактные классы:
Assembly thisAsm = Assembly.GetExecutingAssembly();
List<Type> types = thisAsm.GetTypes().Where(t => t.IsClass && !t.IsAbstract).ToList();
И это даст вам все классы, которые реализуют определенный интерфейс.
(Например.Если вам нужно получить только классы, которые реализуют IYourInterface, то)
Assembly thisAsm = Assembly.GetExecutingAssembly();
List<Type> types = thisAsm.GetTypes().Where
(t => ((typeof(IYourInterface).IsAssignableFrom(t)
&& t.IsClass && !t.IsAbstract))).ToList();
Получив этот список элементов, вы можете показать элементы каждого типа, вызвав GetProperties() и GetMethods() для каждого элемента списка типов.
Вы можете получить весь тип, который наследуется от Форма в VB.net:
Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
Dim types As List(Of Type) = thisAsm.GetTypes().Where(Function(t) t.BaseType = GetType(Form)).ToList()
Вот vb.net версия, основанная на ответе @amazedsaint:
Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
Dim types As List(Of Type) = thisAsm
.GetTypes()
.Where(Function(t) t.IsClass AndAlso Not t.IsAbstract).ToList()
Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
Dim types As List(Of Type) = thisAsm
.GetTypes()
.Where(Function(t) ((GetType(IYourInterface).IsAssignableFrom(t) AndAlso t.IsClass AndAlso Not t.IsAbstract))).ToList()