diff --git a/C#/C#.md b/C#/C#.md index 8d64d1c..25574eb 100644 --- a/C#/C#.md +++ b/C#/C#.md @@ -1003,6 +1003,8 @@ Func a = delegate(string a) { Console.WriteLine(a); }; Func b = (a) => Console.WriteLine(a); +Func d = (string a) => Console.WriteLine(a); // Тип указывать не обязательно, если не использовать var +Func e = a => Console.WriteLine("FooBar"); // Если 1 параметр, то скобки не нужны Func c = delegate { // Мы аргументы не используем, поэтому скобки можно не писать Console.WriteLine(foo); // Можно ссылаться на локальные переменные }; @@ -1010,3 +1012,46 @@ var a = (string a, string b) => Console.WriteLine(a+b); // Неявная тип delegate void Func(string a); ``` + +Лямбды могут возвращать значения и их можно складывать и вычитать + +```C# +Operation sum = (a, b) => a + b; +Operation product = (a, b) => a * b; +Operation op = sum; +op += product; +op -= sum; + +delegate int Operation(int a, int b); +``` + +## *event* + +```C# +Account a = new(50); +a.Notify += Console.WriteLine; + +delegate void AccountHandler(string message); + +class Account(int sum) +{ + + public event AccountHandler? Notify; + private int sum = sum; + + void Put(int amount) => sum += amount; + + void Take(int amount) + { + if (sum < amount) + { + Notify?.Invoke("Денег мала"); + } + else + { + sum -= amount; + Notify?.Invoke($"Снято {amount}"); + } + } +} +```