情形一:生成类的实例
1、知道一个类的类型,生成该类的实例
public void CreatInstance(Type T)
{
ObjectClass obj=(ObjectClass)Activator.CreateInstance(T,para[])//para为类构造函数的参数
}
2、知道类名,生成类的实例
public void CreatInstance()
{
Type t=typeof(ObjectClass)
ObjectClass obj=(ObjectClass)Activator.CreateInstance(T,para[])//para为类构造函数的参数
}
3、知道一个dll,生成dll中的类的实例
public void CreatInstance(Type T)
{
Assembly ass=Assembly.LoadForm("Class.dll")
foreach(Type t in ass.GetTypes())
{
ObjectClass obj=(ObjectClass)Activator.CreateInstance(t,para[])//para为类构造函数的参数
}
//或者通过ass指定类名称
// ObjectClass obj=(ObjectClass)ass.CreateInstance("名字空间.类名")//注意此时的程序集名称和
//默认名字空间名称一致
}
情形二:获取类中的成员方法,属性和字段
public void ReflectorMethod()
{
ObjectClass obj=new ObjectClass();
Type t=Typeof(obj);
MethodInfo []methodInfo=t.GetMethods();//获取所有公共方法
MethodInfo method=t.GetMethod("Method");//获取特定方法
Object[] para={"para1","para2"};
method.Invoke(obj,para);//带参方法的调用
method.Invoke(null,para);//静态带参方法的调用
method.Invoke(obj,null);//不带参数方法的调用
MethodInfo privateMethod=t.GetMethod
("PrivateMethod",BindingFlags.Instance|BindingFlags.NonPublic)
PropertyInfo pro=a.GetProperty("property1");//获取属性
pro.GetValue(obj,null);//获取属性的值
pro.SetValue(obj,value,null);//设置属性的值,属性类型不定故value类型不定
FiledInfo field=a.GetField("field");//获取字段
field.getValue(obj);//获取字段的值
}