假设我们现在有下面这个类TestClass
namespace TestSpace
{
public class TestClass
{
private string _value;
public TestClass() { }
public TestClass(string value)
{
_value = value;
}
public string GetValue(string prefix)
{
if (null == _value)
return "null";
else
return prefix + ": " + _value;
}
public string Value
{
set { _value = value; }
get
{
if (null == _value) return "null";
else return _value;
}
}
}
}
我们想通过反射来访问它,方法如下:
//获取类型信息
Type t = Type.GetType("TestSpace.TestClass");
//构造器的参数
object[] constuctParms = new object[]{"timmy"};
//根据类型创建对象
object dObj = Activator.CreateInstance(t,constuctParms);
//获取方法的信息
MethodInfo method = t.GetMethod("GetValue");
//调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
//GetValue方法的参数
object[] parameters = new object[]{"Hello"};
//调用方法,用一个object接收返回值
object returnValue = method.Invoke(dObj,flag,Type.DefaultBinder,parameters,null);