假设我们现在有下面这个类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);