我有一个内部抽象类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 { }
为什么我的示例中不能PublicClassBase
包含XXX
成员?我认为XXX
仅在PublicClassBase
,PublicClass1
和PublicClass2
中可见,但不在其中。{/ p>
我还认为我理解访问修饰符,但显然我没有:)
编辑 - 在PublicClassBase中声明XXX时发生错误,并且异常消息是:不一致的可访问性:字段类型'ClassLibrary2.InternalClassBase'比字段'ClassLibrary2.PublicClassBase.XXX'更难访问,但是如何保护更多可以访问内部吗?
答案 0 :(得分:5)
想象一下,在一个程序集 other 而不是声明示例中的一个类型中,您声明继承自PublicClass3
的类PublicClassBase
。字段XXX
应该在PublicClass3
中可见,因为它受到保护,但字段的类型是内部的,因此同时,不可以从PublicClass3
。
显然,你不能同时拥有这两个错误。
您可以通过制作字段private
或制作PublicClassBase
及其子internal
来解决此问题。
答案 1 :(得分:2)
鉴于你提供给我的汇编,包含上面的类,我可以继续在不同的汇编中创建PublicClassBase
的子类,引用你的。
在该课程中,我必须实施XXX
类型的受保护成员InternalClassBase
- 显然我不能,因为InternalClassBase
被标记为internal
。< / p>