C# список другого типа при наследовании класса

Всем привет. Возник такой вопрос при наследовании классов. Есть 2 класса: A, B. Класс B наследует класс A. У обоих классов есть свойство-список Children. Вопрос: как в классе B переопределить свойство Children, чтобы в него можно было складывать объекты другого типа (например, типа B)?

public class A
{
    public int Id { get; set; }
    public List<A> Children { get; set; }
    public A()
    {
        Children = new List<A>();
    }
}

public class B : A
{
    public B()
    {
        //Вот тут ошибка у B
        Children = new List<B>();
    }
}

Ответы (2 шт):

Автор решения: Drimgo

А вообще возможно менять родительский класс из дочернего? Сколько сам программирую,такой способ никогда не работал, уверен что именно так должно быть?

→ Ссылка
Автор решения: Андрей Туманов

Нет. Так, как реализовано коде, приведенном в вопросе, не получится.

Я не знаю целей, для которых необходимо сделать подобное хранение, но рассматривая сферического коня в вакууме, могу предложить следующее решение:

Класс А остается без изменений, у него реализован нужный интерфейс.

В классе В добавляется свойство

    public List<B> Children_B { get
        { 
            return Children.Select(a => a as B).ToList();
        } }

Но за типом добавляемых в лист объектов нужно будет отдельно следить в программе. Пример программы для теста:

class Program
{
    static void Main(string[] args)
    {
        A aParent = new A();
        for (int i=0; i<=4; i++)
        {
            aParent.Children.Add(new A{Id = i});
        }
        foreach (A a in aParent.Children)
        {
            Console.WriteLine(a.Id.ToString());
        }
        Console.WriteLine("________ B");
        B bParent = new B();
        for (int i=10; i<=14; i++)
        { 
            bParent.Children.Add(new B{Id = i});
        }
        foreach (B b in bParent.Children_B)
        {
            Console.WriteLine(b.Id.ToString());
        }
        Console.ReadKey();
    }
}

public class A
{
    public int Id { get; set; }
    public List<A> Children { get; set; }
    public A()
    {
        Children = new List<A>();
    }
}

public class B : A
{
    public List<B> Children_B { get
        { 
            return Children.Select(a => a as B).ToList();
        } }
}
→ Ссылка