Помогите разложить в голове схему использования события, основанного на предоставляемом делегате 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())
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
стало интересно, как подключиться к базе данных SQL в Unity 3DЯ нашёл пару статей, что это необходимо делать через php, но так,как навыки в данном...
Есть класс и код, взаимодействующий с нимПри сборке возникают ошибки непонятно по какой причине - все модификаторы установлены как public