4

内部抽象クラスと、から継承するInternalClassBase2つの(内部)クラスInternalClass1とがあります。InternalClass2InternalClassBase

また、パブリック抽象クラスと、から継承するPublicClassBase2つの(パブリック)クラスPublicClass1とがあります。PublicClass2PublicClassBase

はタイプ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と思いました。XXXPublicClassBasePublicClass1PublicClass2

また、アクセス修飾子については理解していると思いましたが、明らかに理解していません:)

編集-エラーはPublicClassBase内のXXXの宣言で発生し、例外メッセージは次のとおりです。一貫性のないアクセシビリティ:フィールドタイプ'ClassLibrary2.InternalClassBase'はフィールド'ClassLibrary2.PublicClassBase.XXX'よりもアクセスしにくいですが、保護する方法は内部よりもアクセスしやすいです?

4

2 に答える 2

7

あなたの例からの型が宣言されている以外のアセンブリで、から継承するクラスを宣言すると想像してPublicClass3くださいPublicClassBase。このフィールドは保護されているため からXXX見えるはずですPublicClass3が、フィールドのタイプは内部的なものであるため、同時にから見えるべきではありませんPublicClass3

明らかに、両方を持つことはできないため、エラーが発生します。

フィールドを作成するか、フィールドとその子privateを作成することで、これを解決できます。PublicClassBaseinternal

于 2012-08-09T11:32:34.493 に答える
3

上記のクラスを含む、あなたから提供されたアセンブリがあれば、先に進んで、PublicClassBaseあなたのアセンブリを参照する別のアセンブリに のサブクラスを作成できます。

XXXそのクラスでは、タイプの保護されたメンバーを実装する必要がありますInternalClassBase-明らかにできません。InternalClassBaseとしてマークされているためですinternal

于 2012-08-09T11:35:02.097 に答える