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