DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

アセンブリ内のすべての型を取得する

まず、Assemblyオブジェクトを取得する基本的な方法について説明します。アセンブリのファイル名を指定してアセンブリを読み込むには、Assembly.LoadFromメソッドを使用します。アセンブリの完全限定名によりアセンブリを読み込むには、Assembly.Loadメソッドを使用します(アセンブリの完全限定名およびその取得方法については、ヘルプの「アセンブリ名」をご覧ください)。さらに、現在のコードを実行しているアセンブリはAssembly.GetExecutingAssemblyメソッドで、アプリケーションドメインに読み込まれているすべてのアセンブリはAppDomain.GetAssembliesメソッドで取得することができます。

次にこれらを使ってAssemblyオブジェクトを取得する例を示します。

VB.NET
コードを隠すコードを選択
'Imports System.Reflection
'がソースファイルの一番上に書かれているものとする

Dim asm As [Assembly]

'ファイル名を指定してアセンブリを読み込む
asm = [Assembly].LoadFrom("MyAssembly.dll")

'アセンブリの完全限定名を指定してアセンブリを読み込む
asm = [Assembly].Load( _
    "System, Version=1.0.5000.0, Culture=neutral, " + _
    "PublicKeyToken=b77a5c561934e089")

'現在のコードを実行しているアセンブリを取得する
asm = [Assembly].GetExecutingAssembly()

'現在のアプリケーションドメインに読み込まれている
'すべてのアセンブリの完全限定名を表示する
Dim asms As [Assembly]() = AppDomain.CurrentDomain.GetAssemblies()
Dim a As [Assembly]
For Each a In asms
    Console.WriteLine(a.FullName)
Next a
C#
コードを隠すコードを選択
//using System.Reflection;
//がソースファイルの一番上に書かれているものとする

Assembly asm;

//ファイル名を指定してアセンブリを読み込む
asm = Assembly.LoadFrom("MyAssembly.dll");

//アセンブリの完全限定名を指定してアセンブリを読み込む
asm = Assembly.Load(
    "System, Version=1.0.5000.0, Culture=neutral, "
    + "PublicKeyToken=b77a5c561934e089");

//現在のコードを実行しているアセンブリを取得する
asm = Assembly.GetExecutingAssembly();

//現在のアプリケーションドメインに読み込まれている
//すべてのアセンブリの完全限定名を表示する
Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly a in asms)
    Console.WriteLine(a.FullName);

さて本題です。アセンブリ内のすべての型を取得するには、Assembly.GetTypesメソッドを使用します。

次の例は、現在のコードを実行しているアセンブリで定義されているすべての型を取得し、表示するものです。

VB.NET
コードを隠すコードを選択
'現在のコードを実行しているアセンブリを取得する
Dim asm As [Assembly] = [Assembly].GetExecutingAssembly()

'アセンブリで定義されている型をすべて取得する
Dim ts As Type() = asm.GetTypes()

'型の情報を表示する
Dim t As Type
For Each t In ts
    Console.WriteLine("名前:{0}", t.Name)
    Console.WriteLine("名前空間:{0}", t.Namespace)
    Console.WriteLine("完全限定名:{0}", t.FullName)
    Console.WriteLine("このメンバを宣言するクラス:{0}", t.DeclaringType)
    Console.WriteLine("直接の継承元:{0}", t.BaseType)
    Console.WriteLine("属性:{0}", t.Attributes)
    Console.WriteLine()
Next t
C#
コードを隠すコードを選択
//現在のコードを実行しているアセンブリを取得する
Assembly asm = Assembly.GetExecutingAssembly();

//アセンブリで定義されている型をすべて取得する
Type[] ts = asm.GetTypes();

//型の情報を表示する
foreach (Type t in ts)
{
    Console.WriteLine("名前:{0}", t.Name);
    Console.WriteLine("名前空間:{0}", t.Namespace);
    Console.WriteLine("完全限定名:{0}", t.FullName);
    Console.WriteLine("このメンバを宣言するクラス:{0}", t.DeclaringType);
    Console.WriteLine("直接の継承元:{0}", t.BaseType);
    Console.WriteLine("属性:{0}", t.Attributes);
    Console.WriteLine();
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。