Feedback

C# - Delegate (Events)

Veröffentlicht von am 4/20/2006
(6 Bewertungen)
Auslösen eines Events
//Ein Delegate beschreibt, wie eine Funktion aufgerufen
//wird! (Eine Klasse von Funktion!)
public delegate void NeuerEventHandler();
//Es können auch Variable übergeben werden
public delgate void NeuerEventHandler2(string EineVariable);


//Event anlegen
public event NeuerEventHandler EventNeu;

public event NeuerEventHandler2 EventNeu2;


private void Button_Click(object sender, EventArgs e)
{
  //Auslösen des Events
  if (EventNeu != null)
    EventNeu();

  if (EventNeu != null)
    EventNeu(EineVariable);
}

//*********************************************************
//Diese Methode wird automatisch durch ein Doppelklick in
//Ereignisse des jeweiligen Controls (z.B. ein UserControl),
//was dieses Event beinhaltet, erzeugt.
private void EventNeu()
{
  //Hier können nun die Aktionen stehen, die das Event
  //bewirken sollen
}
private void EventNeu(string EineVariable)
{
  //Hier können nun die Aktionen stehen, die das Event
  //bewirken sollen
}

Abgelegt unter Event, Delegate.

2 Kommentare zum Snippet

AKR schrieb am 5/29/2006:
So ein Unfug... wer events nicht richtig verstanden hat, der sollte auch kein Snippet schreiben...

Der Code oben kann nicht compiliert werden, weil Event einmal ein event sein soll und ein zweites mal als private void Methode deklariert wird.
So funktionieren auch keine Events.

Vielleicht erst noch mal in einem gescheiten Buch nachlesen?
Elvis schrieb am 10/24/2006:
Um mich meinem Vorredner anzuschließen (nur nicht ganz so destruktiv ;-) ).

Delegates sind immutable, d.h. wenn jemand eine weitere Instanz in die Liste packt wird eine neue Instanz des zugewiesenen Events angelegt.
Zwischen der Prüfung gegen null und dem Ausführen kann die Instanz also zu null geändert werden!

Das hier:
  //Auslösen des Events
if (EventNeu != null)
EventNeu();

Hätte so aussehen müssen:
  SomeDelegateType someEvent = this.SomeEvent;

//Auslösen des Events
if (someEvent != null)
someEvent();


Vielleicht sollte man das auch den Typen erklären, die die .Net SDK Docs schreiben. *g*
 

Logge dich ein, um hier zu kommentieren!