Hoofdstuk 14 - Les 1

Met de Assembly.ReflectionOnlyLoad en Assembly.ReflectionOnlyLoadFrom methodes kunnen enkel assemblies gelezen worden, maar niet worden uitgevoerd.

Nadat het Type is achterhaald van een object, kunnen de properties en methoden worden uitgelezen. Roep GetMethod() aan om een MethodInfo object te maken. Met de Invoke methode van MethodInfo kan de method worden uitgevoerd.
// Haal het type op van de StringBuilder class
Type t = typeof(StrinBuilder);

// Maak een instructor object
ConstructorInfo ci = t.GetConstructor(new Type[] {typeof(string)});

// Maak een instantie van het type
object obj = ci.Invoke(new object[] {"Hallo, "});

// Maak een methodinfo object en geef op dat we de Append methode willen
MethodInfo mi = t.GetMethod("Append", new type[] {typeof(string)});

// Roep methode Append aan
object result = mi.Invoke(obj, new object[]{"world!"});

// Schrijf de instantie naar het scherm
Console.WriteLine(result);

Door MethodInfo.GetMethodBase aan te roepen krijg je een instantie van MethodObject. Met de methode GetILAsByteArray worden alle bytes geretourneerd die de intermediate language (IL) gebruikt om de methode uit te voeren.

Gebruik Type.GetMembers() om te bladeren door alle events, fields, properties en methods. Als er geen parameters worden meegegeven wordt er een MemberInfo array geretourneerd met alle public members. Gebruik de BindingsFlag enumeratie om bepaalde type members op te halen (static, nonPublic, public, etc).

Assembly attributen beschrijven de assembly, zoals de naam, versie en copyright jaar. Attributen kunnen worden uitgelezen door Assembly.GetCustomAttributes aan te roepen welke een array van attributen retourneert. De overloaded method kan gebruikt worden om een alleen attributen van een bepaald type te laten retourneren.

Classes in de System.Reflection.Emit namespace maken het mogelijk om classes dynamisch te creëren. Zo is er voor elk 'onderdeel' een passende class: ConstructorBuilder, EnumBuilder, EventBuilder, PropertyBuilder, MethodBuilder, etc..

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren