Lista de classes em uma montagem
-
29-08-2019 - |
Pergunta
Eu tenho uma DLL de montagem, em que existem várias classes. Cada classe tem em torno de 50-100 membros e 4-5 funções. Como posso criar uma lista de todas as classes e seus respectivos membros usando um programa VB.NET?
Eu preciso mostrar ao usuário para executar uma operação usando uma classe particular.
Solução
Consulte a documentação do System.Reflection.Assembly .GetTypes () e System.Type.GetMembers ()
- larsw
Outras dicas
Assumindo que você tenha o seu assembly carregado para thisAsm (neste ex Eu estou usando a execução de montagem),
Isso vai te dar todas as classes não abstratas:
Assembly thisAsm = Assembly.GetExecutingAssembly();
List<Type> types = thisAsm.GetTypes().Where(t => t.IsClass && !t.IsAbstract).ToList();
E isso vai te todas as classes que implementa uma interface específica.
(Ex. Se você precisa obter apenas as classes que implementa IYourInterface, então)
Assembly thisAsm = Assembly.GetExecutingAssembly();
List<Type> types = thisAsm.GetTypes().Where
(t => ((typeof(IYourInterface).IsAssignableFrom(t)
&& t.IsClass && !t.IsAbstract))).ToList();
Uma vez que você tem esta lista de itens, você pode mostrar os membros de cada tipo, chamando os GetProperties () e GetMethods () em cada membro da lista de tipos.
Você pode obter todo o tipo que herda de Formulário em VB.net:
Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
Dim types As List(Of Type) = thisAsm.GetTypes().Where(Function(t) t.BaseType = GetType(Form)).ToList()
Aqui é a versão vb.net com base na resposta @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()