пятница, 7 января 2022 г.

Делегаты

 Делегаты обладают следующими свойствами:

  1. Делегаты аналогичны указателям на функции C++, но являются типобезопасными.
  2. Делегаты позволяют передавать методы в качестве параметров.
  3. Делегаты могут использоваться для определения методов обратного вызова.
  4. Делегаты могут быть связаны вместе; например, для одного события можно вызвать несколько методов.
  5. Методы не должны точно соответствовать подписи делегата.
  6. Использование делегата позволяет программисту инкапсулировать ссылку на метод внутри объекта делегата. Затем объект делегата может быть передан коду, который может вызвать метод, на который ссылаются, без необходимости знать во время компиляции, какой метод будет вызван.
  7. Интересным и полезным свойством делегата является то, что он не знает и не заботится о классе объекта, на который он ссылается. Подойдет любой объект; все, что имеет значение, это то, что типы аргументов метода и тип возвращаемого значения совпадают с типом делегата. Это делает делегаты идеально подходящими для «анонимного» вызова.

Example 1

Перед применением делегата:

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.   
  4.     if (!IsPostBack)  
  5.     {  
  6.         GetData("Mahesh");  
  7.     }  
  8. }  
  9. public void GetData(string Name)  
  10. {  
  11.     lblName.Text = Name;  
  12. }  

Output

После применения делегата:  

  1. public delegate void MyDelegare(string var);  
  2. protected void Page_Load(object sender, EventArgs e)  
  3.   
  4. {  
  5.     if (!IsPostBack)  
  6.     {  
  7.         MyDelegare objMyDelegare = new MyDelegare(GetData);  
  8.         objMyDelegare("Mahesh");  
  9.     }  
  10. }  
  11. public void GetData(string Name)  
  12. {  
  13.     lblName.Text = Name;  
  14. }  

Output

Многоадресный делегат

Это делегат, который содержит ссылку более чем на один метод.

Делегаты многоадресной рассылки должны содержать только методы, возвращающие void, в противном случае возникнет исключение времени выполнения.

Example 2

  1. public delegate void MyDelegare(string var);  
  2. protected void Page_Load(object sender, EventArgs e)  
  3. {  
  4.   
  5.     if (!IsPostBack)  
  6.     {  
  7.         MyDelegare objMyDelegare = new MyDelegare(GetData);  
  8.         objMyDelegare += new MyDelegare(GetDat_one);  
  9.         //GetData and GetDat_one is called  
  10.         objMyDelegare("Mahesh");  
  11.         objMyDelegare -= new MyDelegare(GetDat_one);  
  12.         lblName.Text = lblName.Text + "<br />";  
  13.         //GetData is called  
  14.         objMyDelegare("Mahesh");  
  15.     }  
  16. }  
  17.   
  18. public void GetData(string Name){   
  19.     lblName.Text = lblName.Text + "GetDate : " + Name;  
  20. }  
  21.   
  22. public void GetDat_one(string Name)  
  23. {  
  24.     lblName.Text = lblName.Text + " GetDate_One : " + Name;  
  25. }  

Output

GetDate : Mahesh GetDate_One : Mahesh
GetDate : Mahesh

Комментариев нет:

Отправить комментарий

Паттерн 'Репозиторий' в ASP.NET

  Последнее обновление: 1.11.2015         Одним из наиболее часто используемых паттернов при работе с данными является паттерн 'Репозито...