Reflector的简单使用入门学习

 

通过这篇博文学习简单的Reflector的操作

首先新建一个项目

在这个项目中我们新建了一个类

public class People
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }

在Main函数中我们做了以下操作,实例化了一个类并在控制台中打印了相关的信息

static void Main(string[] args)
        {
            People p = new People { Id = 1, Name = "test", Age = 12 };
            Console.WriteLine("Id={0},Name={1},Age={2}", p.Id, p.Name, p.Age);
            Console.ReadLine();
        }

将程序集拖入Reflector中

 

那看到这里,可能你会觉得奇怪

 

通过Reflector我们可以查看到,在我们定义一个简单的类的时候,编译器帮我们生成了三个私有的字段

[CompilerGenerated]
private int <Age>k__BackingField;

[CompilerGenerated]
private int <Id>k__BackingField;

[CompilerGenerated]
private string <Name>k__BackingField;

通过标签CompilerGenerated我们可以知道,这是编译器帮我们内部生成的

查看Age属性下的方法

[CompilerGenerated]
public void set_Age(int value)
{
    this.<Age>k__BackingField = value;
}

 [CompilerGenerated]
public int get_Age()
{
    return this.<Age>k__BackingField;
}

原来其编译器的内部还是先生成了一个私有的字段,在给属性附上字段的值

开到这里,你是不是明白了这和我们定义一个私有字段的值和公有字段的值供给外部调用是一样的呢

private  private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

好了,到这里,我们去看看Main

 

更多的Reflector反编译学习的http://www.cnblogs.com/edisonchou/p/4088959.html

时间: 2024-11-06 19:50:38

Reflector的简单使用入门学习的相关文章

Elasticsearch入门学习(二):简单的入门学习

一.ES一些概念 索引 _inde,文档存储的地方,类似于关系型数据中的数据库. 事实上,数据被存储和索引在分片中,索引仅仅是一个把一个或者多个分片分组在一起的逻辑空间. 索引名字必须是全部小写,不允许以下划线开头,不能包含逗号. 文档 文档id是一个字符串,与_index组合时,就可以在ElasticSearch中唯一标识一个文档.创建文档时,可以自定义_id,也可以让ES帮助自动生成. 二.使用postman入门学习 创建索引 创建索引库的格式为:使用put请求:ip:9200/{index

python入门学习

最近闲来无事,搞搞py交易吧! 作为一个快速崛起的语言,python编程确实是好用的不得了,当然这不是说他就可以代替其他语言,这是目前所有语言都不可能做到的: python有他的优点: 简单,简洁,易懂,入门快: 学过python的应该都有体会,python比其他很多语言都要轻便的多,易于编写: 比如python的hello world: #!/usr/bin/python print('hello world') 就这一句就ok了: 简单的了解下python,下面我们来了解下python2和3

Android中关于JNI 的学习(零)简单的例子,简单地入门

Android中JNI的作用,就是让Java能够去调用由C/C++实现的代码,为了实现这个功能,需要用到Anrdoid提供的NDK工具包,在这里不讲如何配置了,好麻烦,配置了好久... 本质上,Java去调用C/C++的代码其实就是去调用C/C++提供的方法,所以,第一步,我们要创建一个类,并且定义一个Native方法,如下: JniTest类: public class JniTest { public native String getTestString(); } 可以看到,在这个方法的前

android的简单入门学习

话说光配环境就整死我了, 不是说多么难, 是最近google被屏了, 很多sdk里面需要下载的东西都下不下来, 坑爹啊.  最后跟扫拉稀要了一个他配置好的,才运行了. android目录分析: assets 资产目录,存放文件,这些文件会被打包到应用程序的apk(安装包) bin 编译后的文件目录 gen 目录自动生成的目录 project.properties 代表编译的版本 target = "" 来修改编译版本 libs 支持jar包 会被添加到android depend 目录

OpenStack 入门学习之四:icehouse版本中Heat的简单介绍

Heat简介 Heat是OpenStack的负责编排计划的主要项目.它可以基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性.目前Heat自身的模板格式(HOT)正在不停的改进,同时也支持AWS CloudFormation 模板(CFN),HOT的目标是在不远的将来可以完全的替代CFN. Heat提供了一个OpenStack的原生REST API和CloudFormation兼容的查询API. Heat的工作原理 Heat主要是基于模板文件

Python入门学习:1.变量和简单的数据类型

python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用 ??变量,顾名思义是一个可变的量,每个变量都存储一个值--与变量关联的信息. 1message = "hello world!"2# message 是一个变量3print(message) ??在python中使用变量时,需要遵循一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或者下划线打头,但不能以数

Spring.Net 简单入门学习

Spring.NET IoC容器的用法. 通过简单的例子学习Spring.Net 1.先创建一个控制台程序项目. 2.添加IUserInfoDal 接口. namespace Spring.Net { public interface IUserInfoDal { void Show(); } } 3.添加AdoNetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口. AdoNetUserInfoDal.cs public class AdoNetUser

angularjs入门学习【指令篇】

一.首先我们来了解下指令API 属性 含义 restrict 申明标识符在模版中作为元素,属性,类,注释或组合,如何使用 priority 设置模版中相对于其他标识符的执行顺序 Template 指定一个字符串式的内嵌模版,如果你指定了模版是一个URL,那么是不会使用的 tempateUrl 指定URL加载的模版,如果你已经指定了内嵌的模版字符串,那么它不会使用的 Replace 如果为真,替换当前元素,如果是假或未指定,拼接到当前元素 Transclude 移动一个标识符的原始字节带你到一个新

正则表达式入门学习

\b-元字符,代表单词的开头或结尾,也就是单词的分界处. \bHi\b     下列未进行说明的都是元字符. .  匹配除了换行符以外的任意字符. * 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配.(不包含换行的字符) \bHi\b.*\bLucy\b \d 匹配一位数字(0或1或2......或9)  0\d\d-\d\d\d\d\d\d\d\d - 不是元字符 ,只匹配它本身. 避免重复 0\d{2}-\d{8}  {2}({8})指前面\d必须连续重复匹配2次(8次). \