0
|
1 <p>The <b>System.Reflection.Emit</b> namespace provides classes to create dynamic assemblies at runtime.
|
|
2 It allows compilers and tools to emit <b>MSIL</b>, execute it and store it to a disk.
|
|
3 Although <b>Emit</b> is a powerful tool, it is also extremely hard to use.</p>
|
|
4 <p>Let us take a look at the following example, which demonstrates the "normal" way of emit programming:</p>
|
|
5
|
|
6 HelloWorld.cs
|
|
7 <% ..\..\..\Examples\CS\Reflection.Emit\HelloWorldnormal.cs %>
|
|
8
|
|
9 <p>Note that the Emit method takes one parameter as an OpCode and optionally another one,
|
|
10 which does not depend on the current operation context. So, this way is not entirely type safe.</p>
|
|
11
|
|
12 <p>Fortunately, there is an alternative way. BLToolkit provides a helper class,
|
|
13 <a href='/Source/Reflection/Emit/EmitHelper.cs.htm'>EmitHelper</a>,
|
|
14 which can make your life a little bit easy.
|
|
15 It contains typed wrapper methods for almost all emit commands and allows writing source code
|
|
16 that looks similar to <b>MSIL</b>.</p>
|
|
17 <p>The following examples show how to use the EmitHelper class with C#, VB.NET, and C++/CLI.</p>
|
|
18
|
|
19 HelloWorld.cs
|
|
20 <% ..\..\..\Examples\CS\Reflection.Emit\HelloWorld.cs %>
|
|
21 Cool!!! Isn't it?<br><br>
|
|
22
|
|
23 HelloWorld.vb
|
|
24 <% ..\..\..\Examples\VB\Reflection.Emit\HelloWorld.vb %>
|
|
25
|
|
26 HelloWorld.cpp
|
|
27 <% ..\..\..\Examples\Cpp\HelloWorld.cpp %>
|