2

コンパイラが次のエラーを出す理由を誰か説明できますか?

 namespace Sandbox
{
    internal class DataObj { }

    public class A
    {
        protected DataObj _data;
    }
}

ここにコンパイラエラーがあります。

一貫性のないアクセシビリティ: フィールド タイプ 'Sandbox.DataObj' は、フィールド 'Sandbox.A._data' よりもアクセスしにくいです。

このエラーが予想されるのは、別のアセンブリで A から派生した場合のみです。考え?

4

1 に答える 1

6

問題は、別のアセンブリから派生できることです。Aこのようなクラスは、プロパティの戻り値の型にアクセスできません。
したがって、宣言自体が違法です。

つまり、このエラーは消費側ではなく、宣言側で発生します。

ここに根底にある哲学は、時には使用できないものを作成することは不可能であるべきだということです。

この哲学にはいくつかの例外があることに注意してください。状況によっては、使用または継承が不可能なジェネリックを使用して悪巧みを行うことができます。
これらのエラーを宣言側に移動すると制限が厳しすぎるため、これは許可されています。

于 2012-08-02T15:43:28.590 に答える