在c#中,如果我想添加其他系統命名空間,爲什麼我需要調用每個命名空間?如果我想添加其他系統名稱空間,爲什麼我需要調用每個名稱空間?
例如,如果我想打電話給System.Text命名空間我必須使用 :
using System;
using System.Text;
- 爲什麼不能我只是用用系統?
- 爲什麼我還必須使用System.Text調用?
- 爲什麼不能通過使用System來使用所有的System namespaces?
- 爲什麼我們使用系統所有的命名空間?和什麼含義系統的?
在c#中,如果我想添加其他系統命名空間,爲什麼我需要調用每個命名空間?如果我想添加其他系統名稱空間,爲什麼我需要調用每個名稱空間?
例如,如果我想打電話給System.Text命名空間我必須使用 :
using System;
using System.Text;
因爲它們是不同的名稱空間。
實際上,你只需要
using System.Text;
如果只想使用System.Text
命名空間。
在System
命名空間內有各種類型,例如System.DateTime
。 System.Text
雖然不在System
中,但它是一個單獨的名稱空間。
這種混淆是由於在名稱空間的每個「級別」都有類型造成的。這意味着例如System.DateTime
和System.Text
都出現在System
中,實際上前者是System
中的一種,而後者是完全不同的名稱空間。
你能詳細說明爲什麼命名約定不好嗎?也許這只是因爲我已經使用.NET多年了,但它對我來說很有意義,而且我們在自己的應用程序中使用了相同的命名傳遞。 –
@LarsKristensen,我試圖做到這一點。希望我在這個過程中沒有讓我的答案過於複雜! –
那麼,理解你想表達的東西有點棘手 - 編輯實際上使得它聽起來像你認爲使用命名對話是一個好方法? :) –
System命名空間僅引用在System下直接找到的文件。它不會自動包含所有System。*名稱空間。這是有意的,因爲這些都是專業的命名空間,在每個班級都不需要。例如,並非每個項目都自動需要System.Web命名空間。
This article解釋瞭如何使用命名空間。尤其是關於完全限定名稱的例子可能會對你很有意思。
下面是一個視覺示例,可以幫助你一點。
基本上,您無法從命名空間.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();
}
}
系統和System.Text是兩個不同的命名空間,這就是爲什麼你必須既指。
的System
命名空間包含基本類和基礎類定義常用值和引用數據類型,事件和事件處理程序,接口,屬性和處理異常
的System.Text
命名空間中包含有類型爲字符編碼和串操縱。子名稱空間使您能夠使用正則表達式處理文本。
現在,如果您對命名風格感到困惑,那麼我會堅持使用微軟的命名約定,因爲它明確隔離了相關類型並且易於迭代。這使得在一個System
命名空間內列出所有CLR類型的迭代類型迭代成爲可能。
不是一個答案,因爲系統是一個集合,充滿了例如「文本」,爲什麼不是在庫中的編譯器庫系統? – Max
正在不同的程序集中回答嗎? –
@MaxMommersteeg不,'System'不是一個集合,例如'.Text'。請參閱我的回答澄清。 –