Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
// возвращает void и принимает единственный параметр типа Т.public delegate void MyGenericDelegate<T>(T arg);Как видите, в типе делегата
MyGenericDelegate<T>string// Создать экземпляр MyGenericDelegate<T>// с указанием string в качестве параметра типа.
MyGenericDelegate<string> strTarget = StringTarget;strTarget("Some string data");С учетом формата объекта
strTargetStringTargetstatic void StringTarget(string arg){ Console.WriteLine( "arg in uppercase is: {0}", arg.ToUpper());}Обобщенные делегаты Action<> и Func<>
В настоящей главе вы уже видели, что когда нужно применять делегаты для обратных вызовов в приложениях, обычно должны быть выполнены описанные далее шаги.
1. Определить специальный делегат, соответствующий формату метода, на который он указывает.
2. Создать экземпляр специального делегата, передав имя метода в качестве аргумента конструктора.
3. Косвенно обратиться к методу через вызов
Invoke()В случае принятия такого подхода в итоге, как правило, получается несколько специальных делегатов, которые могут никогда не использоваться за рамками текущей задачи (например,
MyGenericDelegate<T>CarEngineHandlervoidAction<>Func<>ActionAndFuncDelegatesОбобщенный делегат
Action<>SystemvoidAction<>Модифицируйте класс
Program// Это цель для делегата Action<>.static void DisplayMessage(string msg, ConsoleColor txtColor, int printCount){ // Установить цвет текста консоли. ConsoleColor previous = Console.ForegroundColor; Console.ForegroundColor = txtColor; for (int i = 0; i < printCount; i++) { Console.WriteLine(msg); } // Восстановить цвет. Console.ForegroundColor = previous;}Теперь вместо построения специального делегата вручную для передачи потока программы методу
DisplayMessage()Action<>Console.WriteLine("***** Fun with Action and Func *****");<b>// Использовать делегат Action<> для указания на метод DisplayMessage().</b>Action<string, ConsoleColor, int> actionTarget = DisplayMessage;actionTarget("Action Message!", ConsoleColor.Yellow, 5);Console.ReadLine();Как видите, при использовании делегата
Action<>Action<>voidFunc<>Обобщенный делегат
Funс<>Action<>Program// Цель для делегата Func<>.static int Add(int x, int y){ return x + y;}Ранее в главе был построен специальный делегат
BinaryOpFunc<>Func<>ProgramПохожие книги на "Язык программирования C#9 и платформа .NET5", Троелсен Эндрю
Троелсен Эндрю читать все книги автора по порядку
Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mir-knigi.info.