2009-09-21 18 views

回答

0

你的意思是.NET或Java或其他语言的代表吗?

1

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

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

[delegate scrollView:self shouldScrollToPoint:to] 

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

0

.NET中的委托只不过是一个函数指针,或者换句话说就是一个指向可执行代码块的变量。它们可以以各种方式使用。一种方法是在事件背景下使用它们。假设你有一个ASP.NET页面,并且你正在使用MVP(该页面上的Model View Presenter模式)。您希望向您的演示者通知视图上保存按钮的点击事件。您可以在视图界面上定义一个事件,但为了订阅该事件并对其执行操作,您需要注册一个在事件引发时触发的方法。例如:

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; 
} 
+0

-1:错误的语言。查看标签。 – 2009-09-22 10:17:07

+0

woops,对不起。基于其他答案,即使在可可触摸中,似乎委托仍然基本上是一个可以传递和调用的函数指针。这个概念是相似的,但语言结构是非常不同的。 – 2009-09-22 14:05:49

0

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

在您编写涉及委托的几个应用程序(表格视图很重要)之后,您将掌握它。

相关问题