Avatar billede Mikker Praktikant
08. februar 2007 - 23:33 Der er 7 kommentarer og
1 løsning

Typecasting af custom class

Hej Eksperter

Jeg forstår ikke helt at når jeg caster en custom Child class til dens base class, så forbliver typen Child class, men når jeg caster f.eks. en double til int32 så bliver den en int32, som forventet.

Jeg har i nedenstående eksempel oprettet en ParentClass, og en ChildClass som arver fra ParentClass og så forsøger jeg at caste ChildClass til ParentClass:

ChildClass Child = new ChildClass();
Console.WriteLine(Child.GetType()); //ChildClass

ParentClass Parent = (ParentClass)Child;
Console.WriteLine(Parent.GetType()); //ChildClass

Jeg havde forventet at den sidste gav ParentClass pga. casting'en - men nej.

Hvis jeg derimod gør det samme med Int32 og Double:

double MyDouble = 123.45;
Int32 MyInt = (Int32)MyDouble;
Console.WriteLine(MyInt.GetType()); //Int32 - som forventet.

Hvordan forklares denne forskel?
Avatar billede arne_v Ekspert
09. februar 2007 - 02:20 #1
reference type versus value type

når du caster en reference type så ændrer du ikke objektets type du
opfatter det kun anderledes

når du caster en value type så konverterer du faktisk data

NB: du behøver slet ikke caste når det er fra child->parent kun den anden vej
Avatar billede Mikker Praktikant
09. februar 2007 - 12:20 #2
Hej arne_v

Kan du uddybe "du opfatter det kun anderledes" ?

Mvh.
Michael
Avatar billede arne_v Ekspert
09. februar 2007 - 14:42 #3
kan du C++ ?

X o1 = new X();
Y o2 = (Y)o1;

svarer til

X *o1 = new X();
Y *o2 = (Y*)o1;
Avatar billede arne_v Ekspert
09. februar 2007 - 14:44 #4
en reference type består af en reference (4 byte på 32 bit windows) og et objekt af N bytes

en cast ændrer ikke de N bytes

en cast ændrer ikke engang de 4 bytes

en cast ændrer kun compile time check for brugen af det castede
Avatar billede Mikker Praktikant
12. februar 2007 - 11:48 #5
Ok. Men har man så overhovedet nogensinde brug for at caste reference objekter?
Avatar billede arne_v Ekspert
12. februar 2007 - 15:13 #6
det haender

ikke saa tit efter generics

foer generics havde man ret tit noget som compileren kun vidste var Object
og som man var noedt til at caste til hvad det virkeligt var for at kunne
kalde metoder paa det
Avatar billede Mikker Praktikant
12. februar 2007 - 19:07 #7
Ok. Tak. Smid et svar.
Avatar billede arne_v Ekspert
12. februar 2007 - 19:13 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester