次の方法で共有


方法 : リフレクションを使用してアセンブリ内のデータ型を列挙する

更新 : 2007 年 11 月

次のコードは、System.Reflection を使用してパブリック型とメンバを一覧表示します。

このコードは、アセンブリ名が指定されると、ローカル ディレクトリ内または GAC 内のいずれかで、アセンブリを開き記述を取得します。正常に処理が完了すると、各型が、そのパブリック メンバと共に表示されます。

ただし、Assembly.Load では、ファイル拡張子を使用しないでください。したがって、コマンド ライン引数に "mscorlib.dll" を使用するとエラーになります。一方、"mscorlib" のみを指定すると、.NET Framework の型が表示されます。アセンブリ名を指定しないと、コードにより、現在のアセンブリ (このコードにより生成された EXE) 内の型が検出され、報告されます。

使用例

// self_reflection.cpp
// compile with: /clr
using namespace System;
using namespace System::Reflection;
using namespace System::Collections;

public ref class ExampleType {
public:
   ExampleType() {}
   void Func() {}
};

int main() {
   String^ delimStr = " ";
   array<Char>^ delimiter = delimStr->ToCharArray( );
   array<String^>^ args = Environment::CommandLine->Split( delimiter );

   Assembly^ a = Assembly::LoadFrom("self_reflection.exe");
   Console::WriteLine(a);

   int count = 0;
   array<Type^>^ types = a->GetTypes();
   IEnumerator^ typeIter = types->GetEnumerator();

   while ( typeIter->MoveNext() ) {
      Type^ t = dynamic_cast<Type^>(typeIter->Current);
      Console::WriteLine("   {0}", t->ToString());

      array<MemberInfo^>^ members = t->GetMembers();
      IEnumerator^ memberIter = members->GetEnumerator();
      while ( memberIter->MoveNext() ) {
         MemberInfo^ mi = dynamic_cast<MemberInfo^>(memberIter->Current);
         Console::Write("      {0}", mi->ToString( ) );
         if (mi->MemberType == MemberTypes::Constructor)
            Console::Write("   (constructor)");

         Console::WriteLine();
      }
      count++;
   }
   Console::WriteLine("{0} types found", count);
}

参照

参照

C++ のリフレクション