![]() |
Ereignisse in C#
Ich habe es jetzt geschaft in C# eine Klasse zu schreiben die in einer Methode ein Ereignis auslöst. Und ich habe es geschaft auf dieses Ereignis zu reagieren.
Die Klasse mit dem Ereignis:
Code:
Der Code, in dem die Klasse genutzt wird:
class DemoCls
{ public delegate void OnCountDelegate(int number); public event OnCountDelegate OnCount; public void Count(int from, int to) { for (int i = from; i < to; i++) OnCount(i); } }
Code:
Das funktioniert wunderbar so wie es soll. Aber kann mir mal bitte jemand sagen, was ich da eigentlich genau mache?
private void MyOnCount(int number)
{ listBox1.Items.Add(number.ToString()); } private void btnStart_Click(object sender, EventArgs e) { DemoCls demo = new DemoCls(); demo.OnCount += new DemoCls.OnCountDelegate(MyOnCount); demo.Count(1, 100); } |
Re: Ereignisse in C#
Code:
definiert einen Typensicheren Methodenzeiger...
public delegate void OnCountDelegate(int number);
Code:
definiert das eigentliche Event in der Klasse, das ist wie eine Property, nur eben als event (:D)
public event OnCountDelegate OnCount;
Code:
ruft das Event OnCount auf. (du solltest noch abfragen, ob OnCount != null und erst dann aufrufen)
for (int i = from; i < to; i++)
OnCount(i); mit
Code:
weist du dem OnCount-Event eine neue Methode zu, die dann aufgerufen werden soll. dieses doofe
demo.OnCount += new DemoCls.OnCountDelegate(MyOnCount);
Code:
brauch man, damit C# merkt, dass man die methode in einen delegaten (sicheren methodenzeiger) wandeln will...
new DemoCls.OnCountDelegate
|
Re: Ereignisse in C#
Aha, da wird doch schon einiges klarer.
Könnte man auch ohne den Delegaten auskommen oder ist der ein MUSS unter C#? Zitat:
Habe ich schon gemacht, nach dem es einmal gekracht hat, als ich die Zuweisung zu einer Methode mal auskommentiert hatte. :mrgreen: |
Re: Ereignisse in C#
Zitat:
Reichen dir die bestehenden delegate Typen bist du doch fein raus. Wenn nicht ist es nun wirklich kein Problem einen anzulegen. ;) @phXql Du vertauschst die Benennung der einzelnen Dingsens. Sieht eher nach dem alten Delphi-Standard aus... OnXXX wird höchstens die Methode benannt, die du intern benutzt um den Event zu feuern... Um deinen Bleistift mal in eine Form zu bringen, die in .Net üblich ist:
Code:
public delegate void CountEventHandler(object sender, int items);
Code:
class DemoCls
{ public event CountEventHandler Count; protected virtual OnCount(int items) { if(Count != null) Count(this, items); } |
Re: Ereignisse in C#
Zitat:
Nun ja, natürlcih sieht das nach Delphi aus, rat mal, was ich die letzen 4 Jahre gemacht habe? ;) |
Re: Ereignisse in C#
Aso Luckie.. worüber ich am Anfang immer gestolpert bin, weil das bei Delphi arg unüblich ist: Du kannst einem Event mehrere Routinen zuweisen (deswegen += ).
|
Re: Ereignisse in C#
Jupp, das kam mir auch komisch vor. ;)
|
Re: Ereignisse in C#
Zitat:
|
Re: Ereignisse in C#
Zitat:
Da das eine ziemlich nervige Geschichte ist, sollte man sich in Delphi32 genau überlegen, ob man wirklich einen "Event" in seine Klasse packen will oder schreibintensivere Lösungen nicht sicherer sind. |
Re: Ereignisse in C#
Finde, MutliCast-Events sind eine sehr schöne Sache. Schreibe gerade eine Anwendung, die auch Plugins unterstützen soll. Bei MultiCast-Events kann sich jedes Plugin einfach auch noch "in die Liste eintragen", wenn es auf ein Ereignis reagieren will :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz