Chapter 13. Reflection
Many of the services available in .NET and exposed via C# (such as
late binding, serialization, remoting, attributes, etc.) depend on
the presence of metadata. Your own programs can also take advantage
of this metadata, and even extend it with new information. Examining
existing types via their
metadata is
called reflection, and is done using a rich set
of types in the System.Reflection
namespace.
It is also possible to dynamically create new types at runtime via
the classes in the System.Reflection.Emit
namespace. You can extend the metadata for existing types with custom
attributes. For more information, see Chapter 14.
Type Hierarchy
Reflection involves traversing and manipulating an object model that represents an application, including all its compile-time and runtime elements. Consequently, it is important to understand the various logical units of a .NET application and their roles and relationships.
The fundamental units of an application are its types, which contain
members and nested types. Types are contained in modules, which are
composed into assemblies. All these elements are described with
metadata. Metadata is generally produced by the compiler at compile
time, although it may also be created on the fly via
Reflection.Emit
(which is described in the later
section “Creating New Types at
Runtime”).
At runtime, these elements are all contained within an
AppDomain
. An AppDomain
isn’t described with metadata, yet it plays an important role in reflection ...
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.