Помогите разложить в голове схему использования события, основанного на предоставляемом делегате EventHandler на примере простой задачи(видел похожий вопрос на этом сайте, но там использовался какой-то кастомный делегат и было мало чего понятно).
Допустим, есть класс Doctor, у него есть поле - фамилия и номер кабинета, в котором он принимает, а есть класс Patient, у которого есть поле фамилия и номер палаты, где он лежит.
Задача: при изменении номера кабинета врача оповещать об этом пациента(можно просто текстовым сообщением).
class Doctor
{
public event EventHandler ChangedInCabinetNumber = delegate { };
public string Surname { get; private set; }
ushort cabinetNumber;
public ushort CabinetNumber
{
get => cabinetNumber;
private set
{
cabinetNumber = value;
}
}
public Doctor(string surname, ushort cabinetNumber)
{
Surname = surname ?? throw new ArgumentNullException(nameof(surname));
CabinetNumber = cabinetNumber;
}
}
class Patient
{
public string Surname { get; private set; }
public ushort CabinetNumber { get; private set; }
public Patient(string surname, ushort cabinetNumber)
{
Surname = surname ?? throw new ArgumentNullException(nameof(surname));
CabinetNumber = cabinetNumber;
}
}
Просто, создайте у Patient обработчик события:
void ChangeCabinetNumber(object o,EventArgs args)
{
//Что-то сделать
}
и подпишете его на Doctor.ChangedInCabinetNumber:
doc.ChangedInCabinetNumber+=pat.ChangeCabinetNumber;
Это код должен быть в каком-нибудь Main, когда вы создаете объекты докторов и пациентов.
В сеттере свойства Doctor.CabinetNumber дергайте ChangedInCabinetNumber если есть подписчики.
public ushort CabinetNumber
{
get => cabinetNumber;
private set
{
cabinetNumber = value;
ChangedInCabinetNumber?.Invoke(this,new EventArgs())
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости