|
The act of inspecting a type's metadata at runtime is called reflection, and it is a fundamental facility of the CLR. All .Net assemblies have metadata information stored about the types defined in modules. This metadata information can be accessed by mechanism called as “Reflection”. System. Reflection can be used to browse through the metadata information.
In fact, reflection is so fundamental that the type system's base class, System.Object , has a method GetType specifically designed to facilitate this inspection. The GetType() method returns a singleton Type object for the type on which it was invoked. The Type class provides a means for developers to access the metadata of the type it describes.Reflection provides dynamically invoke methods using System.Type.Invokemember and access the metadata information at runtime.
Reflection Classes
The MemberInfo and Type classes are the foundation for the reflection facilities. The Type class provides several methods and properties to permit inspection of a type's metadata. It inherits from the MemberInfo class, which in turn inherits from Object . The diagram shows the reflection class hirarchy.
.gif)
MemberInfo Class
The MemberInfo class serves as a base class for many of the reflection " Info " classes. The MemberInfo class is abstract. Subtypes of MemberInfo which include the following classes:
- EventInfo:- a class whose objects represent events of a type. Example properties and methods of this type include Name , GetAddMethod , GetRaiseMethod , and GetRemoveMethod.
- FieldInfo:- a class whose objects represent fields of the type. Example properties and methods of this type include Name , FieldType , and GetValue.
- MethodBase:- a base class for representing methods on a class, such as constructors and methods. Example properties and methods include IsConstructor , GetParameters , and Invoke.
- PropertyInfo:- a class whose objects represent properties of the type. Example properties and methods of this type include Name , CanRead , CanWrite , and GetAccessors.
- Type:- a class whose objects represent types in the CLR
MethodBase Class
This is an abstract base class for ConstructorInfo and MethodInfo.
- ConstructorInfo:- a class whose objects represent constructors available on the type. A ConstructorInfo object exists for each constructor that a class has.
- MemberInfo:- a class whose objects represent methods of the type. Example properties and methods of this type include IsAbstract , ReturnType , and GetBaseDefinition , which is used to access the overridden method definition from the class's base type .
ParameterInfo
A class whose objects represent parameters of a method of the type. This class inherits from Object , Example properties and methods of this type include IsIn , IsOut , and IsDefined .
Type Class
The Type Class is an abstract class. The methods and properties provide by the Type Class is as follows:
- Get methods:- Methods that start with the word Get and return information about one aspect of the type.
- Is Method or properties:- Methods or properties that return a Boolean value indicating whether the type satisfies a condition.
- Properties:- Properties of the type, such as AssemblyQualifiedName.
- Static Fields:- Fields holding information required to process the type.
Example: Demonstrate Reflection

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace cSHARPEXAMPLES
{
public partial class Form21 : Form
{
public Form21()
{
InitializeComponent();
}
private void button2_Click( object sender, EventArgs e)
{
Type t = Type .GetType( "System.Object" );
textBox1.Text = textBox1.Text + "FullName: " + t.FullName + "\n" ;
textBox1.Text = textBox1.Text + "Qualified Name:" + t.AssemblyQualifiedName + "\n" ;
textBox1.Text = textBox1.Text + "GUID:" + t.GUID + "\n" ;
textBox1.Text = textBox1.Text + "IsAbstract:" + t.IsAbstract + "\n" ;
textBox1.Text = textBox1.Text + "IsClass:" + t.IsClass +"\n" ;
textBox1.Text = textBox1.Text + "IsInterface:" + t.IsInterface + "\n" ;
textBox1.Text = textBox1.Text + "IsSealed:" + t.IsSealed + "\n" ;
MemberInfo [] members = t.GetMembers();
foreach ( MemberInfo m in members)
textBox2.Text = textBox2.Text + m + "\n" ;
}
}
}
Output:
 |