【问题标题】:List of classes in an assembly程序集中的类列表
【发布时间】:2008-12-29 10:15:24
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    假设您已将程序集加载到 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() 来显示每种类型的成员。

    【讨论】:

    • 将 C# 转换为 VB 应该还是很简单的。
    • +2 用于提供带有实际代码的实际答案。 -1 表示不将其转换为 VB.NET。
    【解决方案2】:

    【讨论】:

    • -1 不包括链接之外的任何解释。
    • 第一个链接已不存在
    【解决方案3】:

    您可以在 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()
    

    【讨论】:

      【解决方案4】:

      这是基于@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()
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • -1 表示不包括链接之外的任何解释。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 2015-09-27
        • 1970-01-01
        相关资源
        最近更新 更多