6237 Programmering II (Csharp) Agenda/TypeCasting
TypeCasting
Typecasting kan anvendes på klasser der nedarver fra hinanden. Alle objekter arver fra klassen Object.
I eksemplet herunder laves variablen s af typen String. Derefter laves Objektet o som sættes lig med s.Dette er muligt fordi string nedarver fra object. Hvis du nu alligevel vil have længden af strengen kan du benytte typecasting som vist herunder.
String s = "Text";
Object o = s;
int a = ((String)o).Length;
På samme måde kan objektet o gives værdien 3.4 som egentlig er en double. Et objekt kan ikke ganges med 2, men det kan det hvis vi typecaster det til double.
Object o = 3.4;
double b = ((double)o) * 2;
Her er et eksemple på en mere praktisk anvendelse af typecasting.
Vi har klasserne Elev og Laerer der begge ´nedarver fra Person. Forskellen er at en Elev går på et hold medens læreren får løn.
Da begge nedarver fra Person kan vi gemme både Elev og Laerer i pLst som er en List af typen Person.
I det efterfølgende Loop spørger vi med p.GetType() hvilken type p er, og udskriver med typecasting enten det hold eleven går på, eller den løn læreren får.
List<Person> pLst = new List<Person>();
pLst.Add(new Person("Tommy", "tommys@mail.dk"));
pLst.Add(new Elev("Jens", "jens@mail.dk", "Hold1"));
pLst.Add(new Elev("Kurt", "kurt2mail.dk", "Hold1"));
pLst.Add(new Laerer("Peter", "peter@mail.dk", 30000));
foreach(Person p in pLst)
{
if (p.GetType() == typeof(Elev))
{
System.Console.WriteLine("Eleven {0} går på hold {1}", p.Navn, ((Elev)p).Hold);
}
if (p.GetType() == typeof(Laerer))
{
System.Console.WriteLine("Læreren {0} får {1} i løn", p.Navn, ((Laerer)p).Loen);
}
}