Reflector的简单使用入门学习

 

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

首先新建一个项目

image

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

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中

QQ截图20141114111127

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

image

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

[CompilerGenerated]
private int <Age>k__BackingField;
 
[CompilerGenerated]
private int <Id>k__BackingField;
 
[CompilerGenerated]
private string <Name>k__BackingField;

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

查看Age属性下的方法

image

[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

image

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

原文地址:https://www.cnblogs.com/ilooking/p/4096832.html