Sobes.tech
Junior — Middle

Delegat va voqea o'rtasidagi farqni qanday ajratish mumkin va ularning asosiy farqlari nima?

sobes.tech AI

AIdan javob

C# tilida delegat ma'lum bir imzoga ega metodga havolani ifodalaydigan turdir. Delegatlar metodlarni bilvosita chaqirishga imkon beradi, ularni parametr sifatida o'tkazish yoki keyinchalik chaqirish uchun saqlash mumkin.

Voqea - bu delegatlarga asoslangan mexanizm bo'lib, u obuna bo'lganlarga harakat yoki holat o'zgarishini bildirish uchun ishlatiladi. Voqea delegatni inkapsulyatsiya qiladi va unga kirishni cheklaydi: obunachilar faqat handlerlarni qo'shish yoki olib tashlashlari mumkin, lekin voqeani to'g'ridan-to'g'ri chaqolmaydi.

Asosiy farqlar:

  • Delegat tur, voqea esa delegatni ishlatadigan sinf a'zosi.
  • Delegat to'g'ridan-to'g'ri chaqirilishi mumkin, voqea esa (voqeani chaqirish faqat uning e'lon qilingan sinf ichida mumkin).
  • Voqea inkapsulyatsiya va xavfsizlikni ta'minlaydi, tashqaridan tasodifiy handler chaqiruvlarini oldini oladi.

Misol:

public delegate void Notify(string message); // delegat

public class Process
{
    public event Notify ProcessCompleted; // voqea

    public void Start()
    {
        // ... jarayonni boshlash
        OnProcessCompleted("Jarayon yakunlandi");
    }

    protected virtual void OnProcessCompleted(string msg)
    {
        ProcessCompleted?.Invoke(msg); // voqeani chaqirish
    }
}

// Foydalanish:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // obuna bo'lish
process.Start();