Hallo zusammen
Mich würde sehr interessieren wie eigentlich ein Eventsystem auf C++ Ebene genau funktioniert bzw. wie wurde diese Klassen im .NET-Framework implementiert? Ich habe zwar im Internet recherchiert, aber ein wirklich gute Erklärung fand ich keine.
Läuft da zum Beispiel einfach eine Endlosschleife in einem Thread, der zusätzlich eine List mit allen angemeldeten Events enthält und anschliessend auf Hardwareebene einen Interrupt auslöst?
Über eine Erklärung oder einen geeigneten Link würde ich mich sehr freuen =)
LG Samuel
Also wie genau es implementiert ist weiss ich natürlich nicht, aber generell ist es folgendermaßen:
Du erstellt ein Delegate mit bestimmten Parametern. Z.B. object und EventArgs um mal ein Beispiel zu nennen. Nun legst du ein Event vom Typen des Delegates an. Wenn ein Event abonniert wird, dann wird quasi nur ein Eintrag zu einer Liste hinzugefügt, was man auch an dem += erkennen kann. Wenn jetzt innerhalb der Klasse ein Aufruf SomeEvent(this, new EventArgs()) getätigt wird passiert prinzipiell folgendes:
void SomeEvent(object sender, EventArgs e) {
foreach(eventHandler in AnyEvent) {
eventHandler.call(sender, e);
}
}
Also ist ein Event eigentlich nur eine Liste und ein Aufruf gibt die Parameter an alle Elemente der Liste weiter.
Ich würde mal salopp sagen es basiert schlichtweg auf dem Observerpattern oder ? Oder war das gar nicht deine Frage ?
hat erstmal nichts mit hardware und interrupt zu tun.
also, die windowsfenster bekommen windowsmessages. woher die kommen, ist der anwendung egal. mache beruhen auf harwareinterrupts, manche nciht.
ein event ist in c# ein multicastdelegate. kannst du dir als array von functionpointern vorstellen. tritt ein event auf, wird jeder delegat in diesem array aufgerufen (der reihe nach)
designed ist ein event nach dem ObserverPattern.
generell hat jede winformsanwendung (wpf vermutlich auch) eine nachrichtenschleife, die sich um das erhalten und weiterleiten der windowsmessages kümmert.
alles soweit klar?
Hallo
Vielen Dank für eure Antworten.
Es sollte soweit klar sein =)
LG Samuel