Events

17/01/2009 - 21:14 von l.juenemann | Report spam
Hallo,

ich habe mich gerade mal mit Delagaten und Events beschàftigt. Bei den
Events habe ich jedoch ein Problem, wo ich nicht mehr weiterkomme.
Könnt ihr mir vielleicht mal helfen bzw. erklàren, was ich hierbei
verkehrt mache?
Hier meine Übung:

namespace EventBeispiel
{
class Program
{

static void Main(string[] args)
{
Counter c = new Counter();

c.Incremented += Counter.IncrementEventHandler
(CounterIncremented); <<<<< Fehler
c.Inc();
}

static void CounterIncremented(object source, EventArgs e)
{
Console.WriteLine("Counter erhöht");
}
}

public class Counter
{
int value = 0;

public delegate void IncrementEventHandler(object source,
EventArgs e);
public event IncrementEventHandler Incremented;

public void Inc()
{
value++;
Incremented(this, EventArgs.Empty);
}
}
}

Lothar
 

Lesen sie die antworten

#1 André Pönisch
17/01/2009 - 22:38 | Warnen spam
schrieb:
ich habe mich gerade mal mit Delagaten und Events beschàftigt. Bei den
Events habe ich jedoch ein Problem, wo ich nicht mehr weiterkomme.
Könnt ihr mir vielleicht mal helfen bzw. erklàren, was ich hierbei
verkehrt mache?



Hallo Lothar,

Events implementiere ich immer wie folgt:

public class Counter
{
private int value = 0;
private Eventhandler incrementEvent;

public event Eventhandler Incremented
{
add
{
incrementEvent += value;
}
remove
{
incrementEvent -= value;
}
}

private void OnIncrement()
{
if(incrementEvent != null)
{
increment(this, EventArgs.Empty);
}
}

public void Inc()
{
value++;
OnIncrement();
}
}

Also eigentlicher EventHandler privat, öffentliches Zugriffsattribut dafür,
private Auslösemethode.
Der einfache Eventhandler reicht für deinen Fall. Wenn du mal Daten über
das Event zurückgeben willst, dann implementier eine eigene
EventArgs-Klasse (muss von EventArgs abgeleitet sein) und benutze den
generischen Eventhandler (z.B. EventHandler<MyEventArgs>).

Einen Delegaten kannst du dann verwenden um das Event zu abonnieren. Für
die Implementation des Events selbst brauchst du keinen anlegen.

Grüße
André

Ähnliche fragen