Как быть если при перегрузке нужно изменить тип свойства в производном классе? - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, предположим, есть обычный мяч и коробка для него, потом появился специфичный мяч для работы с которым нужно расширить обычную коробку.
Листинг программы
  1. class Ball
  2. {
  3. }
  4. class SpecificBall : Ball
  5. {
  6. }
  7. class BallBox
  8. {
  9. public virtual Ball Ball { get; set; }
  10. public virtual void Update()
  11. {
  12. ... логика для обычного мяча
  13. }
  14. ...
  15. }
  16. class SpecificBallBox : BallBox
  17. {
  18. public override SpecificBall Ball { get; set; } /// ???
  19. public virtual void Update()
  20. {
  21. ... логика для специфичного мяча
  22. }
  23. ...
  24. }
Я знаю , что c# не поддерживает вариативность, но как тогда решить подобную задачу и сохранить типобезапосность?

Решение задачи: «Как быть если при перегрузке нужно изменить тип свойства в производном классе?»

textual
Листинг программы
  1. class Ball
  2. { ... }
  3.  
  4. class SpecificBall : Ball
  5. { ... }
  6.  
  7. class BallContainer<TBall> where TBall : Ball
  8. {
  9.      public TBall Ball { get; set; }
  10.      public virtual void Update() {}
  11. }
  12.  
  13. class SimpleBallBox : BallContainer<Ball>
  14. {
  15.      ... // работаем с обычным мячом - реализация по-умолчанию
  16. }
  17.  
  18. class SpecificBallBox : BallContainer<SpecificBall>
  19. {
  20.      public override void Update()
  21.      {
  22.            // определяем специфическую реализацию
  23.      }
  24. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы