2017-10-10 2 views
1

Ich dachte, ich in der Lage wäre, eine geschützte Liste in einer übergeordneten Klasse zugreifen, von einem Kind-Klasse, aber bekommen den FehlerC# Probleme acessing Liste von Kindklasse geschützt

können nicht geschützt Mitglied zugreifen „Liste.listItems “über einen Qualifier, wenn der Typ‚Liste‘, muss das Qualifikationsspiel vom Typ sein‚ListReader‘

Jede Idee, wie diese während überwinden noch die Schutzstufe der geschützten List<Object> listItems beibehalten (so dass keine anderen Klassen, sondern die geerbte kann man auf diese Liste zugreifen)?

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); 
        } 
       }      
      } 

(mehr Code)

Das Problem ist bei listsRead[j].listItems.Add(item);

+2

Bitte reduzieren Sie dies auf ein [MCVE]. Ich vermute stark, dass 90% des Codes hier irrelevant sind, aber Sie haben nicht genau gezeigt, wo * der Fehler liegt. A [mcve] wird es viel einfacher machen, Ihnen zu helfen. –

+0

genau bitte die relevanten Fehlerdetails bekannt geben. –

+3

Sie greifen nicht auf ein Mitglied derselben Instanz, sondern auf ein Mitglied eines anderen Objekts in Ihrer Baumstruktur in listsRead [j] .listItems zu. –

Antwort

2

Sie gemacht Feld geschützt, so dass Sie keinen Zugang haben es in der neuen Klasse-Instanz festgelegt. Ich denke, man nur Setter schützen müssen, so dass diese

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

in

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

ändern und Sie müssen nicht von Liste erben, wenn Sie nicht weder ‚name‘ verwenden noch ‚listitems '

Verwandte Themen