2013-10-25 108 views
3

在c#中,如果我想添加其他系統命名空間,爲什麼我需要調用每個命名空間?如果我想添加其他系統名稱空間,爲什麼我需要調用每個名稱空間?

例如,如果我想打電話給System.Text命名空間我必須使用 :

using System; 
using System.Text; 
  • 爲什麼不能我只是用用系統?
  • 爲什麼我還必須使用System.Text調用?
  • 爲什麼不能通過使用System來使用所有的System namespaces?
  • 爲什麼我們使用系統所有的命名空間?和什麼含義系統的?

回答

0

因爲它們是不同的名稱空間。

+0

不是一個答案,因爲系統是一個集合,充滿了例如「文本」,爲什麼不是在庫中的編譯器庫系統? – Max

+0

正在不同的程序集中回答嗎? –

+0

@MaxMommersteeg不,'System'不是一個集合,例如'.Text'。請參閱我的回答澄清。 –

3

實際上,你只需要

using System.Text; 

如果只想使用System.Text命名空間。

System命名空間內有各種類型,例如System.DateTimeSystem.Text雖然不在System中,但它是一個單獨的名稱空間。

這種混淆是由於在名稱空間的每個「級別」都有類型造成的。這意味着例如System.DateTimeSystem.Text都出現在System中,實際上前者是System中的一種,而後者是完全不同的名稱空間。

+1

你能詳細說明爲什麼命名約定不好嗎?也許這只是因爲我已經使用.NET多年了,但它對我來說很有意義,而且我們在自己的應用程序中使用了相同的命名傳遞。 –

+0

@LarsKristensen,我試圖做到這一點。希望我在這個過程中沒有讓我的答案過於複雜! –

+0

那麼,理解你想表達的東西有點棘手 - 編輯實際上使得它聽起來像你認爲使用命名對話是一個好方法? :) –

3

System命名空間僅引用在System下直接找到的文件。它不會自動包含所有System。*名稱空間。這是有意的,因爲這些都是專業的命名空間,在每個班級都不需要。例如,並非每個項目都自動需要System.Web命名空間。

0

This article解釋瞭如何使用命名空間。尤其是關於完全限定名稱的例子可能會對你很有意思。

1

下面是一個視覺示例,可以幫助你一點。

基本上,您無法從命名空間.System訪問命名空間.Text,因爲.Text命名空間中包含的方法不存在於.System命名空間中。

namespace OuterNamespace 
{ 
    public class DoStuff 
    { 
     public DoStuff() 
     { 
      //This DoStuff is different... 
     } 
    } 
    namespace InnerNamespace 
    { 
     public class DoStuff 
     { 
      public DoStuff() 
      { 
       //than this DoStuff. 
      } 
     } 
    } 
} 

public class Test 
{ 
    public Test() 
    { 
     //This "DoStuff" class 
     OuterNamespace.DoStuff outerStuff = new OuterNamespace.DoStuff(); 

     //Is different than this "DoStuff" class 
     OuterNamespace.InnerNamespace.DoStuff innerStuff = new OuterNamespace.InnerNamespace.DoStuff(); 
    } 
} 
0

系統和System.Text是兩個不同的命名空間,這就是爲什麼你必須既指。

System命名空間包含基本類和基礎類定義常用值和引用數據類型,事件和事件處理程序,接口,屬性和處理異常

System.Text命名空間中包含有類型爲字符編碼和串操縱。子名稱空間使您能夠使用正則表達式處理文本。

現在,如果您對命名風格感到困惑,那麼我會堅持使用微軟的命名約定,因爲它明確隔離了相關類型並且易於迭代。這使得在一個System命名空間內列出所有CLR類型的迭代類型迭代成爲可能。

More about namespaces

相關問題