【发布时间】:2008-12-29 10:15:24
【问题描述】:
我有一个 DLL 程序集,其中有各种类。每个班级大约有 50-100 名成员和 4-5 个职能部门。如何使用 VB.NET 程序创建所有类及其各自成员的列表?
我需要向用户展示使用特定类执行操作。
【问题讨论】:
标签: .net vb.net reflection .net-assembly
我有一个 DLL 程序集,其中有各种类。每个班级大约有 50-100 名成员和 4-5 个职能部门。如何使用 VB.NET 程序创建所有类及其各自成员的列表?
我需要向用户展示使用特定类执行操作。
【问题讨论】:
标签: .net vb.net reflection .net-assembly
假设您已将程序集加载到 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() 来显示每种类型的成员。
【讨论】:
请参阅System.Reflection.Assembly.GetTypes() 的文档和 System.Type.GetMembers()
--larsw
【讨论】:
您可以在 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()
【讨论】:
这是基于@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()
【讨论】: