Giddion Skrevet 5. februar 2007 Skrevet 5. februar 2007 Jeg holder på å lære meg C# (kan c++) og i den forbindelse skulle jeg gjerne ha kallt på en funksjon fra en klasse jeg har arvet fra. f. eks. klasse menneske har funksjon løpe klasse gal_hoppende_mann har også funksjonen løpe gal_hoppende_mann arver fra menneske. så når løpe blir kalt på hos gal_hoppende_mann skal det se noe slikt ut public new void løpe() { hoppe(); løpe(); //dette skal være løpe funksjonen som er definer i menneske. } Så er dette mulig i c# eller ikke, hvis ja hvordan skal man da gjøre det. En siste ting: Er den noen som vet hvordan man skal finne ut om en punkt er inne i en trekant i en 2D verden trekantene skal se slik ut men er ikke en nøyaktig 60,60,60 trekant 1) __X _X X XXXX XXXX _X X __X _ == usynlig (må ha de pga. forum begrensning) På forhånd takk for alle svar.
Ric_H Skrevet 5. februar 2007 Skrevet 5. februar 2007 (endret) Du kan lese om virtual, new og override på MSDN. Jeg vil tro at det du her er ute etter er noe slik: menneske: public virtual void løpe() { // implementasjon av base-løpe } gal_hoppende_mann: public override void løpe() { base.løpe(); //løpe-metoden som er definert i menneske hoppe(); } Endret 5. februar 2007 av Ric_H
Giddion Skrevet 6. februar 2007 Forfatter Skrevet 6. februar 2007 (endret) Jeg har lest om new og override i boka mi, men den nevnte desverre ikke noe om base. Men blir det ikke feil å bruker override? Slik som jeg har forstått det så gjør override det ulovlig å kalle på base funksjonen og det vil vel lede til en inf loop. Ved bruk av base så funker alt fin fint, så takk for den Ric_H Endret 6. februar 2007 av Giddion
GeirGrusom Skrevet 6. februar 2007 Skrevet 6. februar 2007 Override fungerer likt som virtual i C++ I C# er base på en måte bare en makro for navnet på superklassen, i C++ ble dette som kjent aldri noen standard (men __super eksisterer i VC++) Men en ting som jeg synes er litt teit, er hvordan man kaller contructoren til superklassen i C#: public MyClassName() : base() eller public MyClassName(string someparam) : this(someparam) istedet for å kalle dette inne i funksjonen.
Ric_H Skrevet 6. februar 2007 Skrevet 6. februar 2007 Men blir det ikke feil å bruker override? Slik som jeg har forstått det så gjør override det ulovlig å kalle på base funksjonen og det vil vel lede til en inf loop. Det er litt forrvirrende ja. I følge Kevin Hoffmann i boka VC# 2005 Unleashed, så er forskjellen på override og new at: "(...) override no longer allows access to the inherited implementation." Dette betyr at dersom du bruker new kan du få tilgang til baseklassens metode, men dette er ofte ikke det du ønsker. GalHoppendeMann ghm = new GalHoppendeMann(); ghm.Hopp(); // Bruker GalHoppendeMann sin Hopp() Menneske m = (menneske) ghm; m.Hopp(); // Bruker Menneske sin Hopp ved "new" og // GalHoppendeMann sin ved "override"
Giddion Skrevet 6. februar 2007 Forfatter Skrevet 6. februar 2007 Aha da skjønte jeg det, da burde jeg bruke override. Takk for hjelpen
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå