C# 与抽象类不一致的可访问性
我有一个内部抽象类C# 与抽象类不一致的可访问性,c#,public,internal,protected,access-modifiers,C#,Public,Internal,Protected,Access Modifiers,我有一个内部抽象类InternalClassBase和两个(也是内部)类InternalClass1和InternalClass2,它们继承自InternalClassBase 我还有一个公共抽象类PublicClassBase和两个(也是公共的)类PublicClass1和PublicClass2,它们继承自PublicClassBase PublicClassBase有一个类型为InternalClassBase的受保护成员XXX,因此PublicClass1和PublicClass2都可以
InternalClassBase
和两个(也是内部)类InternalClass1
和InternalClass2
,它们继承自InternalClassBase
我还有一个公共抽象类PublicClassBase
和两个(也是公共的)类PublicClass1
和PublicClass2
,它们继承自PublicClassBase
PublicClassBase
有一个类型为InternalClassBase
的受保护成员XXX
,因此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
内可见,但不能在它之外
我还认为我了解访问修饰符,但显然我不了解:)
编辑-错误发生在PublicClassBase内的XXX声明处,异常消息是:可访问性不一致:字段类型“ClassLibrary2.InternalClassBase”的可访问性低于字段“ClassLibrary2.PublicClassBase.XXX”,但是,如何才能使protected比internal更易于访问呢?想象一下,在一个程序集中,您声明的不是您示例中声明的类型,而是继承自
PublicClassBase
的类PublicClass3
。字段XXX
应该在PublicClass3
中可见,因为它是受保护的,但字段的类型是内部的,因此同时,它不应该在PublicClass3
中可见
显然,您不能同时拥有这两个,因此会出现错误
您可以通过将字段
设置为private
,或将PublicClassBase
及其子项设置为internal
来解决此问题。如果您向我提供了一个包含上述类的程序集,我可以继续在引用您的程序集的不同程序集中创建PublicClassBase
的子类
在该类中,我必须实现
InternalClassBase
类型的受保护成员XXX
——显然我不能,因为InternalClassBase
标记为internal
解决方法是将成员从受保护的更改为internal
。