Введение в программирование

       

Использование делегата для вызова методов


Делегат объявляет новый ссылочный тип.

Делегат позволяет передавать функцию как параметр.

Объявление делегата имеет следующее формальное описание:

[атрибуты] [модификаторы] delegate тип_результата имя_делегата ([список_формальных параметров]);

Модификаторами делегата могут быть:

  • new
  • public
  • protected
  • private
  • internal
  • unsafe (если в списке параметров используется указатель).

Тип результата должен соответствовать типу результата используемого метода. При создании делегата требуется, чтобы передаваемый как делегат метод имел ту же сигнатуру метода, что и в объявлении делегата.

Например:

using System; delegate void MyDelegate(); // Этот делегат позволяет // вызывать методы без параметров // и без возвращаемого значения

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

Например:

using System; delegate void MyDelegate(); namespace MyDelegat1 { class Class1 {[STAThread] static void Main(string[] args) { CA var1= new CA(); // Экземпляр делегата для нестатического метода: MyDelegate F_d = new MyDelegate(var1.F_Instance); F_d(); // Экземпляр делегата для статического метода: F_d = new MyDelegate(CA.F_Static); F_d(); } } public class CA { public CA() { } public void F_Instance() { Console.WriteLine("Вызов метода класса с использованием делегата"); } public static void F_Static() { Console.WriteLine("Вызов статического метода с использованием делегата"); } }



Содержание раздела