与抽象类不可访问的可访问性

sve*_*vit 3 c# protected public access-modifiers internal

我有一个内部抽象类InternalClassBase和两个(也内部)类InternalClass1InternalClass2,它从继承InternalClassBase.

我也有一个公共抽象类PublicClassBase和两个(也公开)班PublicClass1PublicClass2,从继承PublicClassBase.

PublicClassBase有一个受保护的成员XXX类型InternalClassBase,这样既PublicClass1PublicClass2可以使用它.

这是我的代码:

internal abstract class InternalClassBase { }
internal class InternalClass1 : InternalClassBase { }
internal class InternalClass2 : InternalClassBase { }

public abstract class PublicClassBase
{
    protected InternalClassBase XXX;  // this is where the error happens
}
public class PublicClass1 : PublicClassBase { }
public class PublicClass2 : PublicClassBase { }
Run Code Online (Sandbox Code Playgroud)

为什么不能在我的例子中PublicClassBase包含XXX成员?我认为XXX只会是中可见PublicClassBase,PublicClass1并且PublicClass2,而不是在它之外.

我还以为我理解访问修饰符,但显然我不:)

编辑 - 错误发生在PublicClassBase中的XXX声明中,并且异常消息是:不一致的可访问性:字段类型'ClassLibrary2.InternalClassBase'比字段'ClassLibrary2.PublicClassBase.XXX'更不易访问,但是如何保护更容易访问内部?

Nik*_*sev 5

试想一下,在装配其他不是从你的例子中,一个类型的声明,声明类PublicClass3,从继承PublicClassBase.本场XXX应该从可见的PublicClass3,因为它是受保护的,但该字段的类型是内部的,所以在同一时间,应该不是从可见PublicClass3.

显然,你不能兼得,因此错误.

你可以通过制作你的田地private,或制作PublicClassBase和它的孩子来解决这个问题internal.

  • 解决方法是将成员从“受保护”更改为“内部”。 (2认同)