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类中的getterKid是受保护的,这意味着如果您编写一个派生自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

您也必须将评估器设置为受保护。getter/setter 不能具有比属性本身更少限制的访问修饰符。

于 2013-01-24T11:56:39.053 回答