2017-10-10 50 views
1

我想我將能夠訪問受保護的名單在父類中,從一個子類,但得到的錯誤C#問題從子類

無法訪問受保護的成員「Liste.listItems acessing保護名單」通過資格賽,如果類型‘清單當然’,限定的類型必須是‘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);

+2

請把它降低到[mcve]。我強烈懷疑這裏90%的代碼是不相關的,但是你沒有完全顯示錯誤在哪裏。 [mcve]會讓你更容易幫助你。 –

+0

請準確填寫相關的錯誤信息。 –

+3

您沒有訪問listRead [j] .listItems中樹形結構中同一實例的成員,而是其他對象的成員。 –

回答

2

你讓現場的保護,所以你沒有訪問設置在新的類實例。我想你需要保護只有二傳手,所以改變這種

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

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

,你不需要從清單當然繼承,如果你不使用既不是「名稱」也不是「時listItems '