Sobes.tech
Junior — Middle

Делегатты жана окуяны кантип айырмалоо керек жана алардын негизги айырмачылыктары кандай?

sobes.tech AI

AIден жооп

C# тилинде делегат — белгилүү бир синтаксиске ээ методуна шилтемени көрсөтүүчү түр. Делегаттар методу аралыкча чакырууга мүмкүндүк берет, аны параметр катары өткөрүү же кийинки чакырууга сактоо аркылуу.

Окуя — делегаттарга негизделген механизм, ал катталгандарга кандайдыр бир иш-аракет же абал өзгөрүүсү тууралуу кабарлоо үчүн колдонулат. Окуя делегатты капсуляциялайт жана ага жетүүнү чектейт: катталгандар гана иштетүүчү түзөтө алышат же алып салышат, бирок түздөн-түз чакыра алышпайт.

Негизги айырмачылыктар:

  • Делегат — түр, окуя — класстын мүчөсү, ал делегатты колдонуп жатат.
  • Делегатты түздөн-түз чакырса болот, окуяны — жок (окияны чакыруу гана анын жарыяланган класста мүмкүн).
  • Окуя капсуляция жана коопсуздукту камсыздайт, сырттан кездейсоқ иштетүүчүлөрдүн чакыруусун алдын алат.

Мисал:

public delegate void Notify(string message); // делегат

public class Process
{
    public event Notify ProcessCompleted; // окуя

    public void Start()
    {
        // ... процесстин аткарылышы
        OnProcessCompleted("Процесс аяктады");
    }

    protected virtual void OnProcessCompleted(string msg)
    {
        ProcessCompleted?.Invoke(msg); // окуяны чакыруу
    }
}

// Колдонуу:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // жазылуу
process.Start();