受保护的内部方法不允许将内部类作为参数。

8

这段代码无法编译:

internal class Foo {}

public abstract class SomeBaseClass
{
    protected internal void ProcessFoo(Foo value)
    {
        // doing something...
    }
}

编译失败,提示如下错误信息:
参数类型 Foo 的访问权限低于 SomeBaseClass.ProcessFoo 方法的访问权限,导致不一致的访问权限。

9
编译器是正确的:internalprotected internal更不易访问,这意味着是protected或者internal。另一个程序集中的类可以从SomeBaseClass派生并调用ProcessFoo。要么将ProcessFoo的可访问性更改为internal,要么将Foo的可访问性更改为public - Michael Liu
3
这已经足够作为一个答案了,@MichaelLiu - Rob
哦,我明白了,我以为protected internal是加法(protected,internal),而不是替代品(protected/internal)。这很不幸。 - Sellorio
1个回答

4

显然,“protected internal”意味着“protected”或“internal”,而不是像我之前认为的那样是“protected”和“internal”的并集。

感谢Michael Liu提供的信息。


1
我还要补充一点,你可以通过使用private protected修饰符来实现protectedinternal的效果,具体请参考这里(令人困惑的是,它并不意味着“privateprotected”,而是完全不同的意思)。 - undefined
应该当时就选择 private protected internal - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接