Что такое синтаксис для возврата события из функции? (Не для вызова события, чтобы вернуть его, чтобы он мог привязываться к функциям).Возврат события из функции
У меня есть класс контейнера, который содержит словарь, в котором каждый участник имеет событие.
Цель состоит в том, чтобы иметь возможность написать что-то вроде этого:
классContainer c = new Container();
c.CreateEventForKey("a"); // Create the member in the dictionary
c.EventForKey("a") += some_function; // Bind some_function to the event in the "a" member
c.OnEventForKey("a","b"); // Calls some_function with argument "b"
Контейнер выглядит следующим образом:
public class Container {
public class Member {
public event Action<string> AnEvent;
public void OnEvent(string v) { if(AnEvent!=null) { AnEvent(v); } }
}
protected Dictionary<string,Member> members;
// This seems to work OK.
public void OnEventForKey(string k, string v) {
if (members.ContainsKey(k)) { members[k].OnEvent(v); }
else { /* report error */ }
}
// Can't get this to compile.
public event Action<string> EventForKey(string k) {
if (members.ContainsKey(k)) { return members[k].AnEvent; }
else { /* report error */ }
}
}
Как я могу определить EventForKey
так, что это делает то, что я могу рассчитывать?
Я не думаю, что вы можете вернуть событие, но вы можете вернуть делегат, который может быть связан с событием. Это то, что вы имели ввиду? –
Я думаю, вам просто нужно удалить ключевое слово события из объявления AdEvent, а также из возвращаемого типа EventForKey. –
@IanNewson - ключевая часть того, с чем у меня возникают проблемы, - это 'c.EventForKey (" a ") + = some_function;'. Я бы предпочел написать это, чем громоздкие 'c.members [" a "]. AnEvent + = some_function' (как я могу добавить проверку ошибок и протоколирование к первой версии, но не ко второй). –