Sobes.tech
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();