2017-10-10 4 views
1

Je pensais que je serais en mesure d'accéder à une liste protégée dans une classe parente, d'une classe d'enfants, mais je reçois l'erreurC# Problèmes acessing Liste protégés de la classe des enfants

Impossible d'accéder membre protégé « Liste.listItems » par un qualificatif si le type « Liste », le qualificatif doit être de type « ListReader »

Toute idée comment surmonter ce tout en maintenant le niveau de protection des List<Object> listItems protégées (de sorte que aucune autre classe, mais le hérité on peut accéder à cette liste)?

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

(plus de code)

Le problème est à listsRead[j].listItems.Add(item);

+2

Veuillez réduire ceci à un [mcve]. Je soupçonne fortement que 90% du code ici n'est pas pertinent, mais vous n'avez pas montré exactement * où * l'erreur est. Un [mcve] rendra beaucoup plus facile de vous aider. –

+0

exactement s'il vous plaît poster les détails d'erreur pertinentes. –

+3

Vous n'accédez pas à un membre de la même instance mais à un membre d'un autre objet dans votre structure arborescente dans listsRead [j] .listItems. –

Répondre

2

champ de protection que vous avez fait, vous avez pas accès défini dans la nouvelle instance de classe. Je suppose que vous devez protéger uniquement setter, donc changer cette

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

dans

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

et vous n'avez pas besoin d'hériter de Liste si vous ne l'utilisez ni « nom » ni « listItems '