C#中的命名空间和子命名空间

时间:2012-11-27 11:41:44

标签: c# namespaces

关于C#的问题。

在每个程序中,我都必须包含多个名称空间,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

为什么我必须包括:

using System.Collections.Generic;
using System.Linq;
using System.Text;

...因为它们包含在第一个中:

using System;

提前谢谢!

8 个答案:

答案 0 :(得分:6)

因为嵌套的命名空间不包含在父命名空间中。有关详细信息,请参阅using directive文档

  

using 指令不允许您访问嵌套在您指定的命名空间中的任何命名空间。

答案 1 :(得分:2)

SystemSystem.IO名称空间不同。

您可以将“subnamespace”视为对象模型中的父子关系。如果您可以访问“Car”对象并不意味着您可以访问汽车的车轮。

System是一个巨大的命名空间,包含数百个嵌套命名空间和数千个类。您应该分别指定所有嵌套的命名空间,以说明您感兴趣的模块的哪个部分。

答案 2 :(得分:2)

SystemSystem.Text是两个不同的命名空间。 System.Text似乎是System的一部分是我们作为程序员所加入的语义。在平台视图中没有嵌套命名空间;

但即使不是这样,如果你有

会发生什么
namespace MySystem{
   namespace Foo{
       class Bar {...}
   }

   class Bar{...}
}

using MySystem;
class MyClass{
    private Bar _myBar; //Which one is it MySystem.Foo.Bar or MySystem.Bar?     
}

答案 3 :(得分:2)

想象一下这些名称空间与这些类(姓氏是一个类):

  • A.B.Class1
  • A.Class2

现在您有以下内容:

using A - 允许您直接引用Class2但不能引用Class1。

using A.B - 允许您直接引用Class1但不引用Class2。

如果你想直接在你的代码中引用这两个类,你需要两个使用。

答案 4 :(得分:0)

由于你是初学者,让我澄清一下C#中的namespace和Java中的package是不同的东西。无需合并它们。

答案 5 :(得分:0)

并非.net中的所有类都在一个大容器内。这样就增加了类名冲突的可能性,并且它首先看起来不太好。名称空间是容器,它们试图让你的库保持清洁并且更有意义在一个容器下将FTP类和String类放在一起在逻辑上没有任何意义。他们做了两件不同的事情,应该将它们保存在不同的容器中。

命名空间也可以嵌套.Sometime命名空间可以只有另一个命名空间,没有任何class.so来访问你需要的类,然后才能使用它。

在你的情况下,你使用不同的类,这些类在不同的容器上。所以如果你需要它们,你需要使用它们的命名空间限定它们。

答案 6 :(得分:0)

只是一个让你清楚理解的例子。

通过调用父命名空间

无法访问子命名空间
Namespace Main  //only code and classes are accessible
{
  //code for Main Namespace
  Namespace subMain     //only code and classes are accessible
  {
     //code for subMain
     Namespace verySubMain  //only code and classes are accessible
     {
        //code for verySubMain
     }
     Namespace otherVerySubMain  //only code and classes are accessible
     {
        //code for otherVerySubMain
     }
  }
}

答案 7 :(得分:-1)

如果您希望在没有using语句的情况下访问System.Text中的类,则每次希望使用它时都必须使用Text。“类/函数名称”。

这样你就可以调用“类/函数名称”。

不确定你是不是初学者,但这是我能描述的最简单的方法。