Ich habe eine Art Beobachter-Muster in C# Implementierung geht das wie folgt aus:Gibt es eine Möglichkeit, Deklarationen mit Generics in C# zu erstellen?
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;
}
}
dieser Klasse verwenden wir folgendes haben:
class MyObserverClass : IMyEventOccurred
{
void OnMyEventOccurred(MyEventArg arg)
{
// Handle my event
}
void StartObserving(MyProviderClass provider)
{
provider.AddMyEventOccurredHandler(OnMyEventOccurred);
}
void StopObserving(MyProviderClass provider)
{
provider.RemoveMyEventOccurredHandler(OnMyEventOccurred);
}
}
ich in Völker Kommentare Interesse hätte ob es Verbesserungen/bessere Möglichkeiten gibt, dieses Muster zu implementieren/verfügbar zu machen, meine Hauptfrage ist jedoch, ob es einen Weg gibt, all diese Deklarationen auf generische Weise zu machen, äquivalent zu einem Makro, das ich in C++ erstellt habe.
Es gibt eine Menge Code bei der Erklärung dieser, die vollständig generisch ist, vor allem die Benennung.
In C++, ich könnte ein Makro verwenden, um die Delegierten und die Schnittstelle, so etwas wie zu erklären:
#define DECLARE_EVENT(eventName, eventArg) \
public delegate void eventName(eventArg arg); \
public interface I ## eventName \
{ \
void On ## eventName(eventArg arg); \
}
Es ist klar, dass dies verbirgt sich eine Menge von dem, was vor sich geht, aber es schneller Implementierung erlaubt, Fehler reduziert und erzwingt Konsistenz.
Gibt es eine gleichwertige Möglichkeit, die Implementierung in C# zu vereinfachen?
Dank
Jules
Yup, das beobachtbare Muster ist in C# und exponierte Gedankenereignisse eingebaut. https://msdn.microsoft.com/en-us/library/awbftdfh.aspx Sie müssen nicht wirklich das Ereignis von Grund auf neu implementieren, verwenden Sie einfach das, das die Sprache bietet –