Laden...

Problem mit Events

Erstellt von EL_Broto vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.218 Views
E
EL_Broto Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren
Problem mit Events
abstract class Base{
        ....
        public delegate void LoginDone();
        public event LoginDone OnLoginDone;
        ....
}

class Bla: Base {
        protected override void Irgendwas(){
                if(OnLoginDone != null){
                        OnLoginDone();
                }
        }
}

Jetzt bekomm ich den error

Fehler 1 Das Ereignis "Test.Base.OnLoginDone" kann nur links von += oder -= stehen (es sei denn, es wird innerhalb des Typs "Test.Base" verwendet).

was ist an meinem code falsch?

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo El_Broto,

du kannst das Event nicht direkt aufrufen.
also OnLoginDone() funzt nicht.

Das musst du dann also so machen


proteced void Irgendwas()
{
  LoginDone _OnLoginDone = OnLoginDone;

  if (_OnLoginDone != null)
      _OnLoginDone();
}

So müsste es also passen.

Gruss
Michael

5.742 Beiträge seit 2007
vor 15 Jahren

Hallo EL_Broto,

in Zukunft bitte auch die FAQs beachten. In diesen stehen neben der Lösung von michlG auch noch weitere Hinweise, z.B. warum diese Lösung die beste darstellt.

[FAQ] Eigenen Event definieren / Information zu Events

E
EL_Broto Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren

Irgendwie gefällt mir da das Event-Modell in Java mehr, in C# muss ich zuerst nen Delegaten, dann ein Event und dann das Event noch mal als Member deklarieren oO^^

5.742 Beiträge seit 2007
vor 15 Jahren

in C# muss ich zuerst nen Delegaten, dann ein Event und dann das Event noch mal als Member deklarieren

Einen eigenen Delegaten muss man in etwa 90% der Fälle nicht definieren - hier reicht EventHandler bzw. EventHandler<T>, wenn man benutzerdefinierte EventArgs verwenden möchte.
Dass man in Java das Event selbst nicht deklarieren muss, kann ich mir nicht vorstellen.
Die zusätzliche Methode wird ja auch nur in Verbindung mit Vererbung benötigt. Andernfalls ist sie genaugenommen lediglich eine Stilfrage.

Und korrigiere mich, wenn ich falsch liege, aber Java bietet meines Wissens nach keine Delegaten. Stattdessen muss man für jeden "Delegaten" eine eigene Klasse definieren (evtl auch anonym).

Es kann also sein, dass das Modell von Java leichter zu verstehen ist; das von C# ist aber IMHO deutlich machtvoller.

E
EL_Broto Themenstarter:in
55 Beiträge seit 2008
vor 15 Jahren

Ich hab in den Wikibooks n tutorial zu events gelesen, da wird das Event nicht mehr deklariert oO
dass das Modell in C# machtvoller ist weis ich, aber in c# hab ich mit events relativ wenig bis jetzt gemacht, von daher auch das unverständnis 🙂

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo EL_Broto,

ein Event sollte nie mit On beginnen. Das On ist der event-auslösenden Methode vorbehalten. Alles weitere - verständnisfördernde - in der schon genannten FAQ: [FAQ] Eigenen Event definieren / Information zu Events.

herbivore