MSDN Library
Collapse the table of content
Expand the table of content
Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Cómo: Enumerar tipos de datos en ensamblados mediante reflexión (C++/CLI)

 

El código siguiente muestra la enumeración de tipos y miembros públicos mediante System.Reflection.

Dado el nombre de un ensamblado, ya sea en el directorio local o en la GAC, el código que sigue trata de abrir el ensamblado y recuperar descripciones.Si lo consigue, cada tipo se muestra con sus miembros públicos.

Observe que Assembly.Load requiere que no se utilice ninguna extensión de archivo.Por tanto, el uso de "mscorlib.dll" como argumento de la línea de comandos generará un error, mientras que el uso de "mscorlib" resultará en la presentación de los tipos de .NET Framework.Si no se proporciona ningún nombre de ensamblado, el código detectará y creará informes de los tipos incluidos en el ensamblado actual (el EXE que resulta de este código).

// 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 );

// replace "self_reflection.exe" with an assembly from either the local
// directory or the GAC
   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);
}
Mostrar:
© 2016 Microsoft