Avatar billede farouche Nybegynder
10. juni 2002 - 15:43 Der er 10 kommentarer og
1 løsning

er jeg helt galt på den (lidt generel oop)

Hej

Jeg har brug for lidt opfriskning af min OOP hukommelse nu hvor jeg koder i .net :

Jeg har en klasse : "trlist" der indeholder denne property :

  Public Property Item(ByVal index As Integer) As trItem
    Get
      msgbox(List(index).tostring)
      Return List(index)
    End Get
    Set(ByVal Value As trItem)
      List(index) = Value
    End Set
  End Property

Den returnerer objekter af typen : "tritem"


Jeg har en sub klasse til trlist: "trkundelist" som indeholder objekter af subklassen til "tritem" der hedder "trkunde"

Problemet er at jeg når jeg bruger trkundelist.item, få jeg ikke objekter af typen trkunde som jeg havde forventet, men istedet af tritem.

Burde jeg ikke kune gøre dette uden at skulle have en item property på alle mine sub klasser til trlist ??

Min lille msgbox viser ganske rigtigt "trkunde".

På forhånd tak
Avatar billede kichian Nybegynder
10. juni 2002 - 16:07 #1
Den bliver castet til trItem, når der returneres. Jeg tror at du i C# ville få en fejlmeddelelse fordi du ikke explicit caster dit object.
Avatar billede kichian Nybegynder
10. juni 2002 - 16:10 #2
Løsning:
Property Item skal i trkundelist returnere en trkunde i stedet for tritem.
Avatar billede farouche Nybegynder
10. juni 2002 - 16:11 #3
jeg får nu ikke en fejl, men da tritem er en superklasse til trkunde burde den da selv finde ud af hvilken objekt type den er af ?
Avatar billede farouche Nybegynder
10. juni 2002 - 16:42 #4
problem:

item er ikke implementeret i trkunde, det er netop det jeg gerne vil undgå
Avatar billede kichian Nybegynder
10. juni 2002 - 17:32 #5
Du bliver nødt til at implementere Item, da der er tale om en specialisering i forhold til base-klassen.
Avatar billede farouche Nybegynder
10. juni 2002 - 18:07 #6
Kan det virkelig passe

Når jeg i min Item property returnerer noget er er af klassen "trkunde" burde det der kommer ud så ikke være være af denne type ligemeget om returtypen på item er "tritem"? "trkunde" er jo blot en specialicering af "tritem"
Avatar billede farouche Nybegynder
10. juni 2002 - 18:09 #7
det kan være at jeg skal læse mine gamle OOP notater igen  :o)
Avatar billede kichian Nybegynder
11. juni 2002 - 10:55 #8
Returtypen på Item er tritem. Hverken mere eller mindre. Det er der er kontrakt på compilereingstidspunktet på. At du så kan up-caste det returnerede til trkunde, er kun noget du ved.
Avatar billede farouche Nybegynder
11. juni 2002 - 11:01 #9
Det kan du jo have ret i, men det sjove er, at det virker fint hvis jeg bruger "object" som returtype.


Hvordan forklarer man så den ??
Avatar billede kichian Nybegynder
12. juni 2002 - 11:09 #10
Hvis du bruger "object" som returtype, så burde du stadig skulle up-caste til trkunde/tritem for at kalde metoder der er defineret i disses interfaces.
Hvis det forholder sig som du siger, så vil jeg påstå at det er en Microsoft/VB.NET-feature. Det er ikke OOP.

Har du prøvet at implementere det i C#?
Avatar billede kichian Nybegynder
12. juni 2002 - 11:35 #11
Jeg lavede en lille test-ting i C#. Og her opførte det sig som forventet.
Hvis der returneres et "object", så skal det castes før nogle metoder kan kaldes.
Jeg tror VB.NET er lidt for hjælpsom..
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