Was bringen events?
-
Folgender Code:
// ---------- Delegate ---------- public delegate void MeasureErrorEventHandler(); public class Circle : IDisposable { // ---------- Ereignis ---------- public event MeasureErrorEventHandler MeasureError; ... } kreis.MeasureError += new MeasureErrorEventHandler(RadiusError); public class Program { static Circle kreis; static void Main(string[] args) { kreis = new Circle(); ... } public static void RadiusError() { Console.WriteLine("Unzulässiger negativer Radius."); Console.Write("Neueingabe: "); kreis.Radius = Convert.ToDouble(Console.ReadLine()); } }
Der Code ist nicht vollständig aber ich hoffe, ihr wisst was gemeint ist!
Wozu extra ein delegate und events und was weiß ich noch verwenden?
Man könnte esdoch gleich so machen:public double Radius { get{return radius;} set{ if(value >= 0) radius = value; else { Console.WriteLine("Unzulässiger negativer Radius."); Console.Write("Neueingabe: "); kreis.Radius = Convert.ToDouble(Console.ReadLine()); } } }
Also meine Frage ist für was man extra events und delegates usw verweden sollte um eine ErrorMessage auszugeben ?
(http://openbook.galileocomputing.de/visual_csharp/visual_csharp_04_005.htm#mjaac8ca2b4790b385f4ff038a02cb3000) habe das von hier
-
Hast du schon mal etwas von Exceptions gehört?
-
kann bitte einer meine Frage beantworten?
-
Sollte man nicht, für Fehler sind Exceptions da oder hast du schon mal irgendeine Klasse von MS gesehen, die für Fehlermeldungen Events benutzt?
-
im Buch wird das aber so gemacht!
-
Ohne mir deinen Link angesehen zu haben scheint es darum zu gehen, das jeder von außen Code einhängen kann, der im Fehlerfall ausgeführt wird (@O.o aber ohne Stackunwinding wie bei Exceptions).
Wenn ich das Errorhandling direkt mit in den Setter reinpacke, wie du es vorschlägst, geht genau das nicht.
Dadurch das du da das Event hast kann jetzt jeder der den Code benutzt selbst entscheiden, wie im Fall eines ungültigen wertes gehandelt werden soll. Er kann einen Handler dranhängen, der wie deiner, auf die Konsole loggt, oder aber einen, der in eine Datei loggt, oder einen der 'ne Exception wirft, oder oder oder.
-
Dieser Code bestätigt nur mal wieder, dass die GalileoComputing-Bücher qualitativ einiges zu wünschen übrig lassen.
-
Für Error-Handling ist es vermutlich eine schlechte Idee. Es mag Spezielfälle geben wo es Sinn macht, aber das so allgemein als Lösung vorzuschlagen halte ich für doof (vor allem: Lösung für welches Problem überhaupt?).
Beim Logging könnte es z.B. nützlich sein, um eine Komponente, die haufenweise Informationen rausloggen kann, von der Logging-Implementierung zu entkoppeln.