You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨程序集重写protected internal方法出现CS0507错误的原因咨询

跨程序集重写protected internal方法触发CS0507错误的原因解析

要搞清楚这个问题,核心是理解C#中protected internal修饰符的实际语义——它不是“protected 且 internal”,而是“protected 或 internal”,具体权限范围分两种场景:

  • 同程序集内:该成员对当前程序集的所有代码可见(等同于internal),同时对派生类保持protected权限
  • 跨程序集:该成员仅对派生类内部可见(等同于protected),internal的权限范围无法覆盖其他程序集

同程序集重写无问题的原因

在同一个程序集内,派生类看到的test11()是protected internal权限,重写时使用相同的修饰符,权限范围和原方法匹配,编译器不会报错。

跨程序集重写触发CS0507的原因

当在程序集B中继承程序集A的Person类时:

  1. 程序集B无法识别test11()的internal权限部分,只能看到protected权限(因为internal仅对定义它的程序集A生效)
  2. 如果你在程序集B的uno类中用protected internal重写test11(),相当于试图给重写方法添加原方法在当前上下文没有的internal权限——这违反了C#的重写规则:重写方法的访问权限不能比原方法更宽松(或超出原方法在当前上下文中的可见权限)
  3. 当你把重写的修饰符改为protected时,权限范围和原方法在程序集B中的可见权限完全匹配,因此错误消失。

内容的提问来源于stack exchange,提问作者Eric Movsessian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:25:21