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).

21 Авг 2019 в 07:03
245 +1
1
Ответы
1

Да, можно решить эту проблему с помощью шаблона-метода. Добавим генерический параметр 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 задан в шаблоне.

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир