AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignisse in C#

Ein Thema von Luckie · begonnen am 24. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Ereignisse in C#

  Alt 24. Feb 2006, 14:34
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:
    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);
        }
    }
Der Code, in dem die Klasse genutzt wird:
Code:
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);
        }
Das funktioniert wunderbar so wie es soll. Aber kann mir mal bitte jemand sagen, was ich da eigentlich genau mache?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#2

Re: Ereignisse in C#

  Alt 24. Feb 2006, 14:57
Code:
public delegate void OnCountDelegate(int number);
definiert einen Typensicheren Methodenzeiger...

Code:
public event OnCountDelegate OnCount;
definiert das eigentliche Event in der Klasse, das ist wie eine Property, nur eben als event ()

Code:
for (int i = from; i < to; i++)
   OnCount(i);
ruft das Event OnCount auf. (du solltest noch abfragen, ob OnCount != null und erst dann aufrufen)

mit
Code:
demo.OnCount += new DemoCls.OnCountDelegate(MyOnCount);
weist du dem OnCount-Event eine neue Methode zu, die dann aufgerufen werden soll. dieses doofe
Code:
new DemoCls.OnCountDelegate
brauch man, damit C# merkt, dass man die methode in einen delegaten (sicheren methodenzeiger) wandeln will...
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Ereignisse in C#

  Alt 24. Feb 2006, 15:01
Aha, da wird doch schon einiges klarer.

Könnte man auch ohne den Delegaten auskommen oder ist der ein MUSS unter C#?

Zitat:
du solltest noch abfragen, ob OnCount != null und erst dann aufrufen

Habe ich schon gemacht, nach dem es einmal gekracht hat, als ich die Zuweisung zu einer Methode mal auskommentiert hatte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Ereignisse in C#

  Alt 24. Feb 2006, 15:49
Zitat von Luckie:
Könnte man auch ohne den Delegaten auskommen oder ist der ein MUSS unter C#?
Wie in Delphi auch: brauchst du etwas, dass eine Referenz auf die Methoden halten kann, die du dem Event zuweisen willst.
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);
  }
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Ereignisse in C#

  Alt 24. Feb 2006, 16:09
Zitat von Elvis:
@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...
Da vertauscht du aber was. Nämlich phXql mit mir.

Nun ja, natürlcih sieht das nach Delphi aus, rat mal, was ich die letzen 4 Jahre gemacht habe?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.610 Beiträge
 
#6

Re: Ereignisse in C#

  Alt 24. Feb 2006, 19:10
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 += ).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Ereignisse in C#

  Alt 24. Feb 2006, 19:16
Jupp, das kam mir auch komisch vor.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#8

Re: Ereignisse in C#

  Alt 25. Feb 2006, 11:43
Zitat von Phoenix:
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 += ).
Nur wenns ein Multicast-Event ist.. Allerdings gibts SingleCast-Events gar nicht mehr in .NET 1.1 / 2.0
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Ereignisse in C#

  Alt 25. Feb 2006, 12:18
Zitat von phXql:
Nur wenns ein Multicast-Event ist.. Allerdings gibts SingleCast-Events gar nicht mehr in .NET 1.1 / 2.0
Aus gutem Grund: einen schnöden Funktionszeiger würde der nächste, der benachrichtigt werden will einfach überschreiben...

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.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#10

Re: Ereignisse in C#

  Alt 25. Feb 2006, 12:42
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
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz