由于它的保护级别,抽象类成员无法访问

时间:2016-09-12 04:46:21

标签: c# oop

如何访问abtsract类的受保护成员?假设我的课程定义如下

public abstract class BaseClass
{
    private int index ;

    protected int GetIndex
    {
        get { return index ;}
        set { index = value; }
    }
}

public class MyClass : BaseClass
{
     ...
}

public class TestClass
{
     var data = new MyClass()
     var index = data.GetIndex;
}

该行

var index = data.GetIndex;

抱怨由于它的保护级别无法访问。如何在TestClass中访问MyClass的GetIndex属性?

-Alan -

2 个答案:

答案 0 :(得分:4)

您的问题正是受保护的用途。

保护字段/方法不被用于基类或子类的外部。 TestClass不是从BaseClass或MyClass派生的;你有没有得到 GetIndex 。它是如此简单。

因此,您的选项空间是:

  1. 在BaseClass上替换 protected
  2. 在MyClass中提供其他方法以检索/设置该属性
  3. 将TestClass更改为从BaseClass派生
  4. 该列表中没有特定的顺序;但显然,选项3在这里是“最差”的选择。

答案 1 :(得分:1)

使用此:

public abstract class BaseClass
{
    public int GetIndex { get; private set; }

    public BaseClass() { GetIndex = 0; }
}

然后,您只能在BaseClass中设置 GetIndex (您的可靠索引是私有的)或:

public abstract class BaseClass
{
    private int index;

    public int GetIndex 
    { 
        get { return index; } 
        protected set { index = value; } 
    }
}