C#反射机制,什么是反射(2)来源: 发布时间:星期二, 2008年9月16日 浏览:375次 评论:0
书接上回 http://www.crazycoder.cn/DotNet/Article10920.html 继续反射机制的探讨
6、如何获取方法以及动态调用方法
上面是一个简单的类,包含一个有参数的构造器,一个GetValue的方法,一个Value属性,我们可以通过方法的名称来得到方法并且调用之,如: 属性与方法的调用大同小异,大家也可以参考MSDN //获取类型信息
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);
7、动态创建委托
namespace TestSpace {
delegate string TestDelegate(string value); public class TestClass { public TestClass() { } public void GetValue(string value) { return value; } } } 使用示例: TestClass obj= new TestClass();
//获取类型,实际上这里也可以直接用typeof来获取类型 Type t = Type.GetType(“TestSpace.TestClass”); //创建代理,传入类型、创建代理的对象以及方法名称 TestDelegate method = (TestDelegate)Delegate.CreateDelegate(t,obj,”GetValue”); String returnValue = method(“hello”);
namespace TestSpace
{ public class TestClass { private string _value; public TestClass() { } public TestClass(string value) { _value = value; } public string GetValue( string prefix ) { if( _value==null ) return "NULL"; else return prefix+" : "+_value; } public string Value { set {_value=value;} get { if( _value==null ) return "NULL"; else return _value; } } } }
0
相关文章读者评论发表评论 |
|