C# - Egy típus tulajdonságainak lekérdezése

forráskód letöltése
Ha szükségünk lenne programból arra az információra, hogy egy típus, pl.: string, Int32, milyen property-kkel, függvényekkel, eseményekkel, stb. rendelkezik, azoknak milyen típusa, paraméterei vannak, akkor ezt egy egyszerű módszerrel lekérdezhetjük.
Készítünk egy Dump nevű függvényt, melynek paraméterként egy sztringet kell átadni, mely a kérdéses típus megnevezését írja le, pl.: System.Object, System.Int32, stb.
A függvényünk egy ListBox-ba írja a megszerzett információkat.
    private void Dump(string typename)
    {      
      listBox1.Items.Clear();
A típus információinak lekérdezéséhez szükségünk lesz egy Type objektumra, mely az adott típus információt tartalmazza. Ezt a Type statikus GetType függvényével lekérdezhető, paraméterként a kérdéses típus nevét kell megadnunk sztringként.
      Type t = Type.GetType(typename);
      if (t != null)
      {
Szükségünk lesz néhány tömbre, melybe majd az információkat kérjük le.
        MethodInfo[] mi;
        EventInfo[] ei;
        PropertyInfo[] pi;
        ConstructorInfo[] ci;
        FieldInfo[] fi;
        ...
Az adott osztályhoz tartozó konstruktorok információit a Type osztály GetConstructors függvénye szolgáltatja. Ennek paraméterében a BindingFlags felsorolt típus elemeinek kombinációját kell megadnunk. Ezzel rendelkezhetünk arról, hogy milyen típusú információkat szeretnénk viszontlátni. A visszatérési értékként pedig egy tömböt kapunk, melynek minden eleme egy ConstructorInfo osztály típusú objektum lesz. A tömbnek annyi eleme lesz, ahány konstruktor tartozik az adott osztályhoz.
        ci = t.GetConstructors(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
A tömbön most már csak végig kell mennünk egy foreach ciklussal és kiírnunk a szükséges adatokat.
        foreach (MemberInfo m in ci)
        {
          listBox1.Items.Add("\t" + m);          
        }
A további információk lekérdezése hasonló módszerrel történik, csak a property-k esetében a GetProperties függvényt kell használnunk, mely PropertyInfo típusú tömböt ad vissza, az eseményeknél a GetEvents-et, mely EventInfo tömböt ad vissza és így tovább.