6237 Programmering II (Csharp) Agenda/TypeCasting

From Teknologisk videncenter
Jump to: navigation, search

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);
  }
}