У нас есть класс, который управляет многими очередями, в которых хранятся данные. Я хочу, чтобы пользователь получал уведомления при добавлении новых данных в каждую из этих очередей. Я хотел бы использовать шаблон наблюдателя, используя делегат и события. Обычно для одного события и источника мы бы сделали:
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);
но нет, поскольку ожидается, что событие будет типом делегата, а не массивом типа делегата.
Есть идеи, как подойти к этой проблеме?