30. maj 2005 - 19:54Der er
14 kommentarer og 1 løsning
StackOverflowException som ikke burde opstå
Hej alle,
har følgende property i koden:
public int score { get { return score; } set { score = value; } }
Ved "score = value" får jeg den exception. Det eneste sted hvor jeg tildeler score en værdi, giver jeg den værdien 2...hvilket jo ikke skal rejse nogen alarm-flag. Er der mon nogen der har en idé til hvorfor h*... det går galt?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Grunden til at du fik en ekception når du f.eks. skrev:
score = 2;
- er at du kalder set-delen:
set { score = value; }
- men der står jo:
score = value;
- og det betyder at du kalder set-delen endnu engang. Denne kalder set-delen igen og du har m.a.o. en uendelig loop. Altså indtil at din stack løber over.
Man bryder denne loop ved at indsætte den private variabel _score. Der er i øvrigt intet som helst magisk ved den foranstillede understreg; det er bare min måde at indikere at "_score" og "score” høre sammen.
Ah på den facon...det er jo meget smart egentlig. Jeg har set _ brugt mange andre steder på samme måde, så jeg tænkte at der nok var en grund til det...
Den måde jeg ser mest og altid selv bruger er at den globale attribut staves med lille forbogstav og property'en med stort forbogstav.
public int Score { get{return this.score;} set{this.score = value;} }
Det kan være en god idé at bruge this. foran globale attributter og kald til metoder inden i klassen, da koden bliver lettere at læse og nemmere at overskue.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.