Я придаю программе некоторую гибкость, поскольку ее назначение теперь изменилось. Я хочу добавить интерфейс, который будет реализовывать существующий класс.
Существующий класс
public class ClassA
{
#region Events
public delegate void DataReceivedHandler(object sender, EventArgs e);
public delegate void DataSentHandler(object sender, EventArgs e);
public delegate void StatusUpdatedHandler(object sender, EventArgs e);
public event DataReceivedHandler DataReceived;
public event DataSentHandler DataSent;
public event StatusUpdatedHandler StatusUpdated;
#endregion
//rest of code here...
}
Новый интерфейс
public interface IClassA
{
event EventHandler DataReceived;
event EventHandler DataSent;
event EventHandler StatusUpdated;
//rest of code here...
}
Мои три вопроса следующие.
Q1. Прав ли я, во-первых, объявлять своих собственных делегатов в классе, т.е. public delegate void DataReceivedHandler
, или они должны быть удалены, а события заменены обычным EventHandler. т.е. public event EventHandler DataReceived
. Учитывая, что эти события не передают данные вместе с событием, просто уведомляют все, кто подписан, что-то изменилось.
Q2. Тесно связан с вопросом выше. Учитывая, что я изменяю свойства класса, то есть статус (StatusUpdated). Рекомендуется ли передавать новое состояние как пользовательские EventArgs, что требует специального делегата, как в исходном коде? Поскольку это в настоящее время работает, событие инициируется, и подписанный класс может просто использовать значение отправителя, то есть (отправитель как ClassA) .Status. Есть ли лучшая практика или дело только за разработчиком?
Q3. Теперь это не так. Часть об интерфейсе. Правильно ли я объявил DataReceived и другие события в интерфейсе для соответствия классу, который будет помечен как реализующий его.