Benutzer mit den meisten Antworten
StackOverFlowException bei einer Eigenschaft

Frage
-
Hallo zusammen!
Habe erst sehr wenig Programmiererfahrung und bin bei meinen Bemühungen auf folgendes Problem gestossen:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Person { public string firstname { get { return firstname; } set { if (value == "") { throw new Exception("Kein Vorname ist vorhanden"); } firstname = value; } } } class Program { static void Main(string[] args) { Person Me = new Person(); Me.firstname = "Max"; } } }
Ich definiere die Eigenschaft "firstname" der Klasse "Person". Ich möchte, dass auf diese Eigenschaft auch von anderen Klassen normal zugegriffen werden kann. Wenn der Wert der Eigenschaft abgeändert wird, soll zunächst überprüft werden, ob der zugewiesene Wert überhaupt eine Zeichenabfolge ist (sowas schreibt man doch normalerweise in den Setter, oder?). Falls der zugewiesene Wert "" ist, soll eine Exception ausgelöst werden.Wenn ich den Code wie oben eingebe erhalte ich immer eine StackOverFlowException, kann mir vielleicht jemand erklären, was das bedeutet und wie ich den Code zum Funktionieren bringe?
Vielen Dank ;)
Antworten
-
Hi,
und wo ist die interne Variable zu Speicherung des Werts?
In deinem Code passiert folgendes:
Me.firstname = 'Max'
-> Aufrufen des Setters der Property "firstname"
-> Dein Aufruf: firstname = value;
-> Aufrufen des Setters der Property "firstname"
-> Dein Aufruf: firstname = value;
-> Aufrufen des Setters der Property "firstname"
-> Dein Aufruf: firstname = value;
...Und das führt dann irgendwann zu der genannten Exception.
Leg dir eine Variable an, in der der Wert abgelegt wird. Also bspw.:
private string _firstname;
public string firstname
{
get
{
return _firstname;
}
set
{
_firstname = value;
}
}
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Elmar BoyeEditor Dienstag, 12. Juli 2011 19:39
Alle Antworten
-
Hi,
und wo ist die interne Variable zu Speicherung des Werts?
In deinem Code passiert folgendes:
Me.firstname = 'Max'
-> Aufrufen des Setters der Property "firstname"
-> Dein Aufruf: firstname = value;
-> Aufrufen des Setters der Property "firstname"
-> Dein Aufruf: firstname = value;
-> Aufrufen des Setters der Property "firstname"
-> Dein Aufruf: firstname = value;
...Und das führt dann irgendwann zu der genannten Exception.
Leg dir eine Variable an, in der der Wert abgelegt wird. Also bspw.:
private string _firstname;
public string firstname
{
get
{
return _firstname;
}
set
{
_firstname = value;
}
}
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Elmar BoyeEditor Dienstag, 12. Juli 2011 19:39