From b40362f28b67e0ad0e22c2bad070b7c4b20da13a Mon Sep 17 00:00:00 2001 From: StNicolay Date: Sun, 26 Nov 2023 08:28:18 +0000 Subject: [PATCH] C# 26.11.2023 --- C#/C#.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/C#/C#.md b/C#/C#.md index f015ad8..1815543 100644 --- a/C#/C#.md +++ b/C#/C#.md @@ -160,7 +160,7 @@ int y = 5; string z = x < y ? "Works" : "Cosmic ray"; ``` -### Switch +### *Switch* ```C# int number = 1; @@ -185,10 +185,10 @@ switch (number) { Всё как в С++ -* while -* do-while -* for -* foreach +* *while* +* *do-while* +* *for* +* *foreach* ## Массивы @@ -235,7 +235,7 @@ words.Add("Bar"); words.RemoveAt(1); ``` -## Random +## *Random* ```C# Random r = new Random(); @@ -324,7 +324,7 @@ int b = 6; Sum(a, b); ``` -#### params +#### *params* *params* позволяет передать не определённое кол-во параметров. После него не может быть больше параметров @@ -383,7 +383,7 @@ int Sum2Arr(int[] arr1, int[] arr2) { } ``` -## Enum +## *Enum* Enum используется для хранения состояния @@ -918,7 +918,7 @@ catch (DivideByZeroException ex) } ``` -### Класс Exception +### Класс *Exception* > Класс *Exception* - базовый класс всех ошибок @@ -930,7 +930,7 @@ catch (DivideByZeroException ex) * StackTrace * TargetSote - метод, в котором случилось исключение -### Throw +### *Throw* ```C# try { @@ -939,3 +939,58 @@ try { Console.WriteLine("This is fine"); } ``` + +## Делегаты + +> Делегаты - указатели на методы. Методы должны полностью соответсвовать сигнатуре делегата. +> Сигнатура - возвращаемый тип и передоваемые параметры + +Используются для: + +* Callbacks +* Events - в языке есть хитрый механизм на это дело + +```C# +Message? mes = Hello; +mes(); +mes = new Hello().Display; +mes(); + +mes = new Message(Hello); // Можно и так присвоить +mes += new Hello().Display; +mes(); // Вызывается и Hello, и Display +mes += Hello; // Hello теперь будет вызываться 2 раза +mes -= Hello; // Удалит последний Hello из списка вызова +if (mes == null) +{ + return; +} + +mes += mes; // Делегаты можно складывать +mes.Invoke(); // Тоже самое, что и просто вызвать делегат + +void Hello() +{ + Console.WriteLine("Hello World"); +} + +delegate void Message(); + +class Hello +{ + public void Display() + { + Console.WriteLine("Hello there"); + } +} +``` + +Если в делегате несколько методов, то вернётся последнее значение. + +Делегаты могут быть параметрами методов и возвращаемым типом. + +## Обобщённые делегаты + +```C# +delegate T Operation(K val); +```