28. november 2004 - 22:30Der er
6 kommentarer og 1 løsning
hjælp til objekt
Hejsa allesammen Jeg er ved at lege lidt med C#, og er nu kommet i en knibe som jeg ikke kan finde ud af. Jeg får denne fejl "System.NullReferenceException" og jeg har debugget mig frem til, at det er her hvor problemet opstår.
jeg har et sted i min klasse de her 2 linier.
opretHold(new Hold(hjemmehold, 0,0,0,0,0,0));
her er metoden den kalder
private void opretHold(Hold hold) { // OPRET HOLD resultater.Add(hold); }
her er hold klassen
using System;
namespace fodbold { /// <summary> /// Summary description for Hold. /// </summary> public class Hold { private int runde, holdID, point; private string holdNavn; private int vundneKampe; private int uafgjorteKampe; private int tabteKampe; private int maalImod; private int maalFor;
public Hold(string holdnavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point) { this.holdNavn = holdNavn; this.vundneKampe = vundneKampe; this.uafgjorteKampe = uafgjorteKampe; this.tabteKampe = tabteKampe; this.maalImod = maalImod; this.maalFor = maalFor; this.point = point; }
public Hold(string holdnavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor) { this.runde = runde; this.holdNavn = holdNavn; this.vundneKampe = vundneKampe; this.uafgjorteKampe = uafgjorteKampe; this.tabteKampe = tabteKampe; this.maalImod = maalImod; this.maalFor = maalFor;
}
public Hold(int holdID, string holdnavn) { this.holdID = holdID; this.holdNavn = holdnavn; } public Hold(string holdNavn) { this.holdNavn = holdNavn; } public Hold() { } public int getRunde() { return runde; } public int getPoint() { return point; } public void setPoint(int p) { point = point + p; }
public int getVundneKampe() { return vundneKampe; } public int getUafgjorteKampe() { return uafgjorteKampe; } public int getTabteKampe() { return tabteKampe; } public int getMaalHjemme() { return maalFor; } public int getMaalUde() { return maalImod; } public void setMaalHjemme(int m) { maalFor = maalFor + m; } public void setMaalUde(int m) { maalImod = maalImod + m; } public void setVundneKampe(int k) { vundneKampe = vundneKampe + k; } public void setUafgjorteKampe(int k) { uafgjorteKampe = uafgjorteKampe + k; } public void setTabteKampe(int k) { tabteKampe = tabteKampe + k; } public void setVUTKampe(int v, int u, int t) { vundneKampe = vundneKampe + v; uafgjorteKampe = uafgjorteKampe + u; tabteKampe = tabteKampe + t; } public string getHoldNavn() { return holdNavn; } public void setMaal(int hjemmeMaal, int udeMaal) { maalFor = maalFor + hjemmeMaal; maalImod = maalImod + udeMaal; } public override string ToString() { return holdNavn; }
} }
problemmet ligger i når jeg kalder opretHold med de parametre... når jeg debugger, kan jeg se, at nede i private void opretHold(Hold hold) at der er hold sat til at være null i holdnavn, og 0 alle andre steder.
public Hold(string holdnavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point) { this.holdNavn = holdNavn; this.vundneKampe = vundneKampe; this.uafgjorteKampe = uafgjorteKampe; this.tabteKampe = tabteKampe; this.maalImod = maalImod; this.maalFor = maalFor; this.point = point; }
Din globale variabel hedder "holdNavn" og i konstruktøren hedder den "holdnavn"
Det her virker: *********************************** using System;
namespace fodbold { public class Hold { private int runde, holdID, point; private string holdNavn; private int vundneKampe; private int uafgjorteKampe; private int tabteKampe; private int maalImod; private int maalFor;
public Hold(string holdNavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor, int point) { this.holdNavn = holdNavn; this.vundneKampe = vundneKampe; this.uafgjorteKampe = uafgjorteKampe; this.tabteKampe = tabteKampe; this.maalImod = maalImod; this.maalFor = maalFor; this.point = point; }
public Hold(string holdNavn, int vundneKampe, int uafgjorteKampe, int tabteKampe, int maalImod, int maalFor) { this.runde = runde; this.holdNavn = holdNavn; this.vundneKampe = vundneKampe; this.uafgjorteKampe = uafgjorteKampe; this.tabteKampe = tabteKampe; this.maalImod = maalImod; this.maalFor = maalFor; }
Det er en klassiker... I øvrigt ville jeg nok vælge at anvende properties på dine variabler. Get og Set metoder er Java, Properties er C#
Eksempel:
//I java ville man sige: public string getHoldNavn() { return holdNavn; } public void setHoldNavn() { return holdNavn; }
//I C# bør man sige public String HoldNavn{ get{ return holdNavn; } set{ holdNavn = value; } }
Forskellen er at du ville kunne kalde: Hold mitHold = new Hold(); mitHold.HoldNavn = "Hjemmeholdet";
I stedet for: Hold mitHold = new Hold(); mitHold.setNavn("Hjemmeholdet");
Husk Properties og Metodenavne med stort i C# (Virker selvfølgelig med småt men det er ligesåmeget en standart som det er at de skal være med småt i java)...
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.