CS-opas:Metadatan kyseleminen Reflection-metodeilla

Mureakuha

Loikkaa: valikkoon, hakuun
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

Henkilökohtaiset työkalut