Делегация, какой-нибудь пример кода? Как объект делегировать другому - PullRequest
0 голосов
/ 22 сентября 2009

Я хотел бы получить лучшее понимание о делегации. Может кто-нибудь вставить хороший пример кода делегирования и объяснить, как это работает

Ответы [ 5 ]

1 голос
/ 22 сентября 2009

Довольно хороший пример: http://en.wikipedia.org/wiki/Delegation_pattern#Objective-C_example

В этом примере MyCoolAppController создает объект типа TCScrollView и задает для свойства "делегата" TCScrollView значение self. Это означает, что когда TCScrollView вызывает

[delegate scrollView:self shouldScrollToPoint:to]

он просит MyCoolAppController (делегата TCScrollView) выполнить некоторые вычисления и посмотреть, можно ли прокручивать. Вы можете сказать "MyCoolAppController является делегатом TCScrollView", чтобы описать это; TCScrollView просит MyCoolAppController сделать какую-то работу от его имени.

0 голосов
/ 24 сентября 2009

Делегат - это способ реагировать на события. В других языках вы, вероятно, сделали бы это путем создания подклассов. Например, скажем, у вас есть табличное представление. Вы можете создать подкласс tableview и переопределить tableView: didSelectRowAtIndexPath: метод, но это может привести к путанице и создать ненужный подкласс (наряду с тем фактом, что его нельзя использовать повторно). Вместо этого вы создаете класс TableViewDelegate и сообщаете об этом вашему табличному представлению (tableView .delegate). Таким образом, метод автоматически вызывается, когда что-то происходит. Это действительно чистое решение для обработки событий.

После того, как вы напишете несколько приложений с участием делегатов (большие таблицы), вы поймете, как это работает.

0 голосов
/ 22 сентября 2009

Вот ответ, который я написал с объяснением делегирования: https://stackoverflow.com/questions/1089737#1090170

0 голосов
/ 22 сентября 2009

Делегат на языке .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;
}
0 голосов
/ 22 сентября 2009

Вы имеете в виду .NET или Java или какой-либо другой языковой делегат?

...