0

我想更好地了解代表团。有人可以粘贴一个好的委托代码示例并解释它是如何工作的吗?

4

5 回答 5

1

有一个很好的例子:http ://en.wikipedia.org/wiki/Delegation_pattern#Objective-C_example

在此示例中,MyCoolAppController创建 和 类型的对象TCScrollView,并将 的“委托”属性设置TCScrollViewself。这意味着当 TCScrollView 调用

[delegate scrollView:self shouldScrollToPoint:to]

它要求MyCoolAppController(TCScrollView 的委托)执行一些计算,看看是否可以滚动。你可以说“MyCoolAppController是”的代表TCScrollView来描述这个;TCScrollView要求MyCoolAppController代表它做一些工作。

于 2009-09-21T23:16:38.170 回答
0

委托是一种响应事件的方式。在其他语言中,您可能会通过子类化来做到这一点。例如,假设您有一个表格视图。您可以将 tableview 子类化并覆盖 tableView:didSelectRowAtIndexPath: 方法,但这会变得混乱并创建一个不必要的子类(以及它不可重用的事实)相反,您创建一个 TableViewDelegate 类并告诉您的表视图它(tableView 。代表)。这样,当事情发生时,该方法将自动被调用。这是一个非常干净的事件处理解决方案。

在您编写了一些涉及委托的应用程序(表视图是大的)之后,您就会掌握它的窍门。

于 2009-09-23T21:30:55.520 回答
0

Here's an answer I wrote explaining delegation: https://stackoverflow.com/questions/1089737#1090170

于 2009-09-21T23:47:41.373 回答
0

您是指 .NET 还是 Java 或其他语言委托?

于 2009-09-21T23:14:57.143 回答
0

.NET 用语中的委托只不过是一个函数指针,或者换句话说,一个指向可执行代码块的变量。它们可以以多种方式使用。一种方法是在事件的上下文中使用它们。假设您有一个 ASP.NET 页面,并且您正在使用 MVP(该页面上的模型视图演示者模式)。您希望演示者收到有关视图上保存按钮的单击事件的通知。您可以在视图接口上定义一个事件,但为了订阅该事件并对其采取行动,您需要注册一个在引发事件时触发的方法。例如:

public class ClassThatRegistersForEvent
{
   public void InitializeView(IView view)
   {
      view.SaveButtonClickedEvent += delegate{
                                        // do stuff in here when the event is raised
                                     }
   }
}
public interface IView
{
  event System.EventHandler SaveButtonClickedEvent;
}
于 2009-09-21T23:35:02.877 回答