CS-opas:Metadatan kyseleminen Reflection-metodeilla
Mureakuha
- Teknisistä rajoituksista johtuen artikkelin yllä näkyvä otsikko on virheellinen. Oikea otsikko on C#-opas: Metadatan kyseleminen Reflection-metodeilla.
Reflection
Reflectionin avulla voidaan hakea tietoa nimiavaruuksista, luokista, luokan jäsenistä, attribuuteista jne. Reflectionilla voi myös lukea esim. luokan jäseniä (fieldejä, propertyja) ja kirjoittaa niihin, tähän tosin tarvitaan ReflectionPermission oikeudet. Huomaa kuitenkin, että structien jäseniin ei voi kirjoittaa.
Esimerkki dll-tiedoston tutkimisesta
using System; using System.Reflection; namespace Tutki_dll_tiedosto { class MainClass { public static void Main(string[] args) { string s = "c:/dll/testi.dll"; Assembly a = Assembly.LoadFrom(s); Type[] t = a.GetTypes(); Console.WriteLine("Luokkia kirjastossa {0} kpl:tta",t.Length); Console.WriteLine("Ensimmäinen luokka on {0}",t[0].Name); //jne. } } }
string s = "c:/dll/testi.dll"; .NETisttä korkeusjako toteutetaan etukenoilla viivoilla. testi.dll kirjasto luotiin Yhteistoiminta luvussa. CS-opas:Yhteistoiminta
Assembly a = Assembly.LoadFrom(s); Luetaan dll-tiedosto Assembly luokan LoadFrom metodilla
Type[] t = a.GetTypes(); Pyydetään assemblilta kaikki tyypit mitä dll:stä löyty
Console.WriteLine("Luokkia kirjastossa {0} kpl:tta",t.Length); t-muuttuja on taulukko, joten luokkien määrä voidaan laskea taulukon koosta.
Console.WriteLine("Ensimmäinen luokka on {0}",t[0].Name); Type oliolta voidaan sitten kaivaa haluttua tietoa, kuten tässä kohtaa nimi. kts.type class
