Permalink
306c608 Jul 27, 2017
@mairaw @guardrex @tompratt-AQ @mikeblome
83 lines (56 sloc) 3.29 KB
title ms.date ms.prod ms.technology ms.topic dev_langs ms.assetid caps.latest.revision author ms.author translation.priority.mt
Reflection (C#)
2015-07-20
.net
devlang-csharp
article
CSharp
f80a2362-953b-4e8e-9759-cd5f334190d4
3
BillWagner
wiwagn
cs-cz
pl-pl
pt-br
tr-tr

Reflection (C#)

Reflection provides objects (of type xref:System.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.

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:

// 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.

// 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

[!NOTE] 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 xref:System.Reflection.MethodBase.IsAssembly%2A property. To identify a protected internal method, use the xref:System.Reflection.MethodBase.IsFamilyOrAssembly%2A.

Reflection Overview

Reflection is useful in the following situations:

  • When you have to access attributes in your program's metadata. For more information, see Retrieving Information Stored in Attributes.

  • For examining and instantiating types in an assembly.

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

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

Related Sections

For more information:

See Also

C# Programming Guide
Assemblies in the Common Language Runtime