C# 程序集,程序集中有什么?

标签 c# assemblies internal

我正在尝试了解 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/

相关文章:

c# - 如何从表中选择所有 SQL 行(具有两列的唯一组合),其中相同的组合不在另一个表中

c# - 如何将值从一个 View 传递到另一个 View

c# - Ninject - 绑定(bind)通用类型与约束

c# - 绑定(bind)重定向在测试项目中不起作用

c# - 适用于 C# 的 Google Protobuf 3.0.0 程序集

c# - 测量包裹的字符串

.NET 程序集差异/比较工具 - 有什么可用的?

java - Springs @RequestParam 注解的内部工作

c# - 访问密封类 C# 中的内部方法

apache-spark - Spark 核心和任务并发