#c# #generics #operator-overloading #.net-3.5
Вопрос:
Мне нужно упростить использование универсальной структуры или класса, чтобы избежать раздувания кода, как показано ниже:
delegate void EventSimple(); class Snitchlt;Tgt; { public T Value { get { return val; } set { val = value; if(Changed != null) Changed(); } } public event EventSimple Changed; public Snitch() { } public Snitch(T t) { val = t; } private T val; } ... // Desired usage Snitchlt;intgt; s = new Snitchlt;intgt;(); s.Changed = new EventSimple(Callback); s = 10; // instead of s.Value = 10, listeners will be automatically notified int x = s; // instead of int x = s.Value; int y = s * s s 5; // another required usage example ... private void Callback() { }
Идея состоит в том, чтобы заменить некоторые типы данных этой структурой/классом, который группирует значение с помощью дескриптора события, чтобы слушатели всегда могли получать уведомления об изменении значения. Не имеет значения, является ли вышесказанное структурой или классом, как я могу это сделать? Я также открыт для других проектов, если это возможно.
Редактировать:
До сих пор мне удавалось упростить доступ к чтению только с помощью
public static implicit operator T(Snitchlt;Tgt; s) { return s.Value; }
но я не вижу, как можно упростить назначение, потому что
public static implicit operator Snitchlt;Tgt;(T val) { return new Snitchlt;Tgt;(val); }
уничтожил бы старый обработчик событий… Неужели нет никакого способа обойти это?
Комментарии:
1. На этот вопрос трудно ответить, потому что в коде нет ничего изначально неправильного. Это выглядит как достойный рабочий пример того, как запускать событие, когда что-то меняется. Может быть, какой-то дополнительный контекст прояснил бы это. (Кроме того, я не думаю, что это имеет какое-то отношение
operator-overloading
.)2. @ScottHannen Я обновил вопрос своими последними выводами, но я не уверен, можно ли упростить задание…