源文件约定(C# 与 Java)

更新:2007 年 11 月

包含 C# 类的文件的命名约定与 Java 文件的命名约定有所不同。在 Java 中,所有源文件的扩展名均为 .java。每个源文件均包含一个顶级公共类声明,并且该类的名称必须与文件名匹配。换句话说,使用公共范围声明的类 Customer 必须在名为 Customer.java 的源文件中定义。

C# 源代码用 .cs 扩展名表示。与 Java 不同,C# 源文件可以包含多个顶级公共类声明,并且文件名不必与任何类名称匹配。

顶级声明

在 Java 和 C# 中,源代码的开头为几个按一定顺序排列的顶级声明。Java 和 C# 程序中的声明仅有少许不同。

Java 中的顶级声明

在 Java 中,可以使用 package 关键字将类组合在一起。组合后的打包类必须在源文件第一行可执行代码中使用 package 关键字。如下所示,之后是访问其他包中的类所需的任何导入语句,然后是类声明:

package Acme;
import java.io.*;
class Customer
{
    ...
}

C# 中的顶级声明

C# 使用命名空间的概念,通过 namespace 关键字将相关类按逻辑方式组合在一起。这些组合类的作用与 Java 包的作用相似,并且同一个类可以出现在两个不同的命名空间内。若要访问在当前命名空间之外的某个命名空间中定义的类,请使用 using 指令,并在该指令后面加上命名空间名称,如下所示:

using System.IO;

namespace Acme 
{
    class Customer
    {
        // ...
    }
}

注意,可以在命名空间声明内放入 using 指令,在这种情况下,这些导入的命名空间将成为包含命名空间的一部分。

Java 不允许在同一个源文件中出现多个包。而 C# 允许在一个 .cs 文件中出现多个命名空间,如下所示:

namespace AcmeAccounting
{
    public class GetDetails
    {
        // ...
    }
}

namespace AcmeFinance
{
    public class ShowDetails
    {
        // ...
    }
}

完全限定名称和命名空间别名

与 Java 一样,不对命名空间使用 using 引用仍可以访问 .NET Framework 命名空间或用户定义的命名空间中的类,方法是提供类的完全限定名称,例如,上例中的 DataSet 或 AcmeAccounting.GetDetails。

但完全限定名称可能因名称太长而难以处理,在这种情况下,可以使用 using 关键字指定一个简称或别名,以提高代码的可读性。

在下面的代码中,将创建一个别名,以引用由某个虚构公司编写的代码:

using DataTier = Acme.SQLCode.Client;

class OutputSales
{
    static void Main()
    {
        int sales = DataTier.GetSales("January");
        System.Console.WriteLine("January's Sales: {0}", sales);
    }
}

注意,在 WriteLine 的语法中,格式字符串中含有 {x},其中的 x 表示要插入到该位置的值在参数列表中的位置。假设 GetSales 方法返回 500,则应用程序的输出应当为:

January's Sales: 500

预处理指令

与 C 和 C++ 类似,C# 包含预处理指令,这些指令提供以下能力:有条件地跳过源文件中的节、报告错误和警告条件以及描绘源代码的不同区域。使用“预处理指令”一词仅仅是为了与 C 和 C++ 编程语言保持一致,因为 C# 并不包括单独的预处理步骤。有关更多信息,请参见 C# 预处理器指令

请参见

概念

C# 编程指南

其他资源

C# 编程语言(针对 Java 开发人员)