1

protected私は、メンバーがクラス内および派生クラス内でのみアクセスできるインターネットや本を読んだことがあります。次のコードを試しています

  class Program
{
    static void Main(string[] args)
    {

    }
}
abstract class A
{
    protected int n_IntA = 0;
    public abstract void AMethod();
}
abstract class B : A
{
    int nb;
    public B()
    {

    }
    public abstract void GetProtected();      
    public override void AMethod()
    {

    }
}
class C : B
{
    public override void GetProtected()
    {
        // Here n_IntA is accessible why ??
    }
}

しかし、ここではクラス cn_IntAにアクセスできます。なんで?Aisの派生クラスB.So のアクセシビリティはn_IntAクラス B まででなければなりません ??

4

2 に答える 2

2

保護されたメンバーは、階層のレベルに関係なく、派生クラスから常にアクセスできます。ここで問題n_IntA にアクセスできるため、

C は A から継承する B から継承します

また、クラス B の指定子を変更しなかったため、B で保護されたままになり、C でも同じことが起こります

于 2013-08-05T11:49:37.000 に答える
2

アクセシビリティはすべての継承ツリーを通過します。

-operatorを使用するなど、メンバーを明示的に非表示にしない場合はnew、継承ツリーのはるか下にあるこれらのメンバーにアクセスできます。
MSDN を見て、特に WinForms と WPF クラスで継承がどのように行われているかを確認してください。System.Objectフレームワーク全体で定義されたメンバーにアクセスできないと、壊れてしまいます...

MSDNから:

アクセス修飾子 public、protected、internal、または private を使用して、メンバーに対して次の宣言されたアクセシビリティ レベルのいずれかを指定します。

...
保護 | アクセスは、含まれているクラスまたは含まれているクラスから派生した型に制限されます。

于 2013-08-05T11:46:30.543 に答える