愚蠢的 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 和名称空间,但为此目的它会做..
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 和名称空间,但为此目的它会做..