Подпись озадачивает. Позвольте мне немного пояснить:
Я хотел бы предоставить события, которые зависят от параметра, поэтому наблюдатель может принять решение о получении событий, если что-то произойдет с определенным "id". Это может выглядеть так:
public event EventHandler Foo (string id);
Я знаю, что этот синтаксис неверен в .NET 3.5, и я также знаю, что эта идея вводит дополнительную проблему (например, как мы можем отменить подписку?).
Как мне обойти эту проблему? Я подумал об использовании чего-то вроде:
public EventHandler Foo (string id);
который, по крайней мере, является законным синтаксисом и может работать, но он по-прежнему не очень велик для меня.
Изменить: Я не, прося о передаче аргументов функции обратного вызова. Моя идея больше похожа на это:
class Bleh
{
public event EventHandler Foo (string index);
private void RaiseEvents() // this is called by a timer or whatever
{
Foo["asdf"] (this, EventArgs.Empty); // raises event for all subscribers of Foo with a parameter of "asdf"
Foo["97"] (this, EventArgs.Empty); // same for all "97"-subscribers
// above syntax is pure fiction, obviously
}
}
// subscribe for asdf events via:
Bleh x = new Bleh ();
x.Foo["asdf"] += (s, e) => {};
Объяснение
Поскольку вы, вероятно, задаетесь вопросом, почему я пытаюсь это сделать, я объясню свою ситуацию. У меня есть класс, который предоставляет позиции определенных объектов (каждый из них идентифицируется некоторой строкой ID).
Вместо предоставления event EventHandler<PositionChangedEventArgs>
, созданного для ЛЮБЫХ позиционных изменений, я хотел бы иметь событие для каждого объекта (доступ к нему по индексу), поэтому наблюдатели могут прослушивать события только для определенного идентификатора.