Я пытаюсь реализовать шаблон наблюдателя с небольшим поворотом, субъект и наблюдатель - это один и тот же класс.Например,
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, но не оба.Как мне обойти это?Любые другие предложения по изменению дизайна также приветствуются.Большое спасибо за то, что прочитали это, и я надеюсь, что это достаточно ясно, чтобы понять вопрос.