C#反射类中所有字段,属性,方法
可能大家都知道在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#反射类中所有字段,属性,方法的更多相关文章
- php 类中设置成员属性方法
class FileUpload { private $path = "./uploads"; //上传文件保存的路径 private $allowtype = array('jp ...
- 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 ...
- C#类中的字段、属性和方法
C#类中的字段.属性和方法 刚开始学C#,对于类中的字段.属性和方法很难分清,写下这份笔记,帮助理解 字段:与类相关的变量 声明方法与声明变量类似,可在前面添加访问修饰符.static关键字等: 属性 ...
- C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)
4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...
- c#基础3-方法的重载静态和非静态,字段属性,方法
方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方 ...
- AE 向已存在的要素类中添加字段
风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...
- 在client类中设置访问属性 address,business和individua
php 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的, 是为了有的场合想用多继承,但PHP又没多继承 ,于是就发明了这样的一个东西. Traits可以理解为一组能 ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
- UnSafe类中的一些重要方法
UnSafe类中的一些重要方法 JDK中的rt.jar保重Unsafe类中提供了硬件级别的原子性操作,Unsafe类中的方法都是navtice方法,他们使用JNI的方式访问C++实现库,下面我们来了解 ...
随机推荐
- Kruskal算法-HDU1863畅通工程
链接 [http://acm.hdu.edu.cn/showproblem.php?pid=1863] 题意 Problem Description 省政府"畅通工程"的目标是使全 ...
- 【读书笔记】Linux内核设计与实现(第三章)
3.1 进程 处于执行期的程序. 进程就是正在执行的程序代码的实时结果.内核需要有效而又透明地管理所有细节. 执行线程(简称线程):在进程中活动的对象.每个线程都拥有一个独立的程序计数器.进程栈和一组 ...
- navicat有数据额结构同步
这个功能可能检查两个库的表结构异同,进行表结构构同步,可以生成同步语句. 比如在测试环境表中新增了字段,可以通过这个工具进行表结构同步.
- enumerate()函数用法
enumerate 函数用于遍历序列中的元素以及它们的下标:
- pandas的to_csv()使用细节和一些参数
dt.to_csv('C:/Users/think/Desktop/Result.csv',sep='?')#使用?分隔需要保存的数据,如果不写,默认是, dt.to_csv('C:/Users/th ...
- ESXi虚拟机开机进入bios的方法
想要修改启动顺序, 发现界面比较难弄 应该是在设置里面有修正. 首先编辑设置 增加如下设置 就可以了.
- Linux 文件系统概览
本文导航 -定义07% -文件系统的基本功能12% -目录结构26% -Linux 统一目录结构50% -文件系统类型74% -挂载81% -结论90% -下个月92% 本文旨在高屋建瓴地来讨论 ...
- Qt_深入了解信号槽(signal&slot)
转自豆子空间 信号槽机制是Qt编程的基础.通过信号槽,能够使Qt各组件在不知道对方的情形下能够相互通讯.这就将类之间的关系做了最大程度的解耦. 槽函数和普通的C++成员函数没有很大的区别.它们也可以使 ...
- scope 前缀开头的方法
https://learnku.com/docs/laravel/5.6/eloquent/1403 本地范围 本地范围允许定义通用的约束集合以便在应用中复用. 例如, 你可能经常需要获取「受欢迎的」 ...
- wps word改多级编号为2.1
右键标题1, 修改样式 编号 多级编号 标题1 2 3 右键标题2 修改样式 选择格式-编号 选择多级编号-标题1 2 3 直接点确定,OK. ---------------------------- ...