Вы можете выставить событие, на которое могут подписаться потребители.Вот общий порядок действий такого рода:
Вы можете создать свой собственный класс для переноса данных о событии:
public class NotificationEventArgs : EventArgs
{
public NotificationEventArgs(string message)
{
Message = message;
}
public string Message { get; }
}
Затем вы создаете делегат для представления подписи.события:
public delegate void OnNotificationEventHandler(SomeClass sender, NotificationEventArgs args);
Ваш класс или классы могут затем представить этого делегата как событие:
public class SomeClass
{
private OnNotificationEventHandler _notificationEventHandler;
public event OnNotificationEventHandler OnNotification
{
add { _notificationEventHandler += value; }
remove { _notificationEventHandler -= value; }
}
protected void RaiseNotificationEvent(NotificationEventArgs args)
{
_notificationEventHandler?.Invoke(this, args);
}
public void SomeMethod()
{
//Your class does something that requires consumer notification
var args = new NotificationEventArgs("Something happened!");
//Raise the event for the consumers who are listening (if any)
RaiseNotificationEvent(args);
}
}
Наконец, ваши потребляющие классы подпишутся на это событие:
SomeClass obj = new SomeClass();
obj.OnNotification += Obj_OnNotification;
private static void Obj_OnNotification(SomeClass sender, NotificationEventArgs args)
{
//Handle the notification from the class here.
Console.WriteLine(args.Message);
}
Общая идея заключается в том, что потребители вашего класса должны знать только, что что-то произошло, а также подробности того, что произошло.То, как это событие используется, обрабатывается или отображается, не является ответственностью вашего компонента.