繁体   English   中英

如何在课程之间设置代理?

[英]How do I set up Delegates between my classes?

我正在使用一些结构化的代码:

表单A中包含用户控件B和G. 用户控件B在其中具有用户控件D,并且用户控件D具有“刷新”方法。 用户控件G在其中具有用户控件F,并且用户控件F需要在D中调用“刷新”方法。

1)没有对代码进行重组(这是遗留代码,所以它作为一个选项不在桌面上),委托代表处理这个问题的最佳方法是什么? 如果没有,你还有其他建议吗?

2)我没有代理功能的经验 - 是否有一个很好的入门或示例,我可以使用它来适应我的代码以实现所需的功能?

首先,F不应该知道关于D及其刷新功能的任何信息。 将事件添加到F,必要时将其引发。 如果表单A知道F,则从A子事件到此事件。如果不是,则在G中创建类似事件,并在A中订阅它。在事件处理程序中,直接调用Refresh,或调用调用D.refresh的B方法。

看起来我的答案比你的问题更不易读:)它应该是这样的:

F引发事件 - > G处理F事件并引发事件 - > A处理G事件并调用B方法 - > B方法调用D.refresh

代表们可以看到: http//www.akadia.com/services/dotnet_delegates_and_events.html

对于活动,您必须确保正确的顺序通过。 在当前场景中,我猜测一个好方法是从G中暴露一个事件,当F中的某些事情发生变化时,该事件应该被触发。 我们将在B中订阅一个处理此事件的处理程序,最终将调用refresh。 将有更多的事件和代表参与将呼叫从父母传递给孩子,反之亦然。 请记住机械装置的概念:运动的一部分是触发(引发事件)给他人的运动。 当其他人移动时,他们会触发其他相关部件......最终会有一些远处移动。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM