[英]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.