C# 从子 class 访问受保护列表时出现问题
C# Problems acessing protected List from child class
我原以为我可以从子 class 访问父 class 中的受保护列表,但出现错误
Cannot access protected member “Liste.listItems” via a qualifier if type ‘Liste’, the qualifier must be of type ‘ListReader’
知道如何克服这个问题,同时仍然保持受保护 List<Object> listItems
的保护级别(这样除了继承的 class 之外没有其他 classes 可以访问此列表)吗?
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);
您已将字段设置为受保护,因此您无权在新的 class 实例中对其进行设置。我猜你只需要保护setter,所以改变这个
protected List<Object> listItems = new List<Object>();
进入
public List<Object> listItems { get; protected set; } = new List<Object>();
如果您既不使用 'name' 也不使用 'listItems'
,则无需继承 Liste
我原以为我可以从子 class 访问父 class 中的受保护列表,但出现错误
Cannot access protected member “Liste.listItems” via a qualifier if type ‘Liste’, the qualifier must be of type ‘ListReader’
知道如何克服这个问题,同时仍然保持受保护 List<Object> listItems
的保护级别(这样除了继承的 class 之外没有其他 classes 可以访问此列表)吗?
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);
您已将字段设置为受保护,因此您无权在新的 class 实例中对其进行设置。我猜你只需要保护setter,所以改变这个
protected List<Object> listItems = new List<Object>();
进入
public List<Object> listItems { get; protected set; } = new List<Object>();
如果您既不使用 'name' 也不使用 'listItems'
,则无需继承 Liste