【问题标题】:Dumb C# Question, How is System and System.Text both namespaces愚蠢的 C# 问题,System 和 System.Text 是如何命名空间的
【发布时间】:2021-12-29 01:34:50
【问题描述】:

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 使用 System 你必须像这样称呼它

using System.Text;

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

可能还有其他一些我不够聪明想不到的方法

【问题讨论】:

  • 我认为没有“第二个是正确的”@Charles - 1 或 2 都可以

标签: c# nested namespaces system


【解决方案1】:

您的第一个和第二个将表现相同。命名空间有点像文件夹,类有点像文件。您可以将命名空间放在像文件夹这样的层次结构中:

namespace System{
  namespace Text{
    class StringBuilder{

如果你试图把它想象成一个 DOS 命令序列,它可能就像每个namespace 是一个mkdir,每个{ 是一个cd,每个} 是一个@987654327 @出来吧:

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 添加到搜索路径,因此如果您正在寻找 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 - 由于“路径添加文本”而在搜索时仍然会找到它,但添加一个文件夹到搜索路径不会导致在其他文件夹中创建文件夹

文件/文件夹的类比最终失败了,因为 C# 可以在一个文件中的任意数量的命名空间中包含任意数量的类,该文件的名称与任何东西都没有关系 - 哎呀,它可能是 Cdrive.cs 并包含数百个类和命名空间,但为了这个目的,它会做..

【讨论】:

  • 谢谢,非常感谢
猜你喜欢
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
相关资源
最近更新 更多