Anfängerfrage
-
Wieso bekomme ich hier unendlich DivideByZeroExceptions, wenn ich x = 0 schreibe? Wenn ich das sein lasse, fliegt zwar nur eine, aber dann bekomme in ich eine StackOverFlowException wenn ich die get-Methode in Zeile 40 aufrufe.
Wie kann ich das Problem lösen?
Hier der Code:using System; namespace ConsoleApplication1 { class Circle { public Circle(string T) { x = Convert.ToInt32(T); } public static int zero = 0; public int x { get { return x; } set { try { x = value / zero; } catch (Exception e) { Console.WriteLine(e.Message); } } } } class Program { static void Main(string[] args) { Console.WriteLine("Hallo {0}", "Welt"); Circle Kreis = new Circle("5"); Console.WriteLine("{0}", Kreis.x); Console.ReadLine(); } } }
-
x als Property wird recursiv benutzt.
Dir fehlt eine Variable um das Property zu repräsentieren.
Das kannst Du z.B. so:
class Circle { private int radius = 0; public int Radius { get { return radius; } // set... } }
-
Danke, Problem gelöst
-
Eine Frage habe ich noch.
Muss man bei C# alle Variablen direkt initialisieren, oder ist es nicht schlimm, wenn eine uninitialisierte Variable benutzt wird? Wenn zweites der Fall ist, was passiert dann?
-
In C# werden alle Variablen (implizit) auf ihren Default Wert initialisiert.
Wenn Du das explizit tun möchtest ist das auch ok.
-
Und wieso ist dann dieser Code fehlerhaft. Müssten die Variablen x und y dann nicht implizit mit 0 initialisiert werden?
-
Der User winSharp93 hat dies ganz gut im myCSharp-Forum erklärt: http://www.mycsharp.de/wbb2/thread.php?postid=3660142#post3660142
-
Danke, jetzt hab ich es verstanden.
-
theta schrieb:
In C# werden alle Variablen (implizit) auf ihren Default Wert initialisiert.
Wenn Du das explizit tun möchtest ist das auch ok.Aber nur wenn es Klassenmember sind.
Lokale Variablen in Methoden werden nicht mit dem Default-Wert initialisiert.Anfänger64 schrieb:
public static int zero = 0;
Hast Du Angst, dass sich der Wert von Null mal ändert?