【发布时间】:2016-12-16 00:40:01
【问题描述】:
为什么只有我在子类中覆盖 people 集合才有项目?这是代码。如果我取消注释被覆盖的方法,那么我的集合中有 2 个人在公园里。
public class Park : Thing
{
}
public abstract class Thing
{
public virtual List<Thing> people { get; } = new List<Thing>();
}
public class PersonA : Thing
{
Thing p;
public string Name { get; set; }
public PersonA(Thing p)
{
this.p = p;
Name = "Marry";
this.p.people.Add(this);
}
//public override List<Thing> people => p.people;
}
public class PersonB : Thing
{
Thing p;
public string Name { get; set; }
public PersonB(Thing p)
{
this.p = p;
Name = "Joe";
this.p.people.Add(this);
}
//public override List<Thing> people => p.people;
}
这是测试应用程序:
Thing park = new Park();
park = new PersonA(park);
park = new PersonB(park);
Console.WriteLine(park.people.Count);
【问题讨论】:
-
使用调试器并单步调试代码,您会发现哪里出错了。你有没有试过..?
-
您的基类有一个新列表
。因此,除非您覆盖它,否则它将为空。尝试调试。 -
在构造函数中,您将添加到成员
p的列表中,而不是类自己的列表中。p.people与this.people不是同一个列表。除非你试图表达一个人有一个的东西,它不应该需要p成员。 -
@Uueerdo 哦,就是这样,有道理。谢谢。