• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 通俗易懂的C#之反射教程

通俗易懂的C#之反射教程

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了通俗易懂,通俗易懂的近义词,通俗易懂的意思,量子是什么通俗易懂,通俗易懂的反义词等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

之所以要写这篇关于C#反射的随笔,起因有两个:

第一个是自己开发的网站需要用到

其次就是没看到这方面比较好的文章。

所以下定决心自己写一篇,废话不多说开始进入正题。

前期准备

在VS2012中新建一个控制台应用程序(我的命名是ReflectionStudy),这个项目是基于.net 4.0。接着我们打开Program.cs文件,按照如下在Program中写一个我们自己的类:
public class RefClass
        {
            private int _test3;
            private int _test1 { get; set; }
            protected int Test2 { get; set; }
            public int Test3 { get; set; }

            public void Show()
            {

            }
        }
</div>

窥视内部

常言道知彼知己百战不殆,所以我们第一步也是关键的一步就是要窥视RefClass类的结构(这里我们假设对RefClass并不理解)。

首先我们先要纵览全局才能继续深入,所以我们先在Main中写入如下代码:
static void Main(string[] args)
        {
            Type t = typeof(RefClass);
            MemberInfo[] minfos = t.GetMembers();
            foreach (MemberInfo minfo in minfos)
            {
                Console.WriteLine(minfo.Name);
            }
            Console.ReadKey();
        }
</div>

在这里我们获取这个类的类型,然后获取了其中的公共成员(可能很多人都会认为GetMembers是获取全部,但其实只是获取公开的所有成员。)然后我们通过foreach将所有的成员的名称循环输出。

然后我们可以查看控制台的输出:

在这里我们可以看到其中不仅仅输出了我们所写类中的成员,同时还输出了父类的成员(如果不理解的这里帮你们补充下基础,Object是所有类的基类。),细心的读者一定会发现这里的输出并没有包含private和protected访问权限的成员。这就应了上面的那句话:GetMembers默认返回公开的成员。

仅仅只能看到这些公开的成员对我们来说意义并不大,所以我们需要查看到那些非公有的成员。

下面我们将上面的代码改成如下所示:
static void Main(string[] args)
        {
            Type t = typeof(RefClass);
            MemberInfo[] minfos = t.GetMembers(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public );
            foreach (MemberInfo minfo in minfos)
            {
                Console.WriteLine(minfo.Name);
            }
            Console.ReadKey();
        }
</div>

从中我们看到我们使用了GetMembers的重载版本,并且传入了枚举类型,分别是“包含非公开”、“包含实例成员”和“包含公开”。然后我们就可以获取到所有成员了。

 

最终我们将会得出下面这些成员:

到这里你可能会认为我们已经检索结束了,但是你有没有发现属性很多,而且还包含了大量的父类中的属性,假设我们只关注该类中的成员,并不关注父类中的成员该如何做呢?

其实我们只需要加上一个枚举类型(BindingFlags.DeclaredOnly):
MemberInfo[] minfos = t.GetMembers(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly );
</div>

然后我们再查看结果:

此时就只包含该类中的成员了。

下面我们在RefClass类中添加两个静态方法,如下所示:
public class RefClass
        {
            private int _test3;
            private int _test1 { get; set; }
            protected int Test2 { get; set; }
            public int Test3 { get; set; }

            private static void Show2()
            {
            }

            public static void Show3()
            {
            }

            public void Show()
            {

            }
        }
</div>

然后我们继续查看,可以发现最终的结果并没有输出这些静态成员。这个时候我们只需要在GetMembers中加上一个枚举:BindingFlags.Static即可。

这里我们仅仅输出了所有的成员,但是却没有区分出是方法还是属性所以我们在Main中添加一个方法:

static void Main(string[] args)
        {
            Type t = typeof(RefClass);
 &

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 通俗易懂的C#之反射教程

相关文章

  • 2017-05-28C#遍历文件夹及子目录下所有图片
  • 2017-05-28C#十五子游戏编写代码
  • 2017-05-28C#实现将商品金额小写转换成大写的方法
  • 2017-05-28c#多线程网络聊天程序代码分享(服务器端和客户端)
  • 2017-05-28C#通过XML节点属性/属性值读取写入XML操作代码实例
  • 2017-05-28C#使用LINQ中Enumerable类方法的延迟与立即执行的控制
  • 2017-05-28Winform下实现图片切换特效的方法
  • 2017-05-28C#中list用法实例
  • 2017-05-28C#中使用IrisSkin2.dll美化WinForm程序界面的方法
  • 2017-05-28C#使用NPOI上传excel

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#常用GDI+文字操作汇总
    • 用C#缩小照片上传到各种空间的具体方法
    • .NET单点登陆的实现方法及思路
    • 详解C# 托管资源和非托管资源
    • C#反射应用实例
    • WinForm相对路径的陷阱
    • C#利用反射技术实现去掉按钮选中时的边框效果
    • C#中Convert.ToInt32()和int.Parse()的区别介绍
    • 基于一个应用程序多线程误用的分析详解
    • asp.net中调用oracle存储过程的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有