愚蠢的C#问题,系统和系统如何.文本都是命名空间



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;

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

可能是其他方面,我不够聪明,没有想到

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

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 SystemText         (Yes, mkdir can accept a full path and will create every directory along the way)
cd SystemText
edit StringBuilder.cs

您的第三个是合法的C#,但与其他两个不同。第三个声明了3个根级别的名称空间,分别称为System、Text和Linq。CCD_ 7语句不像DOS CCD_;将您留在名称空间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,包含数百个类和名称空间,但为此目的,它可以。

最新更新