4
 namespace PalleTech
 {          
     public class Parent
        {
            private int test = 123;
            public virtual int TestProperty
            {
                // Notice the accessor accessibility level.
                 set {
                    test = value;
                }

                // No access modifier is used here.
               protected get { return test; }
            }
        }
        public class Kid : Parent
        {
            private int test1 = 123;
            public override int TestProperty
            {
                // Use the same accessibility level as in the overridden accessor.
                 set { test1 = value / 123; }

                // Cannot use access modifier here.
               protected get { return 0; }
            }
        }
        public class Demo:Kid
        {
            public static void Main()
            {
                Kid k = new Kid();
                Console.Write(k.TestProperty);

            }
        }
    }

エラー 1 タイプ 'PalleTech.Kid' の修飾子を介して保護されたメンバー 'PalleTech.Parent.TestProperty' にアクセスできません。修飾子は 'PalleTech.Demo' 型 (またはそれから派生したもの) でなければなりません

4

3 に答える 3

3

MSDN の記事から 「基本クラスの保護されたメンバーは、派生クラスの型を介してアクセスが発生した場合にのみ、派生クラスでアクセスできます。」

ここでは、Kid の保護されたセッターにそのインスタンスでアクセスしています。Demo クラスのインスタンスを作成し、それを介してアクセスする必要があります。

于 2013-01-24T11:58:36.150 に答える
1

TestPropertyクラス内のゲッターKidは保護されています。つまり、クラスから派生したKidクラスを作成すると、アクセスできますTestProperty。クラスのインスタンスを作成すると、Kidアクセスできなくなります。

protected両方のクラスのセッターから削除することで動作を変更できます。

public class Parent
{
    private int test = 123;
    public virtual int TestProperty
    {
        // Notice the accessor accessibility level.
        set
        {
            test = value;
        }

        // No access modifier is used here.
        get { return test; }
    }
}
public class Kid : Parent
{
    private int test1 = 123;
    public override int TestProperty
    {
        // Use the same accessibility level as in the overridden accessor.
        set { test1 = value / 123; }

        // Cannot use access modifier here.
        get { return 0; }
    }
}
于 2013-01-24T11:57:14.667 に答える
0

アセッサーも保護に設定する必要があります。ゲッター/セッターは、プロパティ自体よりも制限の少ないアクセス修飾子を持つことはできません。

于 2013-01-24T11:56:39.053 に答える