Gewusst wie: Auflisten von Datentypen in Assemblys mit Reflektion (C++/CLI)

Im folgenden Code wird die Enumeration von öffentlichen Typen und Membern mit System.Reflection dargestellt.

Wenn der Name eines Assemblys im lokalen Verzeichnis oder im GAC vorhanden ist, wird mit dem folgenden Code versucht, die Assembly zu öffnen und Beschreibungen abzurufen. Wenn der Vorgang erfolgreich abgeschlossen wird, wird jeder Typ mit seinen öffentlichen Membern angezeigt.

Beachten Sie, dass mit Assembly.Load keine Dateierweiterung verwendet werden darf. Aus diesem Grund schlägt die Verwendung von '"mscorlib.dll" als Befehlszeilenargument fehl, während "mscorlib" dazu führt, dass die .NET Framework-Typen angezeigt werden. Wenn kein Assemblyname verfügbar ist, werden vom Code die Typen in der aktuellen Assembly (der von diesem Code erstellten EXE) erkannt und ausgegeben.

Beispiel

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

Siehe auch

Referenz

Reflektion (C++/CLI)