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 шт):
А вообще возможно менять родительский класс из дочернего? Сколько сам программирую,такой способ никогда не работал, уверен что именно так должно быть?
Нет. Так, как реализовано коде, приведенном в вопросе, не получится.
Я не знаю целей, для которых необходимо сделать подобное хранение, но рассматривая сферического коня в вакууме, могу предложить следующее решение:
Класс А остается без изменений, у него реализован нужный интерфейс.
В классе В добавляется свойство
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();
} }
}