Avatar billede onkel_satan Nybegynder
12. november 2007 - 22:30 Der er 12 kommentarer og
1 løsning

Return værdi kan være to forskellige klasser.

Go aften,
Sidder med en metode i en klasse der kan, alt afhængig af nogle interne test, returnere referancer til to forskellige klasser. Da to klasser arver ikke fra nogen fælles klasse da de ikke rigtig har noget tilfældes. Så tænkte jeg, hvis jeg sætter return objektet til 'Object' som jo er root objektet af alle. Så kan jeg bare lave et .toString() eller TypeOf() kald på det returnerede objekt og finde ud af hvilken at de to typer objekter den har sendt tilbage.
Men nu får jeg altsaa denne compiler fejl: "'object' does not contain a definition for 'metoden'
Nogen der ved hvad jeg gør galt eller hvordan man takler saadanne en situation hvor man ikke på forhånd kan sige hvilket type objekt den returnere ?
Avatar billede arne_v Ekspert
12. november 2007 - 22:31 #1
.ToString() med stort T
Avatar billede arne_v Ekspert
12. november 2007 - 22:32 #2
Bedre:

.GetType().Name
Avatar billede arne_v Ekspert
12. november 2007 - 22:34 #3
Aller bedst formentligt:

if(o is Foo)
{
  ...
}
else if(o is Bar)
{
  ...
}
else
{
  throw new GrimException();
}
Avatar billede nielle Nybegynder
12. november 2007 - 22:48 #4
Eller hvad med ar bruge is-operatoren til at teste med?
Avatar billede nielle Nybegynder
12. november 2007 - 22:48 #5
Ah...
Avatar billede onkel_satan Nybegynder
12. november 2007 - 22:53 #6
Smidder lige lidt kode for at i bedre kan se hvad det er jeg laver.

public override Object hitTest (Point p) {
    Object result = null;
    foreach(Object e in elements) {
        result = e.hitTest(p);
        if(result != null) break;
    }
    return result;
}

elements er et ArrayList som i kan se indeholder nogle objekter jeg har lavet. hitTest() returnere saa enten
Avatar billede onkel_satan Nybegynder
12. november 2007 - 22:55 #7
ups.. fik ikke skrevet førdig.


... returnere objektType1 eller objektType2. Jeg vil saa bare returnere det som et Object og derefter laver jeg en test på hvilken type det er som du arne beskriver med if(o is Foo)
.....
else
....
Avatar billede onkel_satan Nybegynder
12. november 2007 - 22:57 #8
e.hitTest(p) giver mig saa denne error 'object' does not contain a definition for 'hitTest'
Avatar billede arne_v Ekspert
12. november 2007 - 23:03 #9
e er et Object og den har ikke en hitTest metode

det er ikke umiddelbart klar for mig hvad sammenhængen er med spørgsmålet
Avatar billede onkel_satan Nybegynder
12. november 2007 - 23:10 #10
ahhh ja for søren da... det er sgu også rigtigt. Den indeholder Graphic objekter. Nu kan den lidt igen.

Men saa kan jeg mååske lige snige et andet spørgsmål ind. De to typer objekter den kan returnere er, MyPoint eller objekter der arver fra Graphic, det kan f.eks. Firkant, Trekant osv. er der en måde hvorpå jeg kan se om de nedstammer fra Graphic ? Skal måske siges at Graphic er en abstrakt klasse.
Avatar billede arne_v Ekspert
12. november 2007 - 23:20 #11
o is Graphic

vil netop returnere true for alle typer der er nedarvet fra Graphic
Avatar billede onkel_satan Nybegynder
12. november 2007 - 23:24 #12
ok super. Så vil jeg takke mange gange. Hvis du lige planter et svar kan jeg give point :D
Fortsæt god aften.
Avatar billede arne_v Ekspert
12. november 2007 - 23:40 #13
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
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