У нас есть класс, который управляет множеством очередей, в которых хранятся данные. Я хочу, чтобы пользователь получал уведомления, когда новые данные добавляются в каждую из этих очередей. Я хотел бы использовать шаблон наблюдателя, используя делегат и события. Обычно для одного события и источника мы делаем:
public delegate void NewDataAddedDelegate();
public event NewDataAddedDelegate NewDataAdded;
и для наблюдателя:
qManager.NewDataAdded += new qManager.NewDataAddedDelegate(getNewDataFunc);
Но в данном случае у нас есть, скажем, 10 очередей, в каждую из которых можно принимать данные произвольно. Поэтому мы хотели бы, чтобы функции наблюдателя подписывались на отдельную очередь. Мы думали, что можем сделать:
public delegate void NewDataAddedDelegate();
public event NewDataAddedDelegate [] NewDataAdded; // can't do this
и в конструкторе qManager:
NewDataAdded = new NewDataAddedDelegate[numberOfQueues];
и в наблюдателе:
qManager.NewDataAdded[0] += new qManager.NewDataAddedDelegate(getNewDataFunc0);
qManager.NewDataAdded[1] += new qManager.NewDataAddedDelegate(getNewDataFunc1);
но нет, так как ожидается, что событие будет типом делегата, а не массивом типа делегатов.
Любые идеи о том, как подойти к этой проблеме?