Доопределить класс - 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;
}
}