c#名称空间与文件的关系

时间:2017-03-31 12:25:41

标签: c# .net visual-studio-code

C#名称空间如何与文件和文件夹中程序的物理表示相关?

当使用using指令时,例如:

using MyNameSpace;

C#编译器在哪里查找该命名空间?是否有一些文档涵盖逻辑实体(如命名空间和类与其物理表示形式)之间的关系?

我的.csproj文件只包含

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

</Project>

然而,它似乎编译了项目中的所有.cs文件。我正在使用Visual Studio Code并希望了解正在发生的魔术。

3 个答案:

答案 0 :(得分:2)

“C#编译器在哪里查找该命名空间?” 在每个添加到项目中的Reference中。其中很多都是自动添加的。请记住,仅使用屏蔽使您不必为该命名空间中的每个类编写完全限定名称。它鼓励你写“myClass1”而不是“MyNameSpace.myClass1”(Every.Single.Time)。您有时甚至可能会编写完全限定的名称(例如,当您使用多个带有计时器类的命名空间时 - 在.NET中有3个)。

“是否有一些文档涵盖逻辑实体(如命名空间和类与其物理表示的关系)?” 您将一些MSIL编译的代码放入您的项目参考中。然后,您可以使用该compliation中定义的所有命名空间以及这些命名空间中定义的所有类。请注意,.NET dll和.NET可执行文件都是有效的引用。 .NET builddetable内部是一个.NET dll,带有清单,引导代码和代码中的“入口点”。

答案 1 :(得分:2)

与Java不同,编译器不要求文件遵循与命名空间相同的结构,也不要求文件名与类名匹配。

我认为将文件命名为类名称仍然是好样式,这是VisualStudio在使用新类向导时默认使用的。如果在项目的文件夹中创建类,VisualStudio也将默认使用将基本命名空间与文件夹名称组合在一起的命名空间。

答案 2 :(得分:0)

.NET核心指南中的页面Additions to the csproj format for .NET Core解释了.csproj文件中引用的SDK包含用于在项目中查找源文件的globbing表达式(即**/*.cs)的定义