Lista de clases en una asamblea
-
29-08-2019 - |
Pregunta
Tengo un conjunto de DLL, en el que hay varias clases. Cada clase tiene alrededor de 50-100 miembros y 4-5 funciones. ¿Cómo puedo crear una lista de todas las clases y sus respectivos miembros utilizando un programa VB.NET?
I que mostrar al usuario para realizar una operación usando una clase particular.
Solución
Consulte la documentación de System.Reflection.Assembly .GetTypes () y System.Type.GetMembers ()
- larsw
Otros consejos
Si se asume que usted ha cargado su ensamblaje a thisAsm (en este ex estoy usando el conjunto de la ejecución),
Esto le dará todas las clases no abstractas:
Assembly thisAsm = Assembly.GetExecutingAssembly();
List<Type> types = thisAsm.GetTypes().Where(t => t.IsClass && !t.IsAbstract).ToList();
Y esto le dará todas las clases que implementan una interfaz específica.
(Ej. Si usted necesita para obtener sólo las clases que implementan IYourInterface, a continuación)
Assembly thisAsm = Assembly.GetExecutingAssembly();
List<Type> types = thisAsm.GetTypes().Where
(t => ((typeof(IYourInterface).IsAssignableFrom(t)
&& t.IsClass && !t.IsAbstract))).ToList();
Una vez que haya esta lista de elementos, puede mostrar los miembros de cada tipo, llamando a los GetProperties () y getMethods () en cada miembro de la lista de tipos.
Usted puede obtener todo tipo que hereda de Formulario en VB.net:
Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
Dim types As List(Of Type) = thisAsm.GetTypes().Where(Function(t) t.BaseType = GetType(Form)).ToList()
He aquí la versión vb.net basan en respuesta @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()