愚蠢的 C# 问题,System 和 System.Text 两个命名空间如何

Dumb C# Question, How is System and System.Text both namespaces

System 和 System.Text 两个命名空间如何


它们是否像嵌套命名空间一样创建

namespace System{
    Some Classes with Methods
    
    namespace Text{
        Some Classes with Methods
    }

    namespace Linq{
        Some Classes with Methods
    }
}

因为文本嵌套在系统内部,所以您必须这样称呼它

using System.Text;

----------------或----------------

他们是不是像

namespace System{
    Some Classes with Methods
}

namespace System.Text{
    Some Classes with Methods
}

namespace System.Linq{
    Some Classes with Methods
}

所以当你调用它时,你是通过它的实际命名空间来调用它

using System.Text;

----------------或----------------

或者可能是因为它写得像

namespace System{
    Some Classes with Methods
}

using System;
namespace Text{
    Some Classes with Methods
}

using System;
namespace Linq{
    Some Classes with Methods
}

所以因为 Text 使用的是系统,所以你必须这样称呼它

using System.Text;

----------------或-------------

可能是我脑子不够聪明想不到的其他方法

您的第一个和第二个将表现相同。命名空间有点像文件夹,classes 有点像文件。您可以将您的名称空间置于文件夹之类的层次结构中:

namespace System{
  namespace Text{
    class StringBuilder{

如果你想把它想象成一系列 DOS 命令,它可能就像每个 namespace 是一个 mkdir,每个 { 是一个 cd它和每个 } 都是其中的一个 cd .. :

mkdir System               (Mkdir doesn't crash if a directory exists)
  cd System
  mkdir Text
    cd Text
    edit StringBuilder.cs

您可以一次指定完整路径:

namespace System.Text{
  class StringBuilder{

可能是这样的

mkdir System\Text         (Yes, mkdir can accept a full path and will create every directory along the way)
  cd System\Text
  edit StringBuilder.cs

您的第三个是合法的 C#,但与其他两个不同。您的第三个声明了 3 个根级命名空间,分别称为 System、Text 和 Linq。 using 语句不像 DOS cd 那样“将您留在名称空间 X 中”,它更像是“将名称空间 X 添加到搜索路径中,因此如果您要查找 class Z,您有另一个已知的搜索路径

在 DOS 术语中你的第三个例子就像

mkdir System
  cd System
  cd ..

path add System

mkdir Text
  cd Text
  cd ..

path add Text

mkdir Linq
  cd Linq 
  cd ..

您最终不会以这种方式得到文件夹层次结构,您最终会在 C:\

中得到 3 个文件夹

你可以写

var sb = new StringBuilder();

但它会是 Text.StringBuilder 而不是 System.Text.StringBuilder,因为它会在 c:\Text\StringBuilder.cs 中 - 由于 " path add Text”,但将文件夹添加到搜索路径不会导致在其他文件夹中创建文件夹

file/folder 的类比最终落空了,因为 C# 可以在任意数量的名称空间中有任意数量的 classes,在一个名为与任何东西无关的单个文件中 - 见鬼,它可能是 Cdrive.cs 并包含数百个 classes 和名称空间,但为此目的它会做..