通过这篇博文学习简单的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