Avatar billede alaflam Nybegynder
06. oktober 2005 - 08:48 Der er 13 kommentarer og
1 løsning

typecast object til object?

Hejsa,

Jeg har lige kigget på nogen tutorials for C# men jeg forstår ikke rigtige hvordan de smider et object over på en anden og typecaster den ?

ligesom her.

HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create("http://www.amazon.com");

Hvad sker der her ?? :(
Avatar billede kalp Novice
06. oktober 2005 - 08:55 #1
Det er ganske normalt typecast ??
Avatar billede arne_v Ekspert
06. oktober 2005 - 08:56 #2
WebRequest.Create creater et objekt af typen WebRequest eller en af dens
sub klasser

Vi ved at det er en HTTP URL så vi type caster fra "reference til WebRequest" til
"reference til HttpWebRequest" fordi så kan vi ikke kun bruge metoderne i
WebRequest men også de HTTP specifikke metoder i HttpWebRequest

Generelt er den teknik ikke særlig pæn !!
Avatar billede imago-dei Nybegynder
06. oktober 2005 - 09:03 #3
Det er lidt udenfor det oprindelige spørgsmål, men arne_v hvorfor er den teknik ikke særlig pæn? Hvordan ville en pænere løsning se ud?
Avatar billede arne_v Ekspert
06. oktober 2005 - 09:08 #4
bemærk at der er stor forskel på type cast for simple objekter

double doubleval = 123.456;
int intval = (int)doubleval;

som ændrer på værdien;

og type cast af en reference:

SuperKlasse o = new SubKlasse();
SubKlasse o2 = (SubKlasse)o;

som faktisk kun ændrer på opfattelsen af hvilken type det er.
Avatar billede arne_v Ekspert
06. oktober 2005 - 09:14 #5
imago-dei>

Når programmøren har lavet en metode som returnerer et interface eller en
abstrakt basis klasse for at encapsulate implementationen, så er det jo ikke
specielt pænt at man med den type cast binder til implementationen.

Det konkrete tilfælde er dog ret gængs. Den kode er lavet en million gange.
Og den samme kode i i Java laver præcis det samme.

Derudover er der risikoen for at man har misforstået noget og at ændrede input faktisk
returnerer en anden type (hvis URL indtastes af bruger kan man jo ikke være sikker
på at det er en HTTP URL)
Avatar billede imago-dei Nybegynder
06. oktober 2005 - 09:19 #6
arne_v

Jeg kan følge dig en del af vejen. Men hvad er alternativet? Det er vel sådan at det ret ofte er nødtvendigt at typecaste (f.eks. i eventhandling hvor første parameter konventionelt er object sender). Eller hvad? Er der andre muligheder?
Avatar billede arne_v Ekspert
06. oktober 2005 - 09:24 #7
det tilfælde synes jeg ikke er så slemt - fordi formen og event processing
allerede er tæt koblet - i modsætning til ens applikation og WebRequest
Avatar billede alaflam Nybegynder
06. oktober 2005 - 09:27 #8
WoW, det var hurtigt :)

object1 = (object1)object2.metode(url);

arne_v, dvs. når jeg typecaster et object2 over object1, så er iden i det at object1 nu har alle funktioner som object2 ?

hvis ja, hvorfor er det ikke sådan når man typecaster sådan her:

double doubleval = 123.456;
int intval = (int)doubleval;

man mister jo alt efter punktum, da int kan ikke holde det.
Avatar billede arne_v Ekspert
06. oktober 2005 - 09:55 #9
ja *HVIS* objektet oprindeligt var af den type - ellers får du bare en ClassCastException !

som sagt er der forskel på simple data typer og referencer til objekter
Avatar billede alaflam Nybegynder
06. oktober 2005 - 10:27 #10
Mange tak arne :)

Bare den sidste lille ting,

Hvordan ved jeg om objectet2 er oprindeligt af type object1 ??

Står det normalt i dokumentation, eller definere man det i object2 klasse ?
Avatar billede arne_v Ekspert
06. oktober 2005 - 10:46 #11
se det er jo det som er det problematiske i konstruktionen

nogen gange ved du det

du kan teste for det med is keywordet

men træd varsomt
Avatar billede alaflam Nybegynder
06. oktober 2005 - 10:49 #12
okay, det er dog mærkeligt at man ikke kan vide om de er samme type ?

du må meget gerne smide et svar arne :)

mange tak forhjælpen
Avatar billede arne_v Ekspert
06. oktober 2005 - 10:51 #13
du kan som sagt teste for det med is (eller med typeof men is er bedre)

svar
Avatar billede alaflam Nybegynder
06. oktober 2005 - 11:32 #14
mange tak arne :)

hvis du var en pige og på min alder, så har jeg giftet mig med dig :P
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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