C# 如何查看源程序的IL代码

1、打开microsoft  visual  studio  2008  /  visual  studio  tools /  visual  studio  2008 命令提示  ,并输入ildasm 。如下图所示:

2、按enter键,打开IL DASM 窗口,如下图所示:

3、单击 文件 / 打开,打开编译好的.exe文件,即可查看该代码的IL代码

例如:通过visual  studio  2008 命令提示 查看如下源程序的IL代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BubbleSort
{
   class BubbleSort1
    {//升序排序,每一趟都将最大的一个数放在最后
        public static void BubbleSort(int[] items)
        {
            int i, j, temp;
            if (items == null)
                return;
            for (i = items.Length - 1; i >= 0; i++)
                for (j=1;j<=i;j++)
                    if (items[j - 1] > items[j])
                    {
                        temp = items[j - 1];
                        items[j - 1] = items[j];
                        items[j] = temp;
                    }
         }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BubbleSort
{
    class BubbleSort2
    {
        public enum SortType
        {
            Ascending,
            Descending
        }
        public static void BubbleSort(int[] items, SortType sortOrder)
        {
            int i, j, temp;
            if (items == null)
                return;
            for (i = items.Length - 1; i >= 0; i++)
            {
                for (j = 1; j <= i; j++)
                {
                    switch (sortOrder)
                    {
                        case SortType.Ascending:
                            if (items[j - 1] > items[j])
                            {
                                temp = items[j - 1];
                                items[j - 1] = items[j];
                                items[j] = temp;

}
                            break;
                        case SortType.Descending:
                            if (items[j - 1] < items[j])
                            {
                                temp = items[j - 1];
                                items[j - 1] = items[j];
                                items[j] = temp;
                            }
                            break;
                    }

}
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BubbleSort
{
    public delegate bool ComparisonHandler (int first,int second);//委托类型的声明
    class BubbleSort3
    {
        public static bool GreaterThan(int first, int second)
        {//升序排序
            return first > second;
        }
        public static bool LessThan(int first, int second)
        {//降序排序
            return first < second;
        }
        public static bool AlphabeticalGreaterThan(int first, int second)
        {//按照字母表排序。a.CompareTo(b):若a>b 返回值小于0, a<b返回值大于0,
            //a=b返回值等于0
            int comparison;
            comparison = (first.ToString().CompareTo(second.ToString()));
            return comparison > 0;
        }
        public static void BubbleSort(int[] items, ComparisonHandler comparisonMethod)
        {
            int i, j, temp;
            if (items == null)
                return;
            if (comparisonMethod == null)
                throw new ArgumentNullException("comparisonMethod");
            for (i = items.Length - 1; i >= 0; i--)
            {
                for(j=1;j<=i;j++)
                    if (comparisonMethod(items[j - 1], items[j]))
                    {
                        temp = items[j - 1];
                        items[j - 1] = items[j];
                        items[j] = temp;
                    }
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BubbleSort;

namespace BubbleSort
{
    class Program
    {
        static void Main(string[] args)
        {
            int intcount;
            Console.WriteLine("请输入待排序的整数序列的个数:");
            intcount = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入待排序的整数序列:");
            int[] items = new int[intcount];
            for (int i = 0; i < intcount; i++)
            {
                items[i]=Convert .ToInt32 (  Console.ReadLine());
               
             }

ComparisonHandler comparisonMethod = BubbleSort3.GreaterThan;
            BubbleSort3.BubbleSort(items, comparisonMethod);
            Console.WriteLine("调用类BubbleSort3中的排序方法排序后的整数序列为:");
            for(int i=0;i<intcount;i++)
            {
                Console.Write(items[i]);
                Console.Write("   ");

}

}
    }
}

以上程序的IL代码:

C# 如何查看源程序的IL代码

时间: 2024-11-08 21:41:12

C# 如何查看源程序的IL代码的相关文章

CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集,所以不能使用IL DASM进行查看,但CLR以dll的形式位于.NET版本号文件夹内. □ C#源代码从编译到CLR运行的全过程 →编写C#源代码,以class,struct,enum,interface,delegate...的形式 →编译器把源代码编译成.dll或.exe,其中包含了一些重要信息

C#程序集系列02,使用记事本查看可执行程序集的IL代码

继续上一篇"C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序",在F盘的as文件夹中已经有了若干程序集.本篇体验使用记事本查看可执行程序集的IL代码. →打开"VS2012开发人员命令提示",输入如下命令,并按回车在as文件夹中多了1.txt和1.res这2个文件→输入如下命令打开1.txt // Microsoft (R) .NET Framework IL Disassembler. Version 4.0.30319.18020

读懂IL代码就这么简单(一)

一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的,此言一出不明觉厉. 然后开始接触IL,了解了一段时后才发现原来读懂IL代码并不难.进入正题   1.1  什么是IL IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直

认识IL代码---从开始到现在 &lt;第二篇&gt;

·IL代码分析方法 ·IL命令解析 ·.NET学习方法论 1.引言 自从『你必须知道.NET』系列开篇以来,受到大家很多的关注和支持,给予了anytao巨大的鼓励和动力.俱往昔,我发现很多的园友都把目光和焦点注意在如何理解IL代码这个问题上.对我来说,这真是个莫大的好消息,因为很明显我们的思路慢慢的从应用向底层发生着转变,技巧性的东西是一个方面的积累,底层的探索在我认为也是必不可少的修炼.如果我们选择了来关注这项修炼,那么我们就应该选择如何来着手这项修炼,首先关注anytao的『你必须知道的.N

读懂IL代码(二)

上一篇提到了最基本的IL代码,应该是比较通俗易懂的,所以有了上一篇的基础之后,这篇便要深入一点点的来讲述了. 首先我必须再来说一些重要的概念: Evaluation Stack(评估栈):这是由.NET CLR在执行时候自动管理的记忆体,每一个线程都有自己的评估栈,也就是说,它是用来存储临时变量的线程栈(应该可以这么理解).值类型存储数据,引用类型存储地址. Call Stack(调用栈):这也是由.NET CLR在执行时候自动管理的记忆体,每一个线程都有自己的调用栈,每一次调用method,就

C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序

本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序. □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass.cs→用记事本打开编写如下代码,并保存 using System; public class MyClass { public static void PrintSth() { Console.WriteLine("Hello"); } } →打开"VS2012开发人员命令提示&

浅析.NET IL代码

一.前言 IL是什么? Intermediate Language (IL)微软中间语言 C#代码编译过程? C#源代码通过LC转为IL代码,IL主要包含一些元数据和中间语言指令: JIT编译器把IL代码转为机器识别的机器代码.如下图 语言编译器:无论是VB code还是C# code都会被Language Compiler转换为MSIL MSIL的作用:MSIL包含一些元数据和中间语言指令 JIT编译器的作用:根据系统环境将MSIL中间语言指令转换为机器码 为什么ASP.NET网站第一次运行时

【小白学C#】浅谈.NET中的IL代码

一.前言 前几天群里有位水友提问:”C#中,当一个方法所传入的参数是一个静态字段的时候,程序是直接到静态字段拿数据还是从复制的函数栈中拿数据“.其实很明显,这和方法参数的传递方式有关,如果是引用传递的话,肯定是会去静态字段直接拿值的:如果方法是以传值的方式使用参数的话,一定是从复制的栈中拿值的. 但是这位水友就是不相信这个结论(后来发现,这货整一个杠精啊!天天在群里跟人抬杠~),这个时候我忽然想到了可以反向看一下C#的IL代码,来了解一下程序运行的过程.的确,当我们对运行结果有异议的时候,可以通

读懂IL代码就这么简单(二)

一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 .感谢 @冰麟轻武 的指点 你没有看第一篇?  点这里看第一篇 读懂IL代码就这么简单(一) IL指令大全 :IL指令详解 IL反编译工具: ILDasm 知识点回顾: Managed Heap(托管堆):用于存放引用类型的值 Evaluation Statck(计算栈):临时存放值类型数据,引用