Делегаты обладают следующими свойствами:
- Делегаты аналогичны указателям на функции C++, но являются типобезопасными.
- Делегаты позволяют передавать методы в качестве параметров.
- Делегаты могут использоваться для определения методов обратного вызова.
- Делегаты могут быть связаны вместе; например, для одного события можно вызвать несколько методов.
- Методы не должны точно соответствовать подписи делегата.
- Использование делегата позволяет программисту инкапсулировать ссылку на метод внутри объекта делегата. Затем объект делегата может быть передан коду, который может вызвать метод, на который ссылаются, без необходимости знать во время компиляции, какой метод будет вызван.
- Интересным и полезным свойством делегата является то, что он не знает и не заботится о классе объекта, на который он ссылается. Подойдет любой объект; все, что имеет значение, это то, что типы аргументов метода и тип возвращаемого значения совпадают с типом делегата. Это делает делегаты идеально подходящими для «анонимного» вызова.
Example 1
Перед применением делегата:
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- GetData("Mahesh");
- }
- }
- public void GetData(string Name)
- {
- lblName.Text = Name;
- }
Output
После применения делегата:
- public delegate void MyDelegare(string var);
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- MyDelegare objMyDelegare = new MyDelegare(GetData);
- objMyDelegare("Mahesh");
- }
- }
- public void GetData(string Name)
- {
- lblName.Text = Name;
- }
Output
Многоадресный делегат
Это делегат, который содержит ссылку более чем на один метод.
Делегаты многоадресной рассылки должны содержать только методы, возвращающие void, в противном случае возникнет исключение времени выполнения.
Example 2
- public delegate void MyDelegare(string var);
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- MyDelegare objMyDelegare = new MyDelegare(GetData);
- objMyDelegare += new MyDelegare(GetDat_one);
- //GetData and GetDat_one is called
- objMyDelegare("Mahesh");
- objMyDelegare -= new MyDelegare(GetDat_one);
- lblName.Text = lblName.Text + "<br />";
- //GetData is called
- objMyDelegare("Mahesh");
- }
- }
- public void GetData(string Name){
- lblName.Text = lblName.Text + "GetDate : " + Name;
- }
- public void GetDat_one(string Name)
- {
- lblName.Text = lblName.Text + " GetDate_One : " + Name;
- }
Output
GetDate : Mahesh GetDate_One : Mahesh
GetDate : Mahesh
Комментариев нет:
Отправить комментарий