C#从子类中获取受保护List的问题

时间:2017-10-10 07:25:06

标签: c# inheritance protected

我以为我可以从子类访问父类中的受保护列表,但是会收到错误

  

如果类型为“Liste”,则无法通过限定符访问受保护成员“Liste.listItems”,限定符必须是“ListReader”类型

知道如何在保持受保护List<Object> listItems的保护级别的同时克服这个问题(除了继承的类之外没有其他类可以访问此列表)?

 public class Liste
{
    public string name;
    protected List<Object> listItems = new List<Object>(); //TO DO: add protection
}

class ListReader : Liste
{

    public List<Liste> listsRead = new List<Liste>();

    public List<Liste> ReadLists(TestCaseWorkbook tcwb, string tab)
    {
        try
        {
            int lineID = 0;
            foreach (DataRow row in tcwb.Tables[tab].Rows)
            {
                if (lineID == 0)//first line
                {
                    foreach (DataColumn cell in tcwb.Tables[tab].Columns)
                    {
                        Liste liste = new Liste();
                        liste.name = ExcelWorkbook.CleanTitleToInternal(cell.ColumnName);
                        if(liste.name != "")
                        {
                            listsRead.Add(liste);
                        }                                                   
                    }
                    lineID++;
                }                 
                for (int j = 0; j < row.ItemArray.Length; j++)//rest of sheet
                {
                    Object item = row[j];
                    if(item.ToString() != "")
                    {
                        listsRead[j].listItems.Add(item);
                    }
                }                    
            }

(更多代码)

问题出在listsRead[j].listItems.Add(item);

1 个答案:

答案 0 :(得分:2)

您对字段进行了保护,因此您无权在新的类实例中进行设置。我想你只需要保护setter,所以改变这个

protected List<Object> listItems = new List<Object>();

public List<Object> listItems { get; protected set; } = new List<Object>();

如果你既不使用'name'也不使用'listItems',你不需要从Liste继承

相关问题