雖然經歷了一些遺留代碼,但我發現您可以聲明C#類而不將它放入命名空間中(在這種情況下,我有一個ASP.NET WebForms應用程序和一些Web窗體沒有在任何名稱空間內聲明)。具有空命名空間的AC#類
A GetType()
在這樣的類上返回一個類型,其中namespace
屬性設置爲null
。
我不知道這是允許的 - 任何人都可以提出爲什麼希望有一個沒有在名稱空間內聲明的類?
雖然經歷了一些遺留代碼,但我發現您可以聲明C#類而不將它放入命名空間中(在這種情況下,我有一個ASP.NET WebForms應用程序和一些Web窗體沒有在任何名稱空間內聲明)。具有空命名空間的AC#類
A GetType()
在這樣的類上返回一個類型,其中namespace
屬性設置爲null
。
我不知道這是允許的 - 任何人都可以提出爲什麼希望有一個沒有在名稱空間內聲明的類?
這當然不是很好的做法。它確實使一些例子更容易,像「你好世界」 - 也許C#設計師要去代碼高爾夫球; p
但是,這是一個奇怪的。我不知道有任何響亮的理由,我們需要能夠直接使用全局命名空間。即使是擴展方法,我寧願加using
指令給他們帶來...
有趣的是 - 似乎有在mscorlib.dll
和20多名40多這樣的system.dll
var mscorlib = typeof(string).Assembly.GetTypes()
.Where(t => string.IsNullOrEmpty(t.Namespace)).ToList();
var system = typeof(Uri).Assembly.GetTypes()
.Where(t => string.IsNullOrEmpty(t.Namespace)).ToList();
(但所有私有/編譯器生成的)
我能想到的一個基本原理就是讓簡單的例子更簡單。但是名稱空間的概念本身就相當簡單,而且也是一個相當基本的概念...... – 2011-01-05 10:56:57
也許允許與不支持命名空間的語言進行互操作。
更新
一個小洞穴探險之後,我可以看到,MS使用情況。
所有.Net Framework程序集在全局命名空間中都有一些標準類,例如
這些類包含罐裝的元數據,否則將難以\昂貴得到。我猜他們選擇在全局名稱空間中定位這些名稱空間,以便它們成爲tools \ utilities \ etc可以獲取的標準\常規位置。這些信息是引導\元信息,因此邏輯上位於命名空間的概念之上。
看起來有可能,但我不禁想到,在與BCL交談時,任何此類語言都會受到嚴重損害 – 2011-01-05 10:50:50
哦,我不知道。我創建的東西並不總是(明確地)存在於類或名稱空間中,但是我又一次使用小黑客動態語言;) – delnan 2011-01-05 10:45:28