07. oktober 2005 - 12:57
Der er
14 kommentarer og 2 løsninger
typecasting af object
hejsa, jeg fik en en beskrivelse af typecasting, men det ser ikke ud til at virke som jeg har forstået af arne_v. class class1 { public void okay() { System.Console.Write("okay"); } } class class2 : class1 { public void test() { System.Console.Write("test"); } } class Class3 { static void Main(string[] args) { System.Console.Write("main"); class1 c = new class2(); c.okay(); } } } hvorfo kan c ikke få adgang til test funktionen i class2?
Annonceindlæg fra Trustworks
Tillid i en Zero-Trust verden
Med voksende trusler, nye EU-krav og øget kompleksitet er cybersikkerhed nu en central ledelsesopgave på linje med strategi og økonomi.
07. oktober 2005 - 13:00
#1
med en Using System og en } for meget fjernet så kører koden hos mig
07. oktober 2005 - 13:01
#2
jeg har bare skrevet den hurtig som eks. problemet er c objectet kan ikke få adgang til test.
07. oktober 2005 - 13:02
#3
(c as class2).test();
07. oktober 2005 - 13:03
#4
Du erklærer c som class1, og derved kan du ikke se nye tilføjelser i nedarvninger. Derfor er du nødt til at typecaste den - i mit eksempel med as. Du kan også typecaste således: ((class2)c).test(); Hvordan du vælger, er en smagssag.
07. oktober 2005 - 13:04
#5
bennytordrup, du bruger en anden metode :) jeg prøver på at forstå type casting :) hvilken give mig lidt hovedpine ligenu... jeg tror jeg har misforstået arne da han beskrev det til mig
07. oktober 2005 - 13:05
#6
åh - det var test du ville bruge så skal du enten caste some Benny beskriver eller bedre redesigne så du ikke har behov for det, fordi hvis du har brug for en class2 så skal du ikke have en class2
07. oktober 2005 - 13:06
#7
så skal du ikke have en class1
07. oktober 2005 - 13:10
#8
alaflam > jeg bruger typecasting, da typecasting er at ændre et instans til en anden type. Det, du har fat i i din kode, er nedarvning, og det er noget helt andet. Min metode med at typecaste class1 til class2 er fuldt lovlig, da class2 er nedarvet fra class1, og variablen er instantieret som en class2.
07. oktober 2005 - 13:15
#9
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create("
http://www.amazon.com" );
så er vi tilbage til den her linie... ?
jeg er forvirret nu!
07. oktober 2005 - 13:16
#10
class2 c = new class2(); class1 a = (class1)c.test(); hvad vil der sker så her ? hvad er det a får fra c på den måde ?
07. oktober 2005 - 13:23
#11
Det vil fejle. a får et objekt af typen class1, der ikke indeholder metoden test(). class1 c = new class2() vil give en instanc i c, der umiddelbart er en class1, men i praksis er en class2. Det kan lade sig gøre, da class2 nedarver fra class1. For at få fat i specifikke class2 metoder, er du nødt til at typecaste: ((class2)c).test(); eller (c as class2).test();
07. oktober 2005 - 13:24
#12
WebRequest Create er erklæret til at returnere en WebRequest for en HTTP URL returnere den en HttpWebRequest da HttpWebRequest er en sub klasse til WebRequest er det OK WebRequest wr = WebRequest.Create(url); og du kan bruge alle metoderne i WebRequest hvis du HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(url); så kan du bruge alle metoderne i HttpWebRequest (inkl. fra super kalssen WebRequest) [og hvis det ikke er en HTTP URL så får du en ClassCastException]
07. oktober 2005 - 13:35
#13
bennytordrup, jeg fortækker mere (c as class2.test()); hvilket er mere forstående end den først :), men når du siger at a vil fejl fordi den ikke indeholder metoden test(), så får du det til at lyde som den vil virke hvis a indeholder metoden test(), hvilket selvfølgelig ikke gøre :) arne_v, kan du måske give mig en lille kort kode der virker på samme måde som httpwebrequest ?? hvor jeg kan skrive class1 a = (class1)b.test();
07. oktober 2005 - 13:39
#14
er det ikke det som din kode med bennys kald gør ?
07. oktober 2005 - 13:44
#15
jeg siger mange tak til begge tak, nu vil jeg ikke bruge mere af jeres tid :-) kan du lægge et svar arne :P
07. oktober 2005 - 13:55
#16
.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.