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();