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:
- Delegatlar nima va qanday ishlatiladi
- Eventlar yordamida hodisalarni kuzatish
- 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!");
}
}
//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; }
}
🔹 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!
👉 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)