Как использовать делегаты в C #

Делегаты

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

В делегатах, указывающих на методы с немного разными типами сигнатур, допускается некоторое расхождение. Сюда могут входить типы, которые являются предками или унаследованы от типов в сигнатурах типов делегата.

Переменные делегата также могут быть множественными. Переменные делегата с множественным приведением вызывают одну функцию за другой. Оператор + используется для функций с множественным приведением, а - используется для удаления функции из списка выполнения переменных с множественным приведением.

Использование

В следующем примере показано, как используются делегаты.

 using System;  class DelegateExample {//Делегаты определили публичный делегат int delFunc (int num);  публичный делегат void delFunc2 ();  общедоступный статический int doubleNum (int num) {return num + num;  } общедоступный статический int squareNum (int num) {return num * num;  } public static void function1 () {Console.Write ("Привет,");  } public static void function2 () {Console.Write ("Мир!");  } static void Main () {//Объявленные переменные-делегаты delFunc fun1 = new delFunc (doubleNum);  delFunc fun2 = новый delFunc (squareNum);  delFunc2 multiFun; //Переменная делегата с многоадресной трансляцией multiFun = new delFunc2 (function1);  multiFun + = новый delFunc2 (function2); //Вызов doubleNum (3) с использованием делегата Console.WriteLine (fun1 (3)); //Вызов squareNum (3) с использованием делегата Console.WriteLine (fun2 (3)); //Вызов function1 (), а затем function2 () с использованием делегата multiFun ();  }} 

В этом примере два делегата, delFunc и delFunc2 определены. delFunc принимает целое число в качестве параметра и возвращает целое число. delFunc2 не принимает параметров и ничего не возвращает.

Два метода с совпадающими сигнатурами (с delFunc , doubleNum и squareNum ) определены, на которые ссылаются переменные делегата fun1 и fun2 , а затем вызываются используя эти переменные.

Аналогичным образом определяются две функции, соответствующие delFunc2 , function1 и function2 . Переменная делегата delFunc2 инициализируется, многоадресно передается для вызова function1 и function2 , а затем используется для вызова этих функций. Этот вызов выводит: «Hello, World!» в терминал, используя «Hello» в function1 и «World!» в function2.

Оцените статью
nanomode.ru
Добавить комментарий