我正在尝试了解 C# 中的内部访问修饰符。我似乎无法理解程序集究竟是什么,以及我的程序的哪一部分包含在该程序集中。我试图使变量只能由以下命名空间中的对象访问:
namespace Engine.Entity
有问题的变量是在该命名空间内的一个类中定义的,所以我假设如果我将它设为内部变量,则只有该命名空间内的对象才能访问它。我将程序集和 namespace 视为一体,但我认为这是不对的。
最佳答案
命名空间只影响名称解析。命名空间并不意味着任何类型的存储,命名空间也不决定哪些 DLL 包含您的代码。命名空间允许您将相关事物组合在一个逻辑名称下,即使它们在物理上可能驻留在不同的 DLL 中。
程序集基本上只是一个 DLL 或 EXE 文件。它包含 IL 代码和描述该 DLL 或 EXE 中代码的类型信息。它也可以包含很多其他内容,但对于初学者来说,只需将其视为一个 DLL。
通过将代码编译到生成 DLL 或 EXE 的项目 (csproj) 中,将代码放入特定程序集中。
命名空间可以跨越多个程序集。也就是说,作为该逻辑命名空间成员的类可能驻留在多个 DLL 中。仅当您的项目引用包含该类的正确程序集 (DLL) 时,您才能访问源代码中的特定类。
Internal 修饰符意味着只能从同一程序集中访问该符号。只有编译到与您的代码相同的 DLL 中的代码才能访问带有内部标记的属性或方法。
关于C# 程序集,程序集中有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4447028/