我有一个DLL程序集,其中有各种类。每个班级有大约50-100名成员和4-5个职能。如何使用VB.NET程序创建所有类及其各自成员的列表?
我需要向用户显示使用特定类执行操作。
答案 0 :(得分:16)
假设您已将程序集加载到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()来显示每种类型的成员。
答案 1 :(得分:2)
请参阅System.Reflection.Assembly.GetTypes()的文档和 System.Type.GetMembers()
- larsw
答案 2 :(得分:1)
您可以在VB.net中获取从Form继承的所有类型:
Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
Dim types As List(Of Type) = thisAsm.GetTypes().Where(Function(t) t.BaseType = GetType(Form)).ToList()
答案 3 :(得分:0)
这是基于@amazedsaint答案的vb.net版本:
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()
答案 4 :(得分:-2)