Klass i array, visar inte värden när jag printar ut dem.
Tjena, har kört fast på en uppgift där jag ska använda värden från en klass (2 st Integers i detta fall) som sparats i en array men vad jag än försöker i koden så skriver den bara en annan grej. Så här ser koden ut:
using System;
namespace TheBus
{
class Bus
{
Passenger[] passengers = new Passenger[24];
public void Run()
{
for (int i = 0; i < passengers.Length; i++)
{
// Tempvärden för Passenger för testing
passengers[i] = new Passenger(1, 2);
Console.WriteLine(passengers[i]);
}
}
}
class Passenger
{
private int age;
private int gender;
// Konstruktor
public Passenger(int _age, int _gender)
{
age = _age;
gender = _gender;
}
}
class Program
{
static void Main(string[] args)
{
var myBus = new Bus();
myBus.Run();
}
}
}
Jag har på test försökt ge varje nytt objekt i array:n värdet 1 och 2 genom en loop för att testa men när jag printar ut det så står det bara TheBus.Passenger 24 ggr. Vad har jag gjort för fel?
Vad förväntar du dig att den ska printa då?
Jag vill att den ska skriva ut age och gender från klassen Passenger. Får dem inte värdet 1 och 2 genom loopen?
Jo, alla 24 objekten tilldelas age = 1, gender = 2.
Men hur vet programmet vad den ska skriva ut från objektet?
Bra fråga, hur gör man för att skriva ut t ex age från klassen i array:n då? :)
Det finns en metod som heter ToString(), som du kan skriva över.
Okej, ska kika på det, tack för svar.
using System;
namespace TheBus
{
class Bus
{
Passenger[] passengers = new Passenger[24];
public void Run()
{
for (int i = 0; i < passengers.Length; i++)
{
// Tempvärden för Passenger för testing
passengers[i] = new Passenger(1, 2);
Console.WriteLine(passengers[i]);
}
}
}
class Passenger
{
private int age;
private int gender;
// Konstruktor
public Passenger(int _age, int _gender)
{
age = _age;
gender = _gender;
}
public override string ToString()
{
return String.Concat("age: ", age,", gender: ", gender);
}
}
class Program
{
static void Main(string[] args)
{
var myBus = new Bus();
myBus.Run();
}
}
}
Den här koden fungerar. Du måste använda keywordet override för att inte få detta felmeddelande:
'Passenger.ToString()' hides inherited member 'object.ToString()'. To make the current member ovveride that implementation, add the override keyword. Otherwise add the new keyword.
Koden funkar utmärkt, kan du förklara lite hur den funkar? Jag fattar ungefär vad den gör, men hur gör man om man t ex bara vill skriva ut age eller bara gender? Måste man göra en ny metod för detta då?
Om du bara vill skriva ut en enstaka sak, som t.ex. age, gender (dessa kallas för fields) läs denna länk: