Junior — Middle
Vəkil və hadisə arasındakı fərqi necə ayırmaq və onların əsas fərqləri nədir?
sobes.tech Süni İntellekt
AI-dan cavab
C# dilində delegat müəyyən bir imzaya malik metodun istinadını təmsil edən tirdir. Delegatlar metodları dolayı yolla çağırmağa imkan verir, onları parametrlər kimi ötürməklə və ya sonrakı çağırış üçün saxlamaqlə.
Hadisə isə, delegatlara əsaslanan mexanizmdir və abunəçilərə hərəkət və ya vəziyyət dəyişiklikləri barədə məlumat vermək üçün istifadə olunur. Hadisə delegatı inkapsulyasiya edir və ona girişə məhdudiyyət qoyur: abunəçilər yalnız idarəediciləri əlavə və ya silə bilər, lakin hadisəni birbaşa çağırmaq mümkün deyil.
Əsas fərqlər:
- Delegat tirdir, hadisə isə delegat istifadə edən sinif üzvüdür.
- Delegat birbaşa çağırıla bilər, hadisə isə yox (hadisənin çağırılması yalnız elan olunduğu sinif daxilində mümkündür).
- Hadisə inkapsulyasiya və təhlükəsizlik təmin edir, xaricdən idarəedicilərin təsadüfi çağırışlarını qarşısını alır.
Nümunə:
public delegate void Notify(string message); // delegat
public class Process
{
public event Notify ProcessCompleted; // hadisə
public void Start()
{
// ... prosesin icrası
OnProcessCompleted("Proses tamamlandı");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // hadisənin çağırılması
}
}
// İstifadə:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // abunəlik
process.Start();