C#: уточнение типа поля дочернего класса? Проблема такая: имеется абстрактный класс A, его наследники: A1, A2, A3. Абстрактный класс B, его наследники B1, B2, B3. Класс B имеет поле типа A: public abstract class B { public A field; } Есть ли возможность организовать всё таким образом, чтобы в дочерних классах (B1, B2, B3), это поле имело соответствующий дочерний тип (A1, A2, A3)? Сокрытие с new не подходит, поскольку нужна возможность обращения к ним же через базовый класс (B).
Да, можно решить эту проблему с помощью шаблона-метода. Добавим генерический параметр T в класс B и типовой параметр в поле field:
public abstract class B<T> where T : A { public T field; } public class B1 : B<A1> { } public class B2 : B<A2> { } public class B3 : B<A3> { }
Теперь поля field в дочерних классах B1, B2, B3 будут иметь соответствующий дочерний тип A1, A2, A3, но вы все равно сможете обратиться к ним через базовый класс B, так как параметр T задан в шаблоне.
Да, можно решить эту проблему с помощью шаблона-метода. Добавим генерический параметр T в класс B и типовой параметр в поле field:
public abstract class B<T> where T : A{
public T field;
}
public class B1 : B<A1>
{
}
public class B2 : B<A2>
{
}
public class B3 : B<A3>
{
}
Теперь поля field в дочерних классах B1, B2, B3 будут иметь соответствующий дочерний тип A1, A2, A3, но вы все равно сможете обратиться к ним через базовый класс B, так как параметр T задан в шаблоне.