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)