Click to Rate and Give Feedback
MSDN
MSDN Library
Visual Studio 2008
Visual Studio
Visual C#
 Reflection

  Switch on low bandwidth view
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
C# Programming Guide
Reflection (C# Programming Guide)

Reflection provides objects (of type Type) that describe assemblies, modules and types. You can use reflection to dynamically create an instance of a type, bind the type to an existing object, or get the type from an existing object and invoke its methods or access its fields and properties. If you are using attributes in your code, reflection enables you to access them. For more information, see Attributes (C# Programming Guide).

Here's a simple example of reflection using the static method GetType - inherited by all types from the Object base class - to obtain the type of a variable:

C#
// Using GetType to obtain type information:
int i = 42;
System.Type type = i.GetType();
System.Console.WriteLine(type);

The output is:

System.Int32

The following example uses reflection to obtain the full name of the loaded assembly.

C#
// Using Reflection to get information from an Assembly:
System.Reflection.Assembly info = typeof(System.Int32).Assembly;
System.Console.WriteLine(info);

The output is:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

NoteNote:

The C# keywords protected and internal have no meaning in IL and are not used in the reflection APIs. The corresponding terms in IL are Family and Assembly. To identify an internal method using reflection, use the IsAssembly()()() property. To identify a protected internal method, use the IsFamilyOrAssembly()()().

Reflection is useful in the following situations:

  • When you have to access attributes in your program's metadata. See the topic Accessing Attributes With Reflection.

  • For examining and instantiating types in an assembly.

  • For building new types at runtime. Use classes in System.Reflection.Emit.

  • For performing late binding, accessing methods on types created at run time. See the topic Dynamically Loading and Using Types.

For more information, see the following sections in the C# Language Specification:

  • 1.12 Attributes

  • 7.5.11 The typeof operator

Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Processing
© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Page view tracker