You need to enable JavaScript to run this app. C#不同程序集下Public与Internal访问权限生效规则疑问
优惠活动
大模型
产品
解决方案
定价
更多

C#不同程序集下Public与Internal访问权限生效规则疑问

问题核心原因

C# 的访问修饰符(internal、private、protected 等)属于编译期语法约束,而非运行时的强安全限制,你的代码能正常运行主要基于两个前提:

  • 你通过反射(Assembly.Load + Activator.CreateInstance)创建实例的操作是运行时行为,完全绕过了编译期的访问修饰符检查。默认本地运行的 .NET 应用拥有 FullTrust 信任等级,运行时允许反射创建非公开类型的实例,不需要目标类型声明为 public。
  • 你创建 InternalClass 实例后直接将其转换为项目 B 中声明的公开父类 Execute,后续所有操作都基于 Execute 的公开成员实现,没有直接访问 InternalClass 本身的非公开成员,不会触发额外的访问校验。

补充说明

  • 如果没有给项目 C 添加 [assembly: InternalsVisibleTo("项目B的程序集名称")] 特性,你尝试在项目 B 中直接编写 new InternalClass() 代码时,编译阶段就会直接报错,这就是 internal 修饰符本来的约束作用。
  • 如果你后续尝试通过反射访问 InternalClass 自己声明的非公开方法/属性,同样不需要它声明为 public,只要权限足够就可以访问;只有在低权限运行环境(比如部分沙箱环境)中,反射创建非公开类型的操作才会抛出权限异常。

内容的提问来源于stack exchange,提问作者Josef Širůčka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 21:39:00