Hej! En gissing: [Edit] b är global i a och initieras i konstruktorn i a[/edit] 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? Här kommer koden nedan, i förenklad version eftersom att jag inte har kod och internet på samma dator. 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. 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.... >dock måste jag sätta boolList till att vara static för att det ska fungera 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. För att göra exakt så du har skrivit: 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(). Är detta felfri???? Nej den är inte felfri. Vias direkt i en kompilator. eh, Variabler i objekt nollställs?
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 galenSv: Variabler i objekt nollställs?
Du fyller på listan i ett temporärt object av klassen B.Sv:Variabler i objekt nollställs?
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.Sv: Variabler i objekt nollställs?
Sv:Variabler i objekt nollställs?
[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
}
}Sv:Variabler i objekt nollställs?
[edit] Den enda skillnaden mellan denna och min kod är att det gör lite saker emellan doList() och readList()[/edit]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.
Sv:Variabler i objekt nollställs?
Sv: Variabler i objekt nollställs?
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?Sv:Variabler i objekt nollställs?
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.Sv:Variabler i objekt nollställs?
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.
/EmmaSv: Variabler i objekt nollställs?
Sv:Variabler i objekt nollställs?
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...
/TibiSv: Variabler i objekt nollställs?
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.
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 !
}
}
Sv:Variabler i objekt nollställs?
din instans av b försvinner ju. Det är självklart att den inte finns på andra ställen då?
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.