簡體   English   中英

命名空間是程序集還是項目?

[英]Is a namespace an assembly, or a project?

只是回顧一些.NET的東西明天面試,

MSDN定義Internal關鍵字如下:

內部類型或成員只能在同一程序集中的文件中訪問

但我似乎無法找到的是裝配的定義。 這是同一個命名空間,同一個項目或......中的所有內容嗎?

在程序集內部,您可能已經定義了多個名稱空間。 程序集是.NET中最小的部署單元。 它是您的IL代碼和有關代碼的元數據的集合。 它包含一個名為Manifest的文件,其中聲明了程序集中使用的所有類型或引用的所有類型。 還有一些其他文件。

正如在MSDN中更正式地說明的那樣:

程序集是.NET Framework應用程序的構建塊; 它們構成了部署,版本控制,重用,激活范圍和安全權限的基本單元。 程序集是一組類型和資源的集合,這些類型和資源構建為一起工作並形成邏輯功能單元。 程序集為公共語言運行庫提供了識別類型實現所需的信息。 對於運行時,在程序集的上下文之外不存在類型。

另一方面,對於namespace我們有

namespace關鍵字用於聲明包含一組相關對象的范圍。 您可以使用命名空間來組織代碼元素並創建全局唯一類型。

正如MSDN中所述

從上面可以清楚地看到,您可以在程序集中聲明所需的名稱空間。

IL Disassembler是一個很好的免費工具,可用於查看程序集中的內容。

程序集是一個已編譯為.DLL或.EXE的項目。 出於Visual Studio的目的,任何類庫項目,Windows窗體應用程序或WPF應用程序都將編譯為程序集。

程序集是物理容器文件(DLL或EXE)。

雖然有些不尋常,但命名空間可以跨越多個程序集

內部類不一定對同一命名空間中的所有類可見,因為命名空間可以跨越多個程序集。 程序集是編譯文件(DLL或EXE)。

通常它意味着在同一個項目中,但有一些方法可以將多個項目的輸出組合成一個程序集(通過ILMERGE)。

程序集和命名空間是正交的。 一個程序集可能包含多個名稱空間,單個名稱空間可能跨多個程序集。 程序集是.NET框架中最小的可獨立版本化的代碼單元。 程序集定義代碼的物理組織(到dll或exe文件),而名稱空間定義邏輯組織。 單個程序集是單個dll或exe文件。 命名空間是通常基於技術或功能的邏輯分組。 System.Net處理網絡。 System.Text處理文本操作和編碼。

請注意,我根本沒有提到過項目。 項目只與特定的構建系統真正相關。 .NET運行時本身並不了解項目。 由於大多數人使用Visual Studio和MSBuild工具進行開發,並且默認是將單個項目輸出為單個程序集,因此人們傾向於在臨時對話中交替使用術語項目和程序集。 MonoDevelop等其他工具遵循類似的模式,但沒有規則規定單個項目必須生成單個程序集。

在.NET世界中,Assembly是一個編譯代碼包。 它可以是可執行文件( .exe文件),也可以是共享庫( .dll文件),並且可以包含多個名稱空間。

暫無
暫無

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

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