想象一下Main.c
调用sub.cs
来调用action.cs
。 action.cs
sub.cs
提出的sub.cs
提出和事件main.cs
并不关心只有sub.cs
想要了解此事件的事件main.cs
再次引发事件,以便action.cs
可以订阅它并发现string tmp = "abacus";
char *new = tmp.c_str();
已经提出了原始事件;这看起来很麻烦。
通过一系列方法调用传递事件有哪些替代方法?
答案 0 :(得分:2)
您可以在Sub
中公开的事件中直接附加Action
中公开的事件,当然事件需要在Sub
和Action
中公开:
class SubClass
{
public event EventHandler MyEvent
{
add
{
_action.MyEvent += value;
}
remove
{
_action.MyEvent -= value;
}
}
private ActionClass _action;
}
使用此解决方案,您仍然需要声明事件两次但不链接方法调用,并且可以省略SubClass
中的事件处理程序。
当然,还有其他选择,但您可能需要更改设计,而我没有足够的背景来提出任何建议。总的来说,我从最简单的解决方案开始。如果您只需要冒泡一个事件,这可能就足够了,但如果您需要公开其中的许多事件,那么您可以考虑引入第三个对象,该对象公开您需要的内容并通过{{1}进行访问来自SubClass
,类似这样的事情(但请更好的名字):
ActionClass
请注意,此示例只是概念验证。
答案 1 :(得分:1)
您可能希望将pub-sub与主题一起使用,例如,请参阅https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html
(你不需要rabbitmq,因为你可以自己实现简单的pub-sub或从github / MSDN获取一个:https://msdn.microsoft.com/en-us/library/ms752254(v=vs.110).aspx,https://github.com/upta/pubsub/blob/master/README.md)
答案 2 :(得分:0)
您可以使用回调代替事件
您可以添加回调函数作为方法链方法的附加参数
例如。如果方法为MyData
,则将其替换为doSomething()
,Main.c使用doSomething(Action action)
调用此方法,并且Action.cs调用Sub.doSomething(() => ReactToTheEvent());
引发事件。