Имаме клас, който управлява много опашки, които съхраняват данни. Искам потребителят да получава известия, когато към всяка от тези опашки се добавят нови данни. Бих искал да използвам модела на наблюдател, използвайки делегат и събития. Обикновено за едно събитие и източник бихме направили:
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);
но не върви, тъй като се очаква събитието да бъде тип делегат, а не масив от тип делегат.
Някакви идеи как да подходим към този проблем?