継承元のクラスやインターフェースを使用して、継承先のクラスを列挙する方法。
' IProgramsインターフェースを実装しているクラスを列挙
Dim types As IEnumerable(Of Type) =
Reflection.Assembly.GetEntryAssembly().GetTypes().
Where(Function(t) t.IsClass).
Where(Function(ct) ct.GetInterfaces.Any(Function(it) GetType(IPrograms).FullName.Equals(it.FullName)))
' 列挙したクラスをインスタンス化しインターフェースに定義してあるProgramNameプロパティをキーにDictionaryに格納
Dim dicPrograms As New Dictionary(Of String, IPrograms)
For Each type As Type In types
Dim clsProgram As IPrograms = CType(Activator.CreateInstance(type), IPrograms)
dicPrograms.Add(clsProgram.ProgramName, clsProgram)
Next
' BaseClassを親に持つクラスを列挙
Dim assm As Assembly = Assembly.GetExecutingAssembly()
Dim types = assm.GetTypes().
Where(Function(t) t.IsClass).
Where(Function(t) t.BaseType.IsClass AndAlso GetType(BaseClass).FullName.Equals(t.BaseType.FullName))
以上
good!!!