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