程序集中的类列表

时间:2008-12-29 10:15:25

标签: .net vb.net reflection .net-assembly

我有一个DLL程序集,其中有各种类。每个班级有大约50-100名成员和4-5个职能。如何使用VB.NET程序创建所有类及其各自成员的列表?

我需要向用户显示使用特定类执行操作。

5 个答案:

答案 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)

答案 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)

很多例子都在网上。这是one(虽然在C#中)。