源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

关于C#基础知识回顾--反射(一)

  • 时间:2021-06-05 22:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:关于C#基础知识回顾--反射(一)
反射(reflection)是一种允许用户获得类型信息的C#特性。术语“反射”源自于它的工作方式: Type对象映射它所代表的底层对象。对Type对象进行查询可以获得(反射)与类型相关的信息。反射是一种 功能强大的机制,它允许学习和使用只在运行时才能知道的类型功能。 这些是官方定义,其实说白了,反射就是能知道我们未知类型的类型信息这么一个东西.没什么神秘可讲! 反射的核心是System.Type。System.Type包含了很多属性和方法,使用这些属性和方法可以在运行时得到类型信息。 一旦得到类型信息,就可以调用其构造函数、方法和属性。因此,反射允许使用编译时不可用的代 码。因为反射涉及内容太多,我们主要学习常用的反射技术。 [b]一、获取方法的相关信息 [/b]一旦有了Type对象,就可以使用GetMethods()方法来获取此类型支持的方法的列表。它的一种形式为: MethodInfo[] GetMethods() MethodInfo对象描述了主调类型所支持的方法,因此可以通过它的Name属性获得方法的名称。同时它还有两个重 要的方法,ReturnType和GetParameters()。    只读属性ReturnType为一个Type类型的对象,它为用户提供方法的返回类型信息。 GetParameters()返回一个方法的参数列表,它的基本形式为: ParameterInfo[] GetParameters(); 参数信息保存在ParameterInfo对象中。ParameterInfo类定义了大量描述参数信息的属性和方法。 其中常用属性是Name和ParameterType,这两个属性我就不介绍了,从字面上应该可以理解了。 好了,不说了,讲了这么多概念想必大家都不耐烦了。下面我们先看代码示例,估计你看了以后,再结合上面的 概念讲解,你一定会说:哦,原来如此!!!
[url=http://msdn.microsoft.com/zh-cn/library/cexkb29a]msdn上BindingFlags 枚举[/url][/b] 可以使用OR运算符把两个或者更多的标记连接在一起。实际上,括号中至少应包含Instance(或Static) 与Public(或NotPublic)标记,否则将不会获得任何方法。 GetMethods()方法的BindingFlages形式的一个主要用途在于,它可以只获得某个类自身定义的方法而不 获得它从基类继承的方法,这对于object尤其有用。 例如用下列形式来替换前面程序中的GetMethods()语句:
[u]复制代码[/u] 代码如下:
MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public);
进行上述更改后,程序的输出结果为: [img]http://files.jb51.net/file_images/article/201307/2013071010243237.png[/img] 可以看出,这里只显示了MyClass显示定义的方法。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部