Aracılığıyla paylaş


Nasıl yapılır: yansıtma kullanarak derlemeler veri türlerini numaralandırır (C++/ CLI)

Aşağıdaki kod örneği System.Reflection kullanarak genel tür ve üyelerin numaralandırılmasını göstermektedir.

Yerel dizinde ya da GAC'de derlemenin adı verildiğinde, aşağıdaki kod derlemeyi açmaya ve açıklamaları almaya çalışır.Başarılı olursa, her tür yerel üyeleriyle görüntülenir.

Assembly.Load'un dosya uzantısı kullanılmamasını gerektirdiğini unutmayın.Bu yüzden, yalnızca "mscorlib" kullanmak .NET Framework türlerinin görüntülenmesini sağlarken, "mscorlib.dll"yi komut satırı bağımsız değişkeni olarak kullanmak başarısız olur.Derleme adı sağlanmazsa, kod geçerli derlemedeki (bu koddan oluşan EXE) türleri algılar ve raporlar.

Örnek

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

Ayrıca bkz.

Başvuru

Yansıtma (C++/ CLI)