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 Section 13.8).
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 because it forms a logical process ...
Get C# in a Nutshell 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.