Pro*_*gga 23 c# assemblies internal
我正在尝试理解C#中的内部访问修饰符.我似乎无法理解装配是什么,以及我的程序的哪个部分保存在该装配中.我试图使它变得只有以下命名空间中的对象可访问变量:
namespace Engine.Entity
Run Code Online (Sandbox Code Playgroud)
有问题的变量是在该命名空间内的类中定义的,所以我假设如果我将其设置为内部,则只有该命名空间内的对象才能访问它.我看到程序集和名称空间是一体的,我不认为这是正确的.
dth*_*rpe 22
命名空间仅影响名称解析.命名空间不暗示任何类型的存储,命名空间也不确定哪些DLL包含您的代码.命名空间允许您在逻辑名称下将相关事物组合在一起,即使它们可能实际驻留在不同的DLL中.
程序集基本上只是一个DLL或EXE文件.它包含IL代码和类型信息,用于描述该DLL或EXE中的代码.它也可以包含很多其他东西,但对于初学者来说只是把它想象成一个DLL.
通过将代码编译为生成DLL或EXE的项目(csproj),可以将代码放入特定的程序集中.
命名空间可以跨多个程序集.也就是说,作为该逻辑命名空间的成员的类可以驻留在多个DLL中.仅当项目引用包含该类的正确程序集(DLL)时,才能访问源代码中的特定类.
"内部"修改器表示只能在同一个程序集中访问该符号.只有与代码编译到同一DLL中的代码才能访问使用内部标记的属性或方法.
人们很容易被名称空间/汇编事物搞糊涂,因为它解耦了代码在物理上所处位置(程序集)的概念以及引用它的方式(逻辑上引用是通过使用命名空间和物理引用是通过引用程序集).
我通常用这个词来解释contribute
:
程序集可以为多个名称空间做出贡献.
例如,System.Data.dll
程序集有助于命名空间System.Data
(例如类System.Data.DataTable
)和Microsoft.SqlServer.Server
(例如类Microsoft.SqlServer.Server.SqlContext
).
多个程序集可以贡献单个名称空间.
例如,System.Data.dll
程序集和System.Xml.dll
程序集都有助于System.Xml
命名空间.
这意味着如果您使用System.Xml.XmlDataDocument
项目中的类,则需要引用System.Data.dll
程序集.
如果您使用System.Xml.XmlDocument
该类,则需要System.Xml.dll
从项目中引用该类.
(上面的示例是.NET 4.0,但也可能适用于以前的.NET版本).
Danny Thorpe 解释了这个概念namespace
并且internal
非常好,所以我不会详细介绍这些概念.
--jeroen