C#编译器编译.txt .obj .java文件

时间:2012-12-11 04:28:28

标签: c# compiler-construction

using System;
class Program {
    public static void Main() {
        Console.WriteLine("Hello World!");
        Console.ReadLine();
    }
}

我将文件保存为1.java2.obj3.txt。 然后,我使用Visual Studio命令提示符编译文件:csc 1.java csc 2.obj csc 3.txt

令人惊讶的是,它将所有3个文件编译成可执行文件并成功执行。

有人能解释一下这种行为吗?

2 个答案:

答案 0 :(得分:19)

文件扩展名与C#编译器无关:只要它正确获取程序文本,编译器就不会查看文件的名称或扩展名。 C#编译器的documentation没有提到命名要求 *

将其与Java进行对比,其中文件名和位置很重要。 Java编译器只需要*.java源文件file names matching the names of public classes inside them

  

源代码文件名必须具有.java后缀,类文件名必须具有.class后缀,并且源文件和类文件都必须具有标识该类的根名称。

<小时/> * 即使编译器不需要它,*.cs仍然是C#源文件的通用接受命名约定。

答案 1 :(得分:8)

Beginning C# Objects: From Concepts to Code - By Jacquie Barker, Grant Palmer

  

建议的约定是使用。结束源代码文件名   扩展.cs,但没有要求这样做;源文件   可以想象,可以将其命名为Person.boo,例如

同样来自same book

  

同样,C#源文件的名称不必与名称匹配   在该文件中定义的类或接口。例如,   定义教授类的代码可以放在一个名为的文件中   Blah.cs,但它被认为是源文件名的好习惯   匹配文件中声明的类或接口的名称。