Freigeben über


Gewusst wie: Auflisten von Datentypen in Assemblys mit Reflektion

Aktualisiert: November 2007

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

   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 in C++