2012-11-27 120 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理解清楚的一個例子。正如我在帖子中提到的那樣。 –

相關問題