5

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 respective members using a VB.NET program?

I need to show to the user for performing an operation using a particular class.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Rahul Jain
  • 195
  • 1
  • 5
  • 20

5 Answers5

17

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.

abatishchev
  • 98,240
  • 88
  • 296
  • 433
amazedsaint
  • 7,642
  • 7
  • 54
  • 83
2

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

--larsw

larsw
  • 3,790
  • 2
  • 25
  • 37
1

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()
Mohamad Shiralizadeh
  • 8,329
  • 6
  • 58
  • 93
1

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()
Tomasito
  • 1,864
  • 1
  • 20
  • 43
-2

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

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Yossi Dahan
  • 5,389
  • 2
  • 28
  • 50