if (m.Name.Equals("Set", StringComparison.Ordinal) && pi[0].ParameterType == typeof(int))
{
object[] args = new object[2];
args[0] = 9;
args[1] = 10;
//参数reflectOb,为一个对象引用,将调用他所指向的对象上的方法,如果为静态方法这个参数必须设置为null
//参数args,为调用方法的参数数组,如果不需要参数为null
m.Invoke(reflectOb, args); //调用MyClass类中的参数类型为int的Set方法,输出为Inside set(int,int).x:9, y:10
}
}
Console.ReadKey();
}
}
获取Type对象的构造函数
在这之前的阐述中,由于MyClass类型的对象是都是显式创建的,因此使用反射技术调用MyClass类中的方法是没有任何优势的,还不如以普通方式调用方便简单呢。但是,如果对象是在运行时动态创建的,反射功能的优势就会显示出来。在这种情况下,要先获取一个构造函数列表,然后调用列表中的某个构造函数,创建一个该类型的实例。通过这种机制,可以在运行时实例化任意类型的对象,而不必在声明语句中指定类型。
复制代码 代码如下:
View Code
class MyClass
{
int x;
int y;
public MyClass(int i)
{
x = y + i;
}
public MyClass(int i, int j)
{
x = i;
y = j;
}
public int sum()
{
return x + y;
}
}
class InvokeConsDemo
{
static void Main()
{
Type t = typeof(MyClass);
int val;
ConstructorInfo[] ci = t.GetConstructors(); //使用这个方法获取构造函数列表
int x;
for (x = 0; x < ci.Length; x++)
{
ParameterInfo[] pi = ci[x].GetParameters(); //获取当前构造函数的参数列表
if (pi.Length == 2) break; //如果当前构造函数有2个参数,则跳出循环
}
if (x == ci.Length)
{
return;
}