sve*_*vit 3 c# protected public access-modifiers internal
我有一个内部抽象类InternalClassBase和两个(也内部)类InternalClass1和InternalClass2,它从继承InternalClassBase.
我也有一个公共抽象类PublicClassBase和两个(也公开)班PublicClass1和PublicClass2,从继承PublicClassBase.
该PublicClassBase有一个受保护的成员XXX类型InternalClassBase,这样既PublicClass1和PublicClass2可以使用它.
这是我的代码:
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'更不易访问,但是如何保护更容易访问内部?
试想一下,在装配其他不是从你的例子中,一个类型的声明,声明类PublicClass3,从继承PublicClassBase.本场XXX应该从可见的PublicClass3,因为它是受保护的,但该字段的类型是内部的,所以在同一时间,应该不是从可见PublicClass3.
显然,你不能兼得,因此错误.
你可以通过制作你的田地private,或制作PublicClassBase和它的孩子来解决这个问题internal.