反射时一种允许用户获得累心信息的C#功能。Type对象映射它所代表的底层对象,对Type对象进行查询可以获得与类型相关的信息。反射的类都位于System.Reflection名称空间中,它们是.NET Reflection API的一部分。因此,在使用反射的程序中通常包含以下代码行:using System.Reflection。Type类派生与System.Reflection.MemberInfo抽象类,MemberInfo类定义的只读属性有以下:
1.MemberTypes MemberType 获取成员的类型。包括成员字段、方法、属性、事件、构造函数
2.string Name 成员的名称
3.Module Module 获取一个代表反射类型所在模块的Module对象
4.Type ReflectedType 反射的对象的类型
除了MemberInfo类定义的方法之外,Type类还添加了许多自己的方法:
1.MethodInfo[]GetMethods() 获取指定类型的方法列表
2.MemberInfo[]GetMembers() 获取指定类型的成员列表
3.PropertyInfo[]GetProperties() 获取指定类型的属性列表
4.EventInfo[]GetEvents() 获取指定类型的事件列表
5.ConstructInfo[]GetConstructors() 获取指定类型的构造函数列表
用反射获取方法的相关信息:
using System.Reflection;
using System;
class MyClass
{
int x, y;
public MyClass(int i, int j)
{
x = i;
y = j;
}
public int Sum()
{
return x + y;
}
public void Set(int a, int b)
{
x = a;
y = b;
}
public void Set(double a, double b)
{
x = (int)a;
y = (int)b;
}
public void Show()
{
Console.WriteLine("x:{0},y:{1}", x, y);
}
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(MyClass); //获取Type对象代表MyClass
MethodInfo[] mi = t.GetMethods(); //调用Type方法
foreach (MethodInfo m in mi)
{
Console.WriteLine(m.ReturnType.Name + " " + m.Name); //输出方法类型和方法名
ParameterInfo[] pi = m.GetParameters();
for (int i = 0; i < pi.Length; i++)
{
Console.WriteLine(pi[i].ParameterType.Name + " " + pi[i].Name);//输出参数类型和参数名
}
}
Console.ReadLine();
}
}
输出:
