Junior
C# да окуялар эмне?
sobes.tech AI
AIден жооп
C#тогу окуялар — бул "наблюдатель" (Observer Pattern) үлгүсүнө негизделген механизм, ал объектке (жариялаганга) башка объекттерге (катталуучуларга) белгилүү бир иш-аракет же абал өзгөрүүсү тууралуу кабарлоого мүмкүндүк берет.
Негизги компоненттер:
- Жариялаган (Publisher): Окуяны жарыялай турган класс.
- Окуя (Event):
eventачкыч сөзү колдонулуп жарыяланат. Ал иштетүүчү методдун сигнатурасын аныктайт. - Делегат (Delegate): Оюнчулардын сигнатурасын аныктай турган түр. Көп учурда алдын ала аныкталган
EventHandlerжеEventHandler<TEventArgs>колдонулат. - Катталуучу (Subscriber): Жариялаганга катталган класс же объект жана окуя иштетүүчү методду камсыз кылат, ал окуя ишке ашканда чакырылат.
- Окуя иштетүүчү (Event Handler): Катталуучунун методу, ал окуя делегатынын сигнатурасына ылайык келет.
Мисал жарыялоо жана колдонуу:
// Делегатты жарыялоо, эгер алдын ала аныкталган `EventHandler` колдонулбаса
public delegate void MyEventHandler(object sender, EventArgs e);
// Жариялаган класс
public class Publisher
{
// Делегатты колдонуп окуяны жарыялоо
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Окуяны чакыруу (эгер катталуучулар болсо)
OnMyEvent(EventArgs.Empty);
}
// Окуяны чакыруучу метод (nullден корголгон)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Катталуучу класс
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Окуяга катталуу
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Окуядан чыгуу
publisher.MyEvent -= HandleMyEvent;
}
// Окуя иштетүүчү
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Окуя ишке ашты!");
}
}
// Колдонуу мисалы
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Катталуу
pub.DoSomething(); // Окуяны чакыруу
sub.Unsubscribe(pub); // Чыгуу (кызматтык)
}
}
Окуялар объекттердин алсыз байланышын камсыздайт, бул алардын бири-бири менен өз ара аракеттенүүсүнө мүмкүндүк берет, түздөн-түз бири-биринин ишке ашырылышы жөнүндө билишпестен.