DEV Community

Elshod Ibodullayev
Elshod Ibodullayev

Posted on

Delegatlar, Eventlar C# tilida 🚀

C# tilida delegatlar, eventlar va LINQ juda muhim tushunchalar bo‘lib, ular kodni moslashuvchan, toza va o‘qilishi oson qiladi. Ushbu maqolada quyidagilarni ko‘rib chiqamiz:

  1. Delegatlar nima va qanday ishlatiladi
  2. Eventlar yordamida hodisalarni kuzatish
  3. LINQ yordamida ma’lumotlarni qulay tarzda qayta ishlash

🔹 Delegatlar

Delegat nima?

Delegat — bu metodni o‘zida saqlaydigan tip xavfsiz pointer.

  • Boshqacha qilib aytganda, metodni parametr sifatida uzatish imkonini beradi.
  • Delegatlar yordamida kodimiz modulyar va moslashuvchan bo‘ladi.

Misol:

// Delegat e’lon qilish public delegate void MyDelegate(string message); class Program { // Bu metod delegat orqali chaqiriladi static void PrintMessage(string msg) { Console.WriteLine("Xabar: " + msg); } static void Main() { // Delegatga metodni tayinlash MyDelegate del = PrintMessage; // Delegat orqali metodni chaqirish del("Salom, delegatlar!"); } } 
Enter fullscreen mode Exit fullscreen mode

//1. Func (malumot qabul qiladi 1-16.., va qandaydir type qaytaradi)
//2. Action (malumot qabul qiladi, ammo qaytarmaydi)
//3. predicate (malumot qabul qiladi, va bool qaytaradi)

public class Program { delegate int MathOperation(int x, int y); private static void Main(string[] args) { // 1-step Func MathOperation add = Add; MathOperation subtract = Subtract; int result1=add(6,2); int result2=subtract(6,2); Console.WriteLine($"Add -{result1}:\n Subtract -{result2}"); //2-step Action Action<int, int> action = (x, y) => { int result3 = x + y; Console.WriteLine($"Sum:{result3}"); }; action(13, 87); //3-Predicate string input = "Hello Delegate"; if (IsValidInput(input, IsUpperCase)) { Console.WriteLine("The input is in uppercase"); } else { Console.WriteLine("The input is not in uppercase"); } } private static bool IsValidInput(string input, Predicate<string> validateRule) { return validateRule(input); } private static bool IsUpperCase(string input) { return input.Equals(input.ToUpper()); } private static int Add(int x, int y) { return x + y; } private static int Subtract(int x, int y) { return x - y; } } 
Enter fullscreen mode Exit fullscreen mode

🔹 Event nima?

Event (hodisa) — bu dasturda biror voqea sodir bo‘lganda xabar beruvchi mexanizm.
Masalan:

Tugma bosilganda

Sichqoncha harakat qilganda

Ma’lumot bazasida o‘zgarish bo‘lganda

Event aslida “signal” bo‘lib, dastur ichidagi boshqa joylarga:
👉 “Mana, hodisa bo‘ldi, xohlasa reaksiya qil” deb yuboradi.

Eventning asosiy qismlari

Event 3 asosiy qismdan iborat:

Publisher (E’lon qiluvchi)
Eventni yaratadigan va uni “sodir qiladigan” obyekt.
(Masalan, Button tugmasi)

Subscriber (Obuna bo‘luvchi)
Event sodir bo‘lganda unga javob beradigan metod(lar).
(Masalan, “Tugma bosilganda ‘Salom’ chiqarsin” degan metod)

Event handler (Ishlovchi)
Hodisaga javob sifatida bajariladigan kod.

Oddiy hayotiy misol

Do‘stingiz telefoningizga qo‘ng‘iroq qiladi → event sodir bo‘ldi.

Siz qo‘ng‘iroqqa javob berasiz → event handler ishga tushdi.
👉 Telefoningiz publisher, siz subscriber, sizning “Alo alik” deyishingiz esa event handler.

using System; class Program { // 1. Delegate tipi public delegate void MyEventHandler(string message); // 2. Event e’lon qilish public static event MyEventHandler OnMessage; static void Main() { // 3. Eventga obuna bo‘lish OnMessage += ShowMessage; OnMessage += ShowUpperCaseMessage; // 4. Eventni chaqirish OnMessage("Salom, Event ishladi!"); } // Event handler 1 static void ShowMessage(string msg) { Console.WriteLine("Oddiy: " + msg); } // Event handler 2 static void ShowUpperCaseMessage(string msg) { Console.WriteLine("Katta harflarda: " + msg.ToUpper()); } } // natija Oddiy: Salom, Event ishladi! Katta harflarda: SALOM, EVENT ISHLADI! 
Enter fullscreen mode Exit fullscreen mode

👉 Ko‘rib turibsiz, bitta event sodir bo‘ldi, unga ikkita metod obuna bo‘ldi va ikkalasi ham ishladi.

Xulosa

Eventlar dasturdagi obyektlar o‘rtasida aloqa o‘rnatishning eng qulay yo‘li hisoblanadi. Ular yordamida kodni aniq, modulga ajratilgan va boshqarilishi oson tarzda yozish mumkin.

Top comments (0)