问题
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.
回答1:
See the documentation for System.Reflection.Assembly.GetTypes() and System.Type.GetMembers()
--larsw
回答2:
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.
回答3:
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()
回答4:
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()
回答5:
Many examples are on the web. Here's one (in C# though).
来源:https://stackoverflow.com/questions/397435/list-of-classes-in-an-assembly