Доопределить класс - 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д