2009-09-21 17 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 。代表)。這樣,當發生什麼事情時,該方法將自動被調用。這是一個非常乾淨的事件處理解決方案。

在您編寫涉及委託的幾個應用程序(表格視圖很重要)之後,您將掌握它。

相關問題