Шаблон наблюдателя C # с использованием дженериков - PullRequest
0 голосов
/ 08 января 2010

Я пытаюсь реализовать шаблон наблюдателя с небольшим поворотом, субъект и наблюдатель - это один и тот же класс.Например,

class myclass
{ 
  public delegate void UpdateHandler(object sender);

  public event UpdateHandler UpdateEvent;

  public Attach(myclass obj){ // use delegate to attach update function of obj}

  public Update(object sender){ // do something with sender}

  public Notify() { // use UpdateEvent to update all attached obj's }

}

Это должно работать нормально.Теперь я хочу убрать снижение производительности, налагаемое упаковкой и распаковкой каждый раз, когда происходит событие обновления, поэтому я удаляю реализацию, основанную на «объектах», и пытаюсь использовать универсальные шаблоны.Например,

class myclass<Tin, Tout>
{ 
  public delegate void UpdateHandler(Tout sender);

  public event UpdateHandler UpdateEvent;

  public Attach(myclass<Tin,Tout> obj)
      { // use delegate to attach update function of obj}

  public Update(Tin sender){ // do something with sender}

  public Notify() 
      { // use UpdateEvent to update all attached obj's 
        // but now we have to send Tout 
      }

}

Это не работает, потому что у меня есть один EventHandler, это может быть Tin или Tout, но не оба.Как мне обойти это?Любые другие предложения по изменению дизайна также приветствуются.Большое спасибо за то, что прочитали это, и я надеюсь, что это достаточно ясно, чтобы понять вопрос.

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Также измените ваш обработчик событий:

public delegate void UpdateHandler<Tin>(Tin sender); 

public event UpdateHandler<Tin> UpdateEvent; 
0 голосов
/ 08 января 2010

Проверьте этот вопрос и ответы. Это очень хорошая реализация pub / sub со строго типизированными обобщениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...