Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Event sender Instanz per Reflection ermitteln, ohne dass der EventHandler gerade aufgerufen ist
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

Event sender Instanz per Reflection ermitteln, ohne dass der EventHandler gerade aufgerufen ist

beantworten | zitieren | melden

Hallo,

gibt es eine Möglichkeit zur Laufzeit z.B. mit Hilfe von Reflection die sender Instanz eines bestimmten Event Handlers herauszufinden?
Ich meine damit nicht während der Ausführung des Handlers, wo man ja ohnehin Zugriff hat.

Um die Handler Methode ggf. "künstlich" - also nicht durch den Event - auszuführen und dies entsprechend mit sinnvollen Parametern zu tun müsste ich zu diesem Zeitpunkt an der Stelle wo ich den Aufruf tätige über die entsprechende Information verfügen.

Also soetwas wie: Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..

Kennt ihr hier Wege?

Viele Grüße
P.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ltrader am .
Real programers do not comment their code.
It is hard to write and it should be hard to understand!
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7540
Herkunft: Waidring

beantworten | zitieren | melden

Hallo ltrader,

da ein Event mittels einer OnXXX-Methode gefeuert werden sollte, kannst du diese Methode auch direkt aufrufen.
Zitat
Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..
Es kann auch mehrere mögliche Instanzen geben, nimm nur ein GridView als Beispiel in der in jeder Zeile ein Button ist, somit scheidet dieser Weg aus. Dieser wäre ohnehin nicht gut.

Siehe auch [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo gfoidl,
Zitat
da ein Event mittels einer OnXXX-Methode gefeuert werden sollte, kannst du diese Methode auch direkt aufrufen.
kommt darauf an, an welcher Stelle der Aufruf erfolgen soll. Da die OnXxx-Methoden nach der Empfehlung protected sein sollen, kommt hier nur die Klasse selbst oder eine Unterklasse davon in Frage.


Hallo ltrader,
Zitat
Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..
die sender-Instanz steckt als Delegate.Target in dem Delegaten, der für die Registierung benutzt wird, kann also auch später aus dem Feld, das durch public event EventHandler MyEvent (mit)deklariert wird, ausgelesen werden, per Reflection auch von außerhalb der Klasse, ABER das ist in meinen Augen großer Mist.

EventHandler sollte man nie direkt (und auch nicht "künstlich") aufrufen. Wenn man eine bestimmte Funktionalität sowohl im EventHandler als auch an anderer Stelle benötigt, sollte man sie in eine separate Methode mit passenden Parametern auslagern und diese sowohl im EventHandler als auch an anderer Stelle aufrufen.

herbivore
private Nachricht | Beiträge des Benutzers
ltrader
myCSharp.de - Member



Dabei seit:
Beiträge: 60
Herkunft: Mannheim

Themenstarter:

beantworten | zitieren | melden

Hallo,
das mit dem Delegate.Target ist ein guter Wink, das hatte ich noch nicht probiert.
Zitat
[..] per Reflection auch von außerhalb der Klasse, ABER das ist in meinen Augen großer Mist.

Grundsätzlich ist das klar und ich habe auch nicht vor das im "normalen" Anwendungsfluss zu implementieren. Ich denke da vielmehr an einen Ansatz, der es mir ermöglicht mit deklarativen Elementen am Code der Anwendung Informationen zu loggen, der es erlaubt den Anwendungsfluss später automatisiert wieder auszuführen. Wichtig ist mir die in der Literatur oft als "Crosscuting concerns" von der eigentlichen Anwendungslogik zu trennen.

Um das zu erreichen bin ich auf der Suche nach geeigneten Werkzeugen

Grüße
ltader
Real programers do not comment their code.
It is hard to write and it should be hard to understand!
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7540
Herkunft: Waidring

beantworten | zitieren | melden

Hallo ltrader,

hast du in diesem Zusammenhang auch schon aspektorientierte Programmierung (AOP) probiert?

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers