4

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

我还有一个公共抽象类PublicClassBase和两个(也是公共)类PublicClass1PublicClass2,它们继承自PublicClassBase.

具有type的PublicClassBase受保护成员,因此两者都可以使用它。XXXInternalClassBasePublicClass1PublicClass2

这是我的代码:

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' 更难访问,但如何保护比内部更容易访问?

4

2 回答 2

7

想象一下,在声明了示例中的一种类型之外的程序集中您声明PublicClass3了继承自PublicClassBase. 该字段XXX应该是可见的PublicClass3,因为它是受保护的,但该字段的类型是内部的,所以同时,它不应该可见的PublicClass3

显然,您不能同时拥有两者,因此会出现错误。

您可以通过制作您的字段private或制作PublicClassBase及其子项来解决此问题internal

于 2012-08-09T11:32:34.493 回答
3

鉴于您提供给我的程序集,包含上述类,我可以继续PublicClassBase在引用您的程序集的不同程序集中创建一个子类。

在那个类中,我必须实现您的受保护XXX类型成员InternalClassBase- 显然我不能,因为InternalClassBase被标记为internal.

于 2012-08-09T11:35:02.097 回答