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,030
  • 21
  • 100
  • 124
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
  • 95,331
  • 80
  • 293
  • 426
amazedsaint
  • 7,604
  • 6
  • 53
  • 83
2

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

--larsw

larsw
  • 3,720
  • 2
  • 22
  • 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
  • 7,733
  • 5
  • 59
  • 85
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,834
  • 20
  • 42
-2

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

Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
Yossi Dahan
  • 5,329
  • 1
  • 27
  • 50