Gå til innhold

Anbefalte innlegg

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.

Lenke til kommentar
Videoannonse
Annonse

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 av Ric_H
Lenke til kommentar

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 av Giddion
Lenke til kommentar

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.

Lenke til kommentar
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"

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...