【问题标题】:How do I set up Delegates between my classes?如何在我的班级之间设置代表?
【发布时间】:2010-07-14 13:27:19
【问题描述】:

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

表单 A 中包含用户控件 B 和 G。用户控件 B 中包含用户控件 D,用户控件 D 具有“刷新”方法。用户控件G内部有用户控件F,用户控件F需要调用D中的“刷新”方法。

1) 缺少重构代码(它是遗留代码,因此不作为一种选择),代表是处理此问题的最佳方式吗?如果没有,您还有其他建议吗?

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

【问题讨论】:

    标签: c# winforms delegates


    【解决方案1】:

    首先,F 应该对 D 及其刷新功能一无所知。将事件添加到 F,在必要时引发。如果表单A知道F,则从A订阅该事件。如果没有,则在G中制作类似的事件,并在A中订阅它。在A事件处理程序中,直接调用Refresh,或者调用B方法,该方法调用D.refresh。

    看起来我的回答比你的问题更难读:)应该是这样的:

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

    【讨论】:

    • @Raven 您与代表们走在正确的轨道上。事件是使用委托声明的,因此首先学习委托是个好主意。
    【解决方案2】:

    对于代表,请参阅:http://www.akadia.com/services/dotnet_delegates_and_events.html

    对于事件,您必须确保内容以正确的顺序通过。 在当前情况下,我猜测一个好方法是从 G 公开一个事件,当 F 中的某些内容发生变化时应该触发该事件。我们将在 B 中有一个订阅此事件的处理程序,最终将调用刷新。 将有更多的事件和代表参与,以将呼叫从父母传递给孩子,反之亦然。 请记住机械装置的概念:开始运动的部分是向其他人触发(引发事件)的部分。当其他人移动时,它们会触发其他相关部分……最终,远处的东西会移动。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多