Как быть если при перегрузке нужно изменить тип свойства в производном классе? - C#
Формулировка задачи:
Здравствуйте, предположим, есть обычный мяч и коробка для него, потом появился специфичный мяч для работы с которым нужно расширить обычную коробку.
Я знаю , что c# не поддерживает вариативность, но как тогда решить подобную задачу и сохранить типобезапосность?
Листинг программы
- class Ball
- {
- }
- class SpecificBall : Ball
- {
- }
- class BallBox
- {
- public virtual Ball Ball { get; set; }
- public virtual void Update()
- {
- ... логика для обычного мяча
- }
- ...
- }
- class SpecificBallBox : BallBox
- {
- public override SpecificBall Ball { get; set; } /// ???
- public virtual void Update()
- {
- ... логика для специфичного мяча
- }
- ...
- }
Решение задачи: «Как быть если при перегрузке нужно изменить тип свойства в производном классе?»
textual
Листинг программы
- class Ball
- { ... }
- class SpecificBall : Ball
- { ... }
- class BallContainer<TBall> where TBall : Ball
- {
- public TBall Ball { get; set; }
- public virtual void Update() {}
- }
- class SimpleBallBox : BallContainer<Ball>
- {
- ... // работаем с обычным мячом - реализация по-умолчанию
- }
- class SpecificBallBox : BallContainer<SpecificBall>
- {
- public override void Update()
- {
- // определяем специфическую реализацию
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д