Как упростить использование универсальной структуры/класса, содержащего данные и обработчик событий

#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 Я обновил вопрос своими последними выводами, но я не уверен, можно ли упростить задание…