可能大家都知道在C#中如何创建一个类,但对于类的结构可能大家不一定了解的很清楚,对于我来说,我之前也搞的不是很明白,今天,当我没事研究反射的时候突然发现了着一点。
我们来看类的结构到底是什么

          public class People        //类名

          {

              private static string name;    //字段

              private string sex;//字段

              public string Sex     //属性

              {

                  get { return sex; }

               set { sex = value; }

           }

           public static string Name    //属性

           {

               get { return People.name; }

               set { People.name = value; }

           }

           private People() //构造函数

           {

           }

           public static string GetName()    // 函数

           {

               if (string.IsNullOrEmpty(name))

               {

                   name = "my name";

               }

               return name;

           }

       }

以上所有的构造函数、事件、字段、方法和属性都叫做成员,即Member

运行下列代码:

          Type t = typeof(People);

                       Console.WriteLine("----------------Method------------------");

                       MethodInfo[] methods = t.GetMethods();

                      foreach (MethodInfo method in methods)

                      {

                          Console.WriteLine("Method:" + method);

                          //Console.WriteLine(method);

                          //Console.WriteLine("返回值:" + method.ReturnParameter);

                   }

                   Console.WriteLine("---------------Field-------------------");

                   FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

                   foreach (FieldInfo field in fields)

                   {

                       Console.WriteLine("Field:" + field);

                   }

                   Console.WriteLine("--------------Member--------------------");

                   MemberInfo[] members = t.GetMembers();

                   foreach (MemberInfo member in members)

                   {

                       Console.WriteLine("Member:" + member);

                   }

                   Console.WriteLine("--------------Property--------------------");

                   PropertyInfo[] properties = t.GetProperties();

                   foreach (PropertyInfo property in properties)

                   {

                       Console.WriteLine("Property:" + property);

                   }

                   Console.WriteLine("--------------Constructor--------------------");

                   ConstructorInfo[] constructors = t.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);

                   foreach (ConstructorInfo constructor in constructors)

                   {

                       Console.WriteLine("Constructor:" + constructor);

                   }

输出结果为:


          ----------------Method------------------

          Method:System.String get_Sex()

          Method:Void set_Sex(System.String)

          Method:System.String get_Name()

          Method:Void set_Name(System.String)

          Method:System.String GetName()

          Method:System.String ToString()

          Method:Boolean Equals(System.Object)

          Method:Int32 GetHashCode()

       Method:System.Type GetType()

       ---------------Field-------------------

       Field:System.String sex

       Field:System.String name

       --------------Member--------------------

       Member:System.String get_Sex()

       Member:Void set_Sex(System.String)

       Member:System.String get_Name()

       Member:Void set_Name(System.String)

       Member:System.String GetName()

       Member:System.String ToString()

       Member:Boolean Equals(System.Object)

       Member:Int32 GetHashCode()

       Member:System.Type GetType()

       Member:System.String Sex

       Member:System.String Name

       --------------Property--------------------

       Property:System.String Sex

       Property:System.String Name

       --------------Constructor--------------------

       Constructor:Void.ctor()

请按任意键继续. . .
另外,我们发现属性Sex和Name编译以后变成了get_Sex,get_Name,set_Sex,set_Name,呵呵,看来还是更java一样

C#反射类中所有字段,属性,方法的更多相关文章

  1. php 类中设置成员属性方法

    class FileUpload { private $path = "./uploads"; //上传文件保存的路径 private $allowtype = array('jp ...

  2. JNI_Z_03_类中的字段和方法的签名

    1. Java类型 相应的签名 例子 boolean Z byte B char C short S int I long L float F double D void V Object L用&qu ...

  3. C#类中的字段、属性和方法

    C#类中的字段.属性和方法 刚开始学C#,对于类中的字段.属性和方法很难分清,写下这份笔记,帮助理解 字段:与类相关的变量 声明方法与声明变量类似,可在前面添加访问修饰符.static关键字等: 属性 ...

  4. C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)

    4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...

  5. c#基础3-方法的重载静态和非静态,字段属性,方法

    方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方 ...

  6. AE 向已存在的要素类中添加字段

    风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...

  7. 在client类中设置访问属性 address,business和individua

    php 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的, 是为了有的场合想用多继承,但PHP又没多继承 ,于是就发明了这样的一个东西. Traits可以理解为一组能 ...

  8. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

  9. UnSafe类中的一些重要方法

    UnSafe类中的一些重要方法 JDK中的rt.jar保重Unsafe类中提供了硬件级别的原子性操作,Unsafe类中的方法都是navtice方法,他们使用JNI的方式访问C++实现库,下面我们来了解 ...

随机推荐

  1. CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)

    机房一台centos6.9机器部署了jenkins发布系统,开发人员在用node编译js,发现依赖的gcc版本低了,故需要将gcc升级到高版本(至少5.0版本以上),这里选择升级到6.4.0版本,下面 ...

  2. C. The Tower is Going Home

    链接 [http://codeforces.com/contest/1075/problem/C] 题意 有个1e9*1e9的棋盘(1,1)位置在左下角也就是车这枚棋子的位置,然后有n个在某一列后面划 ...

  3. 【个人阅读】软件工程M1/M2阶段总结

    这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来....到这些都基本完成的时候,会看自己以前的阅读心得,觉得 ...

  4. 【CV】ICCV2015_Learning Temporal Embeddings for Complex Video Analysis

    Learning Temporal Embeddings for Complex Video Analysis Note here: it's a review note on novel work ...

  5. 《Linux内核设计与实现》 第十八章学习笔记

    调  试 一.准备开始 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 知道这个bug最早出现在哪个内核版本中. 1.想要成功进行调试: 让这些错误重现 抽象出问题 从代码中搜索 二. ...

  6. git常用命令点击查看

    创建git项目仓库 $git init 配置个人登记信息,这样团队协作的时候,就可以看到哪个用户修改过哪些文件的 $git config --global user.name 'cfanbo' $gi ...

  7. 『编程题全队』Beta 阶段冲刺博客一

    1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.讨论并制定了Beta阶段的计划 孙慧君: 1.Beta阶段任务的认领 黄华林 ...

  8. 8 commands to check cpu information on Linux

    https://www.binarytides.com/linux-cpu-information/

  9. UBB编辑器

    http://ckeditor.com/ 这是老大哥 http://kindeditor.org/ 这是新秀 http://htmleditor.in/firefox-html-editor.html ...

  10. Windows环境搭建mysql服务器

    Windows环境搭建mysql服务器: 1.下载mysql-installer-community-5.7.3.0-m13.2063434697并安装  安装详细步骤>> 2.安装mys ...