Junior — Middle
Kā atšķirt deleģētu no notikuma un kādas ir to galvenās atšķirības?
sobes.tech AI
Atbilde no AI
C# valodā deleģēts ir tips, kas pārstāv atsauci uz metodi ar noteiktu parakstu. Deleģēti ļauj netieši izsaukt metodes, nododot tās kā parametrus vai saglabājot turpmākai izsaukšanai.
Notikums ir mehānisms, kas balstīts uz deleģētiem, un tas tiek izmantots, lai paziņotu abonentiem par kāda darbības vai stāvokļa izmaiņu. Notikums inkapsulē deleģētu un ierobežo piekļuvi tam: abonenti var tikai pievienot vai noņemt apstrādātājus, bet tieši izsaukt notikumu nevar.
Galvenās atšķirības:
- Deleģēts ir tips, notikums ir klases loceklis, kas izmanto deleģētu.
- Deleģētu var tieši izsaukt, notikumu — nē (notikuma izsaukšana ir iespējama tikai tajā klasē, kurā tas ir deklarēts).
- Notikums nodrošina inkapsulāciju un drošību, novēršot nejaušus ārējos izsaukumus.
Piemērs:
public delegate void Notify(string message); // deleģēts
public class Process
{
public event Notify ProcessCompleted; // notikums
public void Start()
{
// ... procesa izpilde
OnProcessCompleted("Processa pabeigta");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // notikuma izsaukums
}
}
// Lietošana:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // abonēšana
process.Start();