アセンブリに定義されているすべての型情報を取得したい場合はAssembly.GetTypesメソッドあるいはAssembly.GetExportedTypesメソッドを使用します。
GetTypesメソッドではアセンブリに含まれるすべての型が返されるのに対して、GetExportedTypesメソッドではアセンブリの外部から参照できる型のみが返されます。 そのためGetExportedTypesメソッドでは、パブリックではない型(アクセス修飾子internal
/Friend
が指定されているクラスなど)は取得できません。
アセンブリ内のすべての型情報を取得する
using System;
using System.Reflection;
public class T1 {} // アセンブリ外に公開されるクラス(public)
internal class T2 {} // アセンブリ外に公開されないクラス(internal)
class Sample { // アセンブリ外に公開されないクラス(internal)
static void Main()
{
var a = Assembly.GetExecutingAssembly();
// GetTypesメソッドではすべての型が返される
Console.WriteLine("[GetTypes]");
foreach (var t in a.GetTypes()) {
Console.WriteLine(t);
}
// GetExportedTypesメソッドではpublicな型のみが返される
Console.WriteLine("[GetExportedTypes]");
foreach (var t in a.GetExportedTypes()) {
Console.WriteLine(t);
}
}
}
実行結果
[GetTypes] T1 T2 Sample [GetExportedTypes] T1