26.07.2013 Views

Operativsystem: .............................................................

Operativsystem: .............................................................

Operativsystem: .............................................................

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

assembly!");<br />

}<br />

}<br />

ILGenerator skriv_metode_IL=metode_builder.GetILGenerator();<br />

skriv_metode_IL.EmitWriteLine ("Dette er en linje fra en dynamisk oprettet<br />

//Metoden Emit() skriver IL op-koder fx ’Ret’ = return (fra metode):<br />

skriv_metode_IL.Emit(OpCodes.Ret);<br />

//OBS OBS: Her buildes og gemmes den dynamiske (runtime) assembly-type:<br />

klasse_builder.CreateType();<br />

assembly_builder.Save("NyAssembly.dll");<br />

Hele historien handler altså om at anvende en række ’buildere’ i den rigtige rækkefølge:<br />

1. AssemblyBuilder<br />

2. ModuleBuilder<br />

3. TypeBuilder<br />

4. MethodBuilder<br />

og derefter bruge en ILGenerator til at ‘emitte’ dvs skrive IL kode!<br />

Resultatet af at køre programmet er at der oprettes en fil NyAssembly.dll i den aktuelle mappe (her<br />

vist i UML notation):<br />

Vores ny klasse ser helt ’normal’ ud. Den har ikke noget ’Entry Point’ dvs ingen Main(), derfor skal<br />

den gemmes som DLL. Klassen arver fra System.Object – det har vi godt nok ikke selv skrevet!<br />

Klassen har en metode Skriv(). Den gemmes i modulet ’nyassembly.dll’ (Assembly’en kunne have<br />

været fordelt på mange moduler!).<br />

Vi kan nu skrive et lille applikations program som bruger klassen:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!