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

Pra*_*tia 17 c# compiler-construction

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

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

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

谁能给我一个关于这种行为的解释?

das*_*ght 19

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

与Java相比,文件名和位置很重要.Java编译器只需要*.java源文件,文件名与其中的公共类名称相匹配:

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


*即使编译器不需要它,*.cs仍然是C#源文件的普遍接受的命名约定.

  • `C#源文件通常具有文件扩展名.cs`*第1.1节,C#语言规范3.0*.没有**必须**在这里. (8认同)
  • @ Akina91这有点难,因为[C#compoler的文档](http://msdn.microsoft.com/en-us/library/78f4aasd(v = vs.80).aspx)根本没有提到任何会建议源文件及其扩展名有一个命名约定.另一方面,[Javac docs](http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.html)说"源代码文件名必须有.java后缀,类文件名必须具有.class后缀,源文件和类文件都必须具有标识该类的根名称." (7认同)
  • 任何来源/参考? (2认同)

Hab*_*bib 8

开始C#对象:从概念到代码 - 由Jacquie Barker,Grant Palmer撰写

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

也来自同一本书.

同样,C#源文件的名称不必与该文件中定义的类或接口的名称相匹配.例如,定义Professor类的代码可以放在名为Blah.cs的文件中,但是对于源文件名来说,与文件中声明的类或接口的名称相匹配是一种很好的做法.