Делегаты

delegate void DelegateType(int a);

Делегат - класс, который позволяет хранить в себе ссылку на метод с определённой сигнатурой (порядком и типами принимаемых и типом возвращаемого значений) произвольного класса.

--------------от меня

вообщем вот есть тип int, 8 это int, и вот делегат это тип функции, тип описывающий сигнатуру функции то есть функция:

int add(int a,int b){return a+b;}

имеет "тип"

delegate int DelegateType(int a,int b);

и теперь любую другую функцию которая принимает 2 инта, и возвращает инт можно присвоить к этому делегату

----------------

Делегаты позволяют управлять частями кода как объектами(функции высшего порядка, объекты первого класса). Пример выше определяет новый тип под названием DelegateType, который представляет из себя метод, получающий целочисленную переменную (int) и не возвращающий значения. Любой метод, который соответствует этой сигнатуре может быть назначен переменной этого типа или передан как аргумент метода этого типа.

delegate void DelegateType(int a);

void f1(int a) {
    stdout.printf("%d\n", a);
}

void f2(DelegateType d, int a) {
    d(a);       // Вызов делегата
}

void main() {
    f2(f1, 5);  // Передача метода как аргумент делегата другому методу
}

Этот код выполнит метод f2, передавая ссылку на метод f1 и число 5. f2 затем выполнит метод f1, передавая ему число.

Делегаты могут быть объявлены локально. Метод класса также может быть присвоен делегату, например:

class Foo {

    public void f1(int a) {
        stdout.printf("a = %d\n", a);
    }

    delegate void DelegateType(int a);

    public static int main(string[] args) {
        Foo foo = new Foo();
        DelegateType d1 = foo.f1;
        d1(10);
        return 0;
    }
}

Last updated