Я реализует своего рода шаблон наблюдателя в C#, который выглядит следующим образом:Есть ли способ создать объявления с использованием дженериков в C#?
public delegate void MyEventOccurred(MyEventArg arg);
public interface IMyEventOccurred
{
void OnMyEventOccurred(MyEventArg arg);
}
class MyProviderClass
{
protected MyEventOccurred OnMyEventOccurredHandler;
public void AddMyEventOccurredHandler(MyEventOccurred handler)
{
OnMyEventOccurredHandler -= handler;
OnMyEventOccurredHandler += handler;
}
public void RemoveMyEventOccurredHandler(MyEventOccurred handler)
{
OnMyEventOcurredHandler -= handler;
}
}
Чтобы использовать этот класс, мы имеем следующее:
class MyObserverClass : IMyEventOccurred
{
void OnMyEventOccurred(MyEventArg arg)
{
// Handle my event
}
void StartObserving(MyProviderClass provider)
{
provider.AddMyEventOccurredHandler(OnMyEventOccurred);
}
void StopObserving(MyProviderClass provider)
{
provider.RemoveMyEventOccurredHandler(OnMyEventOccurred);
}
}
Я был бы заинтересован в комментариях народов о том, есть ли улучшения/лучшие способы выполнения/раскрытия этого шаблона, однако мой основной вопрос заключается в том, есть ли способ сделать все эти объявления общим способом, эквивалентным макросу, который я мог бы создать на C++.
Существует много кода, объявляющих это полностью общее, особенно именование.
В C++ я мог бы использовать макрос, чтобы объявить делегат и интерфейс, что-то вроде:
#define DECLARE_EVENT(eventName, eventArg) \
public delegate void eventName(eventArg arg); \
public interface I ## eventName \
{ \
void On ## eventName(eventArg arg); \
}
Это ясно, что это скрывает много того, что происходит, но он позволяет быстрее реализации, уменьшает количество ошибок и обеспечивает согласованность.
Есть ли эквивалентный способ упрощения реализации в C#?
Благодаря
Жюль
Yup, Наблюдаемый шаблон встроен в C# и подвергается мысленным событиям. https://msdn.microsoft.com/en-us/library/awbftdfh.aspx вам действительно не нужно реализовывать мероприятие с нуля, просто используйте тот, который предлагает язык –