Brandereignis, wenn eine Eigenschaft oder Variable ihren Wert ändert
Ich möchte einem Projekt, das eine Reihe von Klassen verwendet, die im NET Framework gepackt sind, mehr Funktionen hinzufügen. Dieselben Klassen bieten eine Reihe von Eigenschaften, die sehr nützlich sein können, um die Funktionalität meines Projekts anzupassen. Eine Sache, die diesen Klassen jedoch fehlt, ist Events.
Wenn jede Eigenschaft ein geeignetes Ereignis hätte, das ausgelöst würde, wenn sich der Wert dieser Eigenschaft ändert, könnte ich einen Ereignishandler zuweisen, der auf der Grundlage dieses Eigenschaftswerts agiert.
Ich habe unten ein Musterbeispiel angefertigt, um mein Ziel so einfach wie möglich darzustellen.
Beispiel fall:
DasSystem.Net.Sockets.Socket
Klasse (Socket auf MSDN Docs) hat eine Eigenschaft namensConnected
Dies gibt grundsätzlich true zurück, wenn der Socket mit einem angegebenen Endpunkt verbunden ist, andernfalls false.
Was ich erreichen möchte, ist einfach. Ich möchte diese Eigenschaft unter "Beobachtung" halten und wenn sich der Wert ändert, ein Ereignis auslösen.
Wenn ich das in einer meiner eigenen Klassen mache, wäre es einfach, wenn auch ein bisschen mühsam, das zu benutzenINotifyPropertyChanged-SchnittstelleWeil mein Code immer den Wert der Eigenschaft änderte, musste ich das Ereignis manuell auslösen. Leider kann meines Wissens nicht einmal ein derartiges Verfahren auf das Bestehende angewendet werdenSocket
Klasse innerhalb von NET Framework verteilt.
Nun, diese Frage wird ziemlich umfangreich, tut mir leid, aber ich hoffe, sie hat einen Einblick in mein Ziel gegeben.
Nun, um es einfach auszudrücken, ich möchte das sehenConnected
Eigentum derSocket
Klasse und wenn sich der Wert ändert, ein Ereignis auslösen. Und wenn es möglich wäre, einen solchen Ansatz auch zum Beobachten von Variablen und Eigenschaften zu verwenden, wäre dies nicht nur für mich, sondern für alle, die über diese Frage zu SO stolpern, fantastisch.
Ein einfacher und leichter Ansatz wird natürlich bevorzugt, aber vor allem möchte ich verstehen, wie dies getan werden kann, damit ich ihn in Zukunft in großem Maßstab auf andere Klassen anwenden kann.
Mir ist klar, dass ich viel frage. Danke vielmals.
Bei Fragen einfach fragen.