2012-11-27 122 views
3

有关C#的问题。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; 

预先感谢您!

+0

访问你不** **有**到**包括在所有的任何命名空间。 它没有在程序集中包含任何东西,它只是使名称空间中的类可以从全局名称空间访问。所有名称在编译时都解析为完全限定名。 – Rotem

回答

5

因为嵌套的名称空间不包含在父类中。请参阅使用指令不给你访问嵌套在指定命名空间中的命名空间细节

一个using directive文档。

+0

但我可以不过去三年 – user198003

+1

运行相同的程序,因为这三个命名空间包含可能是有用的扩展:泛型集合(如'IEnumerable的'),[LINQ(http://msdn.microsoft.com/en- en/library/bb397926.aspx)扩展和文本处理实用程序。实际上,你甚至不需要'System'来运行应用程序,但是这样的应用程序没有太多的用处(甚至不能输出任何东西,因为'Console'类在'System'命名空间中) – J0HN

+0

@ user198003 Visual Studio将它们默认放在那里,因为它们包含经常使用的类。如果你不需要它们,你可以删除它们。无论哪种方式,它都不会以任何方式影响生成的装配。 – Rotem

0

既然你是初学者,让我澄清一件事情C#中的namespace和Java中的package是不同的东西。不需要合并它们。

2

SystemSystem.IO命名空间是不同的。

您可以将“子名称空间”视为对象模型中的父子关系。如果您有权访问“汽车”物品并不意味着您可以使用汽车的车轮。

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

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?  
} 
2

想象这些命名空间中使用这些类(姓氏是一类)的情况下:

  • A.B.Class1
  • A.Class2

现在您有以下内容:

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

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

如果您想在代码中直接引用这两个类,则需要同时使用这两个类。

-1

如果你想获得在System.Text类没有using语句,你将不得不文本“类/函数的名称”每次你想使用它的时间。

这样你就可以叫“类/函数的名称”。

不知道,如果你是一个初学者,但是这是我可以形容把它最简单的方法。

+0

名称空间不能包含函数。 –

+0

我知道,但我的意思是在该名称空间的类中的一个函数。 – Ifnullbreak

0

并非.net中的所有类都放在一个大容器中。这样做会增加类名碰撞的可能性,并且它首先看起来不太好.Namespaces是一些容器,它们试图保持您的库清洁并使其更多在一个容器下将FTP类和String类合并在一起并不合逻辑。他们做了两件不同的事情,它们应该保存在不同的容器中。

也是一个命名空间可以nested.Sometime命名空间都可以,但有只是一个命名空间,没有任何class.so访问你需要限定完整的命名空间,然后才能使用它的类。

在你的情况使用不同的类,这是在不同的containers.So如果需要的话,你需要用自己的命名空间来限定它们。

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 
    } 
    } 
} 
+0

你能解释一下这个问题吗? – J0HN

+0

@ J0HN这不回答这个问题,这只是让OP理解清楚的一个例子。正如我在帖子中提到的那样。 –

相关问题