簡體   English   中英

具有空命名空間的AC#類

[英]A C# class with a null namespace

在瀏覽一些遺留代碼時,我發現您可以聲明一個C#類而不將其放在命名空間中(在這種情況下,我有一個ASP.NET WebForms應用程序,並且某些Web表單未在任何命名空間中聲明)。

此類上的GetType()返回一個類型,其中namespace屬性設置為null

我不知道這是允許的 - 有人可以建議為什么有一個未在命名空間中聲明的類是可取的嗎?

這當然不是很好的做法。 確實使一些例子更容易,比如“你好世界” - 也許C#設計師正在尋找代碼高爾夫; p

但是,是的,這很奇怪。 我不知道我們需要能夠直接使用全局命名空間的任何響亮的原因。 即使對於擴展方法,我寧願添加一個using指令來引入它們......

有趣的是 - mscorlib.dll似乎有40多個, system.dll 20多個

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();

(但是所有私有/編譯器生成的)

也許允許與不支持命名空間的語言進行互操作。

更新

經過一番洞察,我可以看到MS使用的案例。

所有.Net Framework程序集在全局命名空間中都有一些標准類,例如

  • FXAssembly:版本信息。
  • ThisAssembly:裝配信息。
  • AssemblyRef:依賴匯編信息。

這些類包含固定的元數據,否則這些元數據將更加困難或昂貴。 我猜他們選擇在全局命名空間中找到它們,這樣它就是一個標准\\傳統的位置,工具\\實用程序\\等可以獲得它們。 此信息是bootstrapping \\ meta信息,因此邏輯上位於命名空間的概念之上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM