Chapter 36. System.Reflection.Emit
There are several ways to use reflection
in .NET. Reflection can be used for runtime-type inspection and
late-bound object creation using the types in the
System.Reflection
namespace. Reflection can also
be used for dynamic code creation, which is supported by the types in
this namespace, System.Reflection.Emit
. Dynamic
code creation means a programmer can programmatically create code
constructs such as methods and events from within code, using the
appropriate corresponding type (for example,
MethodBuilder
and
EventBuilder
). These code elements are all
ingredients that can be added to a dynamic assembly, represented by
an AssemblyBuilder
object. Dynamic assemblies can
be saved to disk as PE (Portable Executable) files, typically in DLL
form. Or, alternatively, emit it directly to memory for immediate
use, at the expense of persistence (memory-only types disappear when
the containing AppDomain
terminates).
The ILGenerator
class allows you to
emit the MSIL (Microsoft Intermediate
Language) for your code, using the corresponding
GetILGenerator( )
method from a
builder class. This process (sometimes known as
“baking”) allows you to convert the
information in the builder object into a legitimate .NET type. You
can then instantiate this newly created type on the spot.
The primary use of the System.Reflection.Emit
namespace
is
to create compilers and script hosts, although many other uses are possible, including programs that dynamically create code that ...
Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.