17. maj 2003 - 10:43Der er
8 kommentarer og 3 løsninger
Abstrakt klasse array - hvordan findes klassetypen?
Jeg har en klasse der opretter et array ud fra en abstrakt klasse: private cAbstractHest[] hestene; hestene = new cAbstractHest[10];
Senere smides der objekter af de nedarvede klasser i: hestene[0] = new cHestPony(); hestene[1] = new cHestNormal(); hestene[2] = new cHestIslandsk();
Når jeg klikker på en hest fra listen over heste typer: movingHest = hestene[i]; (i findes ud fra kordinaterne(hit-detection))
Når jeg slipper igen ved de udvalgte heste: deUdvalgteHeste[i] = movingHest;
NU ER PROBLEMET SÅ: I mit program viser jeg billeder over alle hestetyperne. Når jeg så trækker en hest fra hestelisten ned på udvalgte heste - så vil jeg lave så de heste der trækkes er NYE heste - altså IKKE referencer til de hestelisten. Efterfølgende vil jeg fx gerne navngive hestene individuelt. Men pt. går det glat fordi de heste jeg trækker ud er referencer til de overordnede heste-objekter.
Helst ville jeg lave noget i regning af: movingHest = new (Type)hestene[i].GetType(); Men det virker ikke.
Tror ikke man kan caste til en type som findes runtime... så en anden (og noget grimmere) løsning vil være:
Type t = hestene[i].GetType(); switch (t.FullName) { case "mitNamespace.cHestPony": movingHest = new cHestPony(); break; case "mitNamespace.cHestNormal": movingHest = new cHestNormal(); break; case "mitNamespace.cHestIslandsk": movingHest = new cHestIslandsk(); break; default: throw new Exception("Pokkers! Ukendt hest!"); }
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.