0

これは、「保護された」メンバー アクセス修飾子を説明する部分からの MSDN の例です。私の質問は、例 II のようにこのプログラムを変更すると、なぜコンパイル エラーが発生するのかということです。

例 I

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        b.x = 10;
    }
}

例 II

class A
{
    protected int x = 123;
}

//MODIFICATION IN BELOW 2 LINES
class B : A{}
class program
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        b.x = 10;
    }
}

例 II のコンパイラ エラー:

d:\MyProgs>csc _13protected.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

_13protected.cs(14,15): error CS0122: 'A.x' is inaccessible due to its
        protection level
_13protected.cs(3,23): (Location of symbol related to previous error)

d:\MyProgs>
4

3 に答える 3

3

アクセス修飾子の定義を読むと、答えが得られます。

public:型またはメンバーは、同じアセンブリまたはそれを参照する別のアセンブリ内の他のコードからアクセスできます。

private:型またはメンバーは、同じクラスまたは構造体のコードによってのみアクセスできます。

protected:型またはメンバーは、同じクラスまたは構造体、またはそのクラスから派生したクラス内のコードによってのみアクセスできます。

internal:型またはメンバーは、同じアセンブリ内の任意のコードからアクセスできますが、別のアセンブリからはアクセスできません。

于 2014-06-25T08:04:29.680 に答える
0

保護されたフィールドへのアクセスが発生する実際のクラスに注意を払う必要があります。

2 番目の例では、プログラム クラスが A から継承されないため、「保護」修飾子によって許可されていないプログラム クラスから bX にアクセスしようとしています。

一方、最初の例では、bX への実際のアクセスは A から継承した B クラスで発生したため、"protected" 修飾子によってアクセスが許可されます。

于 2014-06-25T08:08:04.093 に答える