CHAPTER 15 TYPE REFLECTION, LATE BINDING, AND ATTRIBUTE-BASED PROGRAMMING
Figure 15-1. Viewing an assembly’s metadata using ildasm.exe
As you can see, ildasm.exe’s display of .NET type metadata is very verbose (the actual binary format
is much more compact). In fact, if I were to list the entire metadata description representing the
CarLibrary.dll assembly, it would span several pages. Given that this act would be a woeful waste of
paper, let’s just glimpse into some key metadata descriptions of the CarLibrary.dll assembly.
Note Don’t be too concerned with the exact syntax of each and every piece of .NET metadata in the next few
sections. The bigger point to absorb is that .NET metadata is very descriptive and lists each internally defined (and
externally referenced) type found within a given code base.
Viewing (Partial) Metadata for the EngineState Enumeration
Each type defined within the current assembly is documented using a TypeDef #n token (where TypeDef
is short for type definition). If the type being described uses a type defined within a separate .NET
assembly, the referenced type is documented using a TypeRef #n token (where TypeRef is short for type
reference). A TypeRef token is a pointer (if you will) to the referenced type’s full metadata definition in an
external assembly. In a nutshell, .NET metadata is a set of tables that clearly mark all type definitions
(TypeDefs) and referenced types (TypeRefs), all of which can be viewed using ildasm.exe’s metadata
window.
As far as CarLibrary.dll goes, one TypeDef is the metadata description of the
CarLibrary.EngineState enumeration (your number may differ; TypeDef numbering is based on the
order in which the C# compiler processes the file).
556