List of classes in an assembly

前端 未结 5 1376
暗喜
暗喜 2020-12-11 19:24

I\'ve a DLL assembly, in which there are various classes. Each class has around 50-100 members and 4-5 functions. How can I create a list of all the classes and their respec

相关标签:
5条回答
  • 2020-12-11 19:51

    Many examples are on the web. Here's one (in C# though).

    0 讨论(0)
  • 2020-12-11 19:55

    Assuming that you've your assembly loaded to thisAsm (in this ex I'm using the executing assembly),

    This will get you all non abstract classes:

    Assembly thisAsm = Assembly.GetExecutingAssembly();
    List<Type> types = thisAsm.GetTypes().Where(t => t.IsClass && !t.IsAbstract).ToList();
    

    And this will get you all classes that implements a specific interface.

    (Eg. If you need to get only the classes that implements IYourInterface, then)

    Assembly thisAsm = Assembly.GetExecutingAssembly();
    List<Type> types = thisAsm.GetTypes().Where
                (t => ((typeof(IYourInterface).IsAssignableFrom(t) 
                     && t.IsClass && !t.IsAbstract))).ToList();
    

    Once you've this list of items, you can show the members of each type, by calling the GetProperties() and GetMethods() on each member of the types list.

    0 讨论(0)
  • 2020-12-11 19:58

    See the documentation for System.Reflection.Assembly.GetTypes() and System.Type.GetMembers()

    --larsw

    0 讨论(0)
  • 2020-12-11 20:02

    You can get all type that inherits from Form in VB.net:

    Dim thisAsm As Assembly = Assembly.GetExecutingAssembly()
    Dim types As List(Of Type) = thisAsm.GetTypes().Where(Function(t) t.BaseType = GetType(Form)).ToList()
    
    0 讨论(0)
  • 2020-12-11 20:02

    Here is vb.net version based on @amazedsaint answer:

    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()
    
    0 讨论(0)
提交回复
热议问题