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

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

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

谁能给我解释一下这种行为?

4

2 回答 2

19

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

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

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


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

于 2012-12-11T04:33:21.640 回答
8

开始 C# 对象:从概念到代码 - Jacquie Barker、Grant Palmer

推荐的约定是以扩展名 .cs 结尾的源代码文件名,但没有要求这样做;例如,一个源文件可以被命名为 Person.boo

也出自同一本书

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

于 2012-12-11T05:00:00.837 回答