Захватив код моего босса, который является сервис-ориентированной архитектурой, у меня есть интерфейс, подобный приведенному ниже:
namespace MyCompany.Namespace
{
delegate void DataEvent(string id, IDataFrame frame);
delegate void LogMessage(MessageType type, string id, string message);
delegate void ReadyStateChanged(string id, Device state);
interface IDeviceService
{
void Trigger();
void Start();
void Stop();
event DataEvent NewDataFrame;
event LogMessage LogMessage;
event ReadyStateChanged StateChanged;
void ChangeState(Device newState);
// other method stubs
}
}
Этот интерфейс используется для создания службы устройств, которая использует делегатов для передачи событий назад. и далее из отдельного потока в главный объект в другом потоке. Я хотел бы построить другой сервис, который использует аналогичную модель. Я считаю, что новый сервис должен быть основан на другом интерфейсе, поэтому мне придется создать другой интерфейс. Мне бы хотелось, чтобы новый интерфейс использовал те же делегаты, что и выше, но, поскольку вышеупомянутые делегаты определены вне интерфейса, в общем пространстве имен, я не могу переопределить их (это имеет смысл).
Если Я хотел бы, чтобы два (или более) интерфейса в одном пространстве имен могли использовать одни и те же делегаты, что мне делать? Могу ли я создать «суперинтерфейс», в котором хранятся делегаты? Или суперкласс, у которого есть делегаты? Может быть, существует лучший дизайн?