您的位置:澳门新葡8455最新网站 > 编程教学 > 类入口函数,怎么着编写翻译运转

类入口函数,怎么着编写翻译运转

发布时间:2019-12-31 04:26编辑:编程教学浏览(106)

    C# 是完全面向对象的,不存在全局的变量、常量和函数,它们必须位于类中,注意,这里说的是 C#,不是 ASP.NET,也就是说扩展名为 .cs 的文件,而不是扩展名为 .aspx 的文件,尽管 ASP.NET 可以用 C# 作为开发语言。

    在 C# 章节中,前面的文章我们都是将 C# 作为 ASP.NET 的开发语言来介绍的,其中的代码都受到了 ASP.NET 的影响,比如 Page_Load 函数就属于 ASP.NET 的内容,在本章节以后的部分文章中,我们将介绍“纯” C#,它不在 ASP.NET 中运行,遍身上下皆是 C# 代码,所以我们先讲一讲如何编译运行“纯” C# 程序。

    .cs 即 C# 类文件,(.vb 为 VB 类文件),我们以一个简单的类示例开始 C# 类的讲解。

    编辑“纯” C# 代码,就是编辑 C# 类文件,扩展名为 .cs(VB 类文件扩展名为 .vb),可以用任何文本编辑器编辑。C# 是完全面向对象的,不存在全局的变量、常量和函数,所以所有程序代码都集中在类中,将某个类的 Main 函数作为程序入口函数就可以运行了。

    using System;

    关于如何编写这些类,我们在今后的文章中有专门介绍,下面谈谈如何把 .cs 文件编译成 .exe 文件。

    /// <summary>
    /// Summary description for Class1
    /// </summary>
    public class Class1
    {
        public static void Main()
        {
            //
        }
    }

     

    class 为关键字,Class1 为类名称,Main 为入口函数(即将这个文件编译成 exe 文件后,运行程序,立即执行 Main 函数),入口函数规则:

    要将 .cs 文件编译成 .exe 文件,需要一个 csc.exe(以下简称 csc)文件(编译 .vb 的文件是 vbc.exe),在安装了 .NET Framework 后,我们可以在类似 C:WINDOWSMicrosoft.NETFrameworkv2.0.50727 的位置找到这个文件,我们应该在命令提示符中运行这个文件,可以通过 csc /? 查看该程序的选项。

    • 对保护级别没有要求,但一般指定为 public。
    • 必须为静态函数-static。
    • 返回值必须是 void 或 int。
    • 必须是 Main,大小写有误将不能作为入口函数。
    • 函数可以有参数,也可以没有参数,有参数时用 string 数组(string[] args)作参数,表示命令行参数。

    我们现有 .cs 文件如下:


    using System;
    /// <summary>
    /// Summary description for Class1
    /// </summary>
    public class Class1
    {
        public static void Main()
        {
            //
        }
    }

     

    该文件存储于 D:foo.cs,我们现在通过 csc 将其编译成 .exe 保存于 E:foo.exe。

    using System;

    C:WINDOWSMicrosoft.NETFrameworkv2.0.50727>csc /target:exe /out:E:foo.exe
     D:foo.cs

    /// <summary>
    /// Summary description for Class1
    /// </summary>
    public class Class1
    {
        public static void Main()
        {
            Console.WriteLine("Hello World!");
            Class2.Main();
        }
    }

    • 由于网页显示原因,上述内容可能被分隔为两行,实际为一行。
    • /target:exe 表示编译的目标是 exe 文件(还可以是 winexe、library、module)。
    • /out:(注意不是 /output:)表示编译的的目标文件的存放位置。

    public class Class2
    {
        public static void Main()
        {
            Console.Write("Class2.Main");
        }
    }

    双击 foo.exe,我们可以看到窗口一闪而过,这是由于程序没有任何应用代码,“一下就执行完了”,不过我们通常在命令提示符中执行,而不是双击。

    Console.WriteLine 表示向控制台输出一行字符串,Console 的名称空间为 System。

     

    在 Class1 的 Main() 中调用了 Class2 的 Main(),由于 Main 是静态函数,我们可以用“类名.函数名”调用。

    要注意的是这里生成的 exe 是一个由中间语言(IL),元数据(Metadata)和一个额外的被编译器添加的目标平台的标准可执行文件头(比如Win32平台就是加了一个标准Win32可执行文件头)组成的PE(portable executable,可移植执行体)文件,而不是传统的二进制可执行文件--虽然他们有着相同的扩展名。

    现在我们要将 cs 文件编译成 exe 文件,相关知识请参见 如何编译运行 C# 程序。这里有两个类,两个入口函数,哪一个有效呢?这就需要借助于 csc 的 /main: 选项了。

    我们可以很方便地解剖这个 exe 文件以获得中间语言,利用文件 ildasm.exe(以下简称 ildasm),该文件可以在类似 C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bin 的位置找到(需要安装 .NET SDK)。

    csc /target:exe /out:E:foo.exe /main:Class1 D:foo.cs

    C:Program FilesMicrosoft Visual Studio 8SDKv2.0Bin>ildasm /output:E:foo.il
     E:foo.exe

    上述编译方法,将 Class1 的 Main() 作为入口,在命令提示符中运行 foo.exe 将显示两行文字:Hello World! 和 Class2.Main。

    • 由于网页显示原因,上述内容被分隔为两行,实际为一行。
    • 注意这里是 /output:,不是 /out:。
    • 一般输出两个文件 foo.il 和 foo.res。

    csc /target:exe /out:E:foo.exe /main:Class2 D:foo.cs

    上述编译方法,将 Class2 的 Main() 作为入口,在命令提示符中运行 foo.exe 将显示一行文字:Class2.Main。

    说明:Main() 入口函数并不是必须的,比如我们要将 C# 代码编译成 DLL 以供 ASP.NET 调用,就不能有 Main()。


     

    using System;
     
    /// <summary>
    /// Summary description for Class1
    /// </summary>
    public class Class1
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(args[0]);
        }
    }

    以上代码,我们将输出第一个参数,根据上述程序,如果不存在参数时,将发生程序错误,调用示例:

    E:>foo arg

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:类入口函数,怎么着编写翻译运转

    关键词:

上一篇:没有了

下一篇:没有了