1 static void Main(string[] args)
2 {
3 WriteIL("M1");
4 WriteIL("M2");
5 Console.Read();
6 }
7
8 void M1()
9 {
10 int a = 0;
11 }
12
13 void M2()
14 {
15 int a = 0;
16 Console.WriteLine(a);
17 }
18
19 private static void WriteIL(string method)
20 {
21 Type tp = (new Program()).GetType();
22
23 MethodInfo mi = tp.GetMethod(method,
24 BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
25
26 MethodBody mb = mi.GetMethodBody();
27 byte[] bt = mb.GetILAsByteArray();
28
29 StringBuilder sb = new StringBuilder();
30 for (int i = 0; i < bt.Length; i++)
31 {
32 sb.Append(bt[i].ToString("X2"));
33 sb.Append(" ");
34 }
35
36 Console.WriteLine(sb.ToString());
37 }
2 {
3 WriteIL("M1");
4 WriteIL("M2");
5 Console.Read();
6 }
7
8 void M1()
9 {
10 int a = 0;
11 }
12
13 void M2()
14 {
15 int a = 0;
16 Console.WriteLine(a);
17 }
18
19 private static void WriteIL(string method)
20 {
21 Type tp = (new Program()).GetType();
22
23 MethodInfo mi = tp.GetMethod(method,
24 BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
25
26 MethodBody mb = mi.GetMethodBody();
27 byte[] bt = mb.GetILAsByteArray();
28
29 StringBuilder sb = new StringBuilder();
30 for (int i = 0; i < bt.Length; i++)
31 {
32 sb.Append(bt[i].ToString("X2"));
33 sb.Append(" ");
34 }
35
36 Console.WriteLine(sb.ToString());
37 }
本文介绍了一个使用C#语言解析并打印方法内部IL(中间语言)代码的示例。通过实例展示了如何获取和显示两个简单方法'M1'和'M2'的IL代码,深入理解.NET框架下方法的底层实现。

1204

被折叠的 条评论
为什么被折叠?



