Доопределить класс - C#

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

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

Добрый день! Решаю учебную задачу и не понимаю как можно добавить поле в класс, не изменяя сам класс. Есть геометрическая сущность Segment, которая эквивалентна отрезку. И надо доопределить поле segmentColor в класс Segment. Я попробовал разобраться в паттерне Декоратор, но видимо не очень получилось. В общем надо дописать файл SegmentExtensions.cs. Внизу полностью проект, подскажите, что в моем коде не так. Пытался также бегать отладчиком, так и не понял, почему не записывается в список нужный объект с добавленным полем. Заранее всем спасибо.
Листинг программы
  1. using System.Drawing;
  2. using GeometryTasks;
  3. namespace GeometryPainting
  4. {
  5. abstract class SegmentDecorator : Segment
  6. {
  7. protected Segment segment;
  8. public void SetComponent(Segment segment)
  9. {
  10. this.segment = segment;
  11. }
  12. }
  13. class SegmentColor: SegmentDecorator
  14. {
  15. public Color segmentColor;
  16. public SegmentColor(Color segmentColor)
  17. {
  18. this.segmentColor = segmentColor;
  19. }
  20. }
  21. public static class SegmentExtension
  22. {
  23. public static void SetColor(this Segment segm, Color color)
  24. {
  25. Segment a = new SegmentColor(color);
  26. segm = a;
  27. }
  28. public static Color GetColor(this Segment segm)
  29. {
  30. return Color.FromArgb(1, 1, 1);
  31. }
  32. }
  33. }

Решение задачи: «Доопределить класс»

textual
Листинг программы
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             var segment = new Segment();
  6.             segment.SetColor("#FF0000");
  7.             var color = segment.GetColor();
  8.             Console.WriteLine($"color: {color}"); // color: #FF0000
  9.             Console.ReadLine();
  10.         }
  11.     }
  12.  
  13.     public class Segment
  14.     {
  15.        
  16.     }
  17.  
  18.     public static class SegmentExtensions
  19.     {
  20.         private static readonly Dictionary<Segment, string> SegmentColors = new Dictionary<Segment, string>();
  21.  
  22.         public static void SetColor(this Segment segment, string color)
  23.         {
  24.             SegmentColors[segment] = color;
  25.         }
  26.  
  27.         public static string GetColor(this Segment segment)
  28.         {
  29.             SegmentColors.TryGetValue(segment, out string color);
  30.             return color;
  31.         }
  32.     }

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


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

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

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

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

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

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