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

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

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

Добрый день! Решаю учебную задачу и не понимаю как можно добавить поле в класс, не изменяя сам класс. Есть геометрическая сущность Segment, которая эквивалентна отрезку. И надо доопределить поле segmentColor в класс Segment. Я попробовал разобраться в паттерне Декоратор, но видимо не очень получилось. В общем надо дописать файл SegmentExtensions.cs. Внизу полностью проект, подскажите, что в моем коде не так. Пытался также бегать отладчиком, так и не понял, почему не записывается в список нужный объект с добавленным полем. Заранее всем спасибо.
using System.Drawing;
using GeometryTasks;
 
namespace GeometryPainting
{   
 
    abstract class SegmentDecorator : Segment
    {
        protected Segment segment;
        public void SetComponent(Segment segment)
        {
            this.segment = segment;
        }
    }
 
    class SegmentColor: SegmentDecorator
    {
        public Color segmentColor;
        public SegmentColor(Color segmentColor)
        {
            this.segmentColor = segmentColor;
        }
    }
 
    public static class SegmentExtension
    {
        public static void SetColor(this Segment segm, Color color)
        {
            Segment a = new SegmentColor(color);
            segm = a;
        }
 
        public static Color GetColor(this Segment segm)
        {
 
            return Color.FromArgb(1, 1, 1);   
        }
    }
}

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

textual
Листинг программы
class Program
    {
        static void Main(string[] args)
        {
            var segment = new Segment();
            segment.SetColor("#FF0000");
            var color = segment.GetColor();
            Console.WriteLine($"color: {color}"); // color: #FF0000
            Console.ReadLine();
        }
    }
 
    public class Segment
    {
        
    }
 
    public static class SegmentExtensions
    {
        private static readonly Dictionary<Segment, string> SegmentColors = new Dictionary<Segment, string>();
 
        public static void SetColor(this Segment segment, string color)
        {
            SegmentColors[segment] = color;
        }
 
        public static string GetColor(this Segment segment)
        {
            SegmentColors.TryGetValue(segment, out string color);
            return color;
        }
    }

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы