欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 »  .NET本质论第一卷:公共语言运行库教程 » 正文

本教程章节列表

.net本质论-用元数编程(3)

创建时间:2012年09月20日 11:12  阅读次数:(5257)
分享到:
姑且不论Visual Studio的智能感知IntelliSense)特征如何精彩,这个程序生成VB代码的速度就比任何人都要快。此外,这种方式生成的代码与相应的基于反射的代码相比,执行得更快。并且,通过从人工生成(human-generaled)的代码中分离出机器生成(machine-generated)的代码,当其中的娄型改变时,或者当被生成的代码模式改变时,你能够重新生成这个代码,这样便提供了与反射同样的灵活性。

System.Reflection.Fieldinfo类型比较简单,并且易于掌握.由于方法内部所涉及的方面很多,因此方法的描进也相对复杂一些。构造函数与常规方法非常相似,因而System.Reflection.Methodinfo类型和System.Reflection.Constructorinfo类型共享一个公共基类型System. Reflection.MethodBase。常规方法和构造函数都可以带参数,MethodBase类型通过列举参数定义实现这种功能。由于常规方法和构造函数也带有访问修饰符,并且该修饰符是静态的或实例的,所以MethodBase类型也公开了这些属性。由于只有常规方法才能返回一个类型化的值,因而需要通过更为具体的MethodInfo类型才能深入到该方法的这一层。同理,由于只有构造函数才能用于初始化对象,所以,创建类型新实例的能力只有在更具体的ConstructonInfo类型上才是可见的。

你可以通过System.Type.Typelnitializer属性访问类型的视始化器,但是不能将该属性返回的Constructorinfo用于创建新实例。如果要访问类型的(实例)构造函数,就必须使用System.Type.GetConstructors  或System.Type.GetConstructor例程(routine)。你可以通过System.Type.CetMethods例程或System.Type.CetMethod例程访问类型的非构 造函数方法。

为了具体说明MethodInfo类型,不妨考察一个示例。下面的代码通过生成支持给定接口的c#方法定义,演示了MethodInfe的用法。





假定你提供的这个方法带有下面的接口描述:


注意.这个简单的实现并没有将基本类型名称(例如.System.Tnt32)翻译为语言相关的关键字(例如,int)。为了节省篇幅,这种简单的练习就留给读者去完成了。

由于存在重载的情形,查找特定的万法或构造函数会变得复杂.当查找方法和构造函数时,调用方可以指定一个System.Type对象的数组,它会被用来匹配一个特定的重载签名。例如,下面的方法将查找前面的g方法
Type[] argTypes={
Typeof(int),
Type.GetType(“System.Double&”)
};
Type itf=typeof(ILoveLucy);
MethodInfo method=itf.GetMethod(“g”,argTypes);

注意,为了指定按引用传递的参数,可以使用System.Type. GetType方法,并在传递想要的类型名后面跟一个&符号,这是CLR用于指定托管指针类型的协定,常常被用于传引用的情形
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 57+50=? 的结果(结果是:107)
结  果: