C#:你可以在多个文件中拆分命名空间吗?

时间:2010-06-22 13:52:06

标签: c# namespaces

好吧,我找不到任何以前的帖子来回答我的问题......

我是C#的新用户并创建了一些Windows窗体,并注意到它创建了Program.csForm1.cs个文件。

在两者中,它从我的程序“Contacts”的命名空间开始

namespace Contacts
{
   //code here

这些编译在一起,还是编译器仍然单独看到它们?

9 个答案:

答案 0 :(得分:14)

是的,你可以。 Contacts名称空间将包含在定义该名称空间的文件中定义的所有类。

您还可以在同一文件中定义属于不同命名空间的类型。文件和命名空间是完全正交的概念。

从C#2.0开始,您还可以跨多个文件拆分类定义。请参阅here

答案 1 :(得分:6)

namespace只是类名的前缀,是分隔类的方法。它们是单独编译的。

答案 2 :(得分:6)

来自MSDN Documentation

  

使用namespace关键字   声明范围。此命名空间范围   让你组织代码并给你一个   创建全球唯一类型的方法。

是的,名称空间可以(通常是)分割为多个代码文件。这些命名空间中的类是单独编译的,但(通常,暂时不考虑外部资源)到单个输出文件(即exe或dll)中。

非常广义上,想想它就像分拣衣物一样。每个“堆”(一堆颜色,一堆白人等)将是命名空间。堆中的每件衣服都是一个类或一个界面。

希望有所帮助...

答案 3 :(得分:2)

在多个文件之间拆分命名空间没有问题,在大多数程序中,您都可以完成。

通常,所有.cs文件都将与C# compiler (csc)一起编译。

您可以通过更改此设置来查看代码的编译方式:

工具|选项|项目和解决方案|构建并运行

将下拉菜单:“MSBuild项目构建输出详细程度”更改为其中一个较高设置。默认设置为最小值。

答案 4 :(得分:2)

是的,您可以在多个文件中使用相同的命名空间。

最易于访问的示例:在Visual Studio中,创建项目后,可以在该项目中创建更多文件。项目有一个设置,用于指定要分配给新文件的默认命名空间。您的项目将编译为单个dll / exe。

您还可以使用System等现有名称空间。您的System类将在您的程序集中。包含系统内容的.NET主程序集不会被重新编译以包含您的添加内容。但是,您仍然只需要在类顶部使用1 using System语句来使用新的System.x类。

注意:我并不主张将所有代码都放入System中,以免您以后使用语句。有很多理由不这样做,但为了回答原来的问题,这样做太过分了。

答案 5 :(得分:0)

简短的回答是肯定的,你可以将它们分成不同的文件。

答案 6 :(得分:0)

两者都编译成1个命名空间Contacts。你有多个文件和一个命名空间是很正常的。

命名空间只是某种类的包装器。例如,现在您可以拥有名为Sentence的多个类。 您可以在命名空间Jail中创建一个句子,在命名空间Linguistics中创建一个句子。

通过这种方式,您将拥有1个类名Jail.SentenceLinguistics.Sentence的2种表示形式。两者也有不同的身体。

我使用我的命名空间来“组织”代码。我的所有接口都存在于Projectname.Contracts中,而我的常规代码存在于Projectname

此维基百科页面也很有用:Wiki

答案 7 :(得分:0)

是的,您可以使用命名空间跨越文件甚至程序集。这是另一个技巧:

在Visual Studio中,如果您转到解决方案资源管理器并在csharp项目下创建一个文件夹,则默认情况下该文件夹名称将添加到您在该文件夹中创建的任何文件的命名空间。

示例:

  1. 创建一个新的csharep项目。
  2. 右键单击项目,然后选择属性
  3. 将默认命名空间(在属性对话框中)设置为“MyProject”
  4. 确定
  5. 现在在项目中创建一个新类。
  6. 请注意,类的命名空间是“MyProject”
  7. 现在,右键单击您的项目并创建名为“ASubNamespace”的文件夹
  8. 现在右键单击该文件夹,然后选择添加|类
  9. 请注意,您的新类位于MyProject.ASubNamespace命名空间中!

答案 8 :(得分:0)

如果您没有将它拆分为不同的文件,那么您的命名空间布局可能会过于精细。