Variabler i objekt nollställs?
Hej!
Jag har en klass A som gör ett objekt av klassen B.
Från A anropar jag en metod i B som fyller en global lista med saker, jag skriver denna lista till en fil så jag vet med säkerhet att så är fallet. Jag gör några saker i a för att senare försöka använda en annan metod i objektet B som använder denna lista, men då är den sop-ren. 0 i längd, inget element, trots att jag inte bett om någon sådan rensning.
Är det bara jag som råkat ut för detta?
Jag har hållit på i Java en del också så jag tror inte syntaxen är galen
Svara
Sv: Variabler i objekt nollställs?
En gissing:
Du fyller på listan i ett temporärt object av klassen B.
Svara
Sv:Variabler i objekt nollställs?
[Edit] b är global i a och initieras i konstruktorn i a[/edit]
Det är en lista med boolska värden, true eller false, dessa kan ju inte försvinna? Däremot om jag gör min lista statisk är problemet löst men jag förstår inte varför det ska behövas.
Svara
Sv: Variabler i objekt nollställs?
Det finns inga globala variabler i C#. Vad menar du när du säger att listan är global? Var och hur har du deklarerat den?
Svara
Sv:Variabler i objekt nollställs?
Här kommer koden nedan, i förenklad version eftersom att jag inte har kod och internet på samma dator.
[edit] Ändrat b.doList() till temp.doList() samt b.readList() till temp.readList()[/edit]
public class A
{
b temp = new b();
temp.doList();//Gör listan
temp.readList();//Finns inte kvar
}
public class B
{
private Boolean[] boolList;
public void doList()
{
boolList = new Boolean[2];
boolList[0]=true;
boolList[1]=true;
//Fyll listan
}
public Boolean readList()
{
return boolList[0]; //Finns inte, det är en NULL-pekare
}
}
Svara
Sv:Variabler i objekt nollställs?
Jag tycker också den är felfri, dock måste jag sätta boolList till att vara static för att det ska fungera, iofs är problemet löst men jag fattar inte varför det ska behövas.
[edit] Den enda skillnaden mellan denna och min kod är att det gör lite saker emellan doList() och readList()[/edit]
Svara
Sv: Variabler i objekt nollställs?
public class A { b temp = new b(); b.doList();//Gör listan b.readList();//Finns inte kvar }
Ser skumt ut tycker jag.
Borde det inte vara
temp.doList();
temp.readList();
Är inte så jättebra på C# men
b.doList() borde väl innebära antingen att en statisk funktion anropas eller också skapas ett temporärt b objekt och medlemmen i det anropas.
Svara
Sv:Variabler i objekt nollställs?
Det är rätt, jag har skrivit fel, det är temp.doList() som anropas i min kod och inget annat, men som sagt så kan tryckfelsnisse vara framme då man ska skriva och inte kan kopiera koden....
Svara
Sv: Variabler i objekt nollställs?
>dock måste jag sätta boolList till att vara static för att det ska fungera
På vilket sätt fungerar det? Kan ju knappast vara särskilt användbart.
Att det "fungerar" med static innebär ju att det är ett livstidsproblem du har. Objektet där du fyller på listan går "out of scope" någonstans. Att göra boolList static lär ju bara innebära att problemet dyker upp någon annanstans.
Varför har du överhuvudtaget klassen b?
Svara
Sv:Variabler i objekt nollställs?
Klart att det inte är speciellt bra att sätta static om man inte behöver det och det är anledningen att jag frågar här, men hur i hela friden kan något bli out of scope om det deklareras i början av en klass och sedan initieras i en metod. Jag hade kunnat förstå om jag hade deklarerat något lokalt i en metod men så är verkligen inte fallet. Vad som finns i klassen b är lite för långt för att stoppa in här, det som går fel står i tråden.
Jag ville mest bara konfirmera att inte det är något olika i c# motför typ java. Antar att jag får kolla igenom koden igen.
Svara
Sv:Variabler i objekt nollställs?
För att göra exakt så du har skrivit:
b temp = new b();
b.doList();
...
Krävs det att både doList och readList är static. Om du anropar dem som metoder på objektet b ska de inte behöva vara det. Så kolla igenom koden igen, precis som du själv säger.
/Emma
Svara
Sv: Variabler i objekt nollställs?
Nu var det iofs inte det som var felet, om du läser ovan ser du att jag erkännt mitt misstag, jag hade skrivit av koden fel. I min riktiga kod har jag temp.doList().
Svara
Sv:Variabler i objekt nollställs?
Är detta felfri????
public class A
{
b temp = new b();
temp.doList();//Gör listan
temp.readList();//Finns inte kvar
}
Har nån kopilerat och kört det här? Jag är lite tveksam...
/Tibi
Svara
Sv: Variabler i objekt nollställs?
Nej den är inte felfri. Vias direkt i en kompilator.
Följande kod funkar. Jag hoppas det löser det inledande problemet.
Notera att klassen heter B o inte b. Alltså måte man skriva "new B()"
Vidare behövs en constructor för A.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class A { public A() { B temp = new B(); temp.doList(); //Gör listan bool result= temp.readList(); //Finns Console.WriteLine( result ); } } public class B { private Boolean[] boolList; public void doList() { boolList = new Boolean[2]; boolList[0]= true ; boolList[1]= true ; //Fyll listan } public Boolean readList() { return boolList[0]; //Finns ! } } |
Svara
Sv:Variabler i objekt nollställs?
eh,
din instans av b försvinner ju. Det är självklart att den inte finns på andra ställen då?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class A { B myB; public A() { myB = new B(); myB.doList(); //Gör listan bool result= myB.readList(); //Finns Console.WriteLine( result ); } } public class B { private Boolean[] boolList; public void doList() { boolList = new Boolean[2]; boolList[0]= true ; boolList[1]= true ; //Fyll listan } public Boolean readList() { return boolList[0]; //Finns ! } } |
Nu kommer din boollista att finnas kvar i ditt object myB.
Svara