C #: ¿por qué obtengo una colección vacía?

¿Cómo es que la colección de personas tiene elementos solo si la anulo dentro de las subclases? Aquí está el código. Si descomento los métodos anulados, entonces mi colección tiene 2 personas en el parque.

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

Y aquí está la aplicación de prueba:

Thing park = new Park();
park = new PersonA(park);
park = new PersonB(park);

Console.WriteLine(park.people.Count);

Respuestas a la pregunta(1)

Su respuesta a la pregunta