Toon posts:

[C#] Parent class aanroepen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi,

Ik ben in C# bezig een nieuw component te schrijven. Ik wil naast nieuwe functionaliteit ook een paar funties overriden. Nu zit ik met het probleem dat ik een functie uit de parent wil aanroepen. Nu kan ik bijv. tikken: this.functie maar eigenlijk is dat niet helemaal netjes omdat je this gebruikt en die verwijst niet naar de parent. Ik kan dan natuurlijk base.functie gebruiken en dat werkt ook wel, maar nu komt er nog iets ingewikkelders bij kijken: ik heb ook een functie nodig die weer uit de parent van de parent komt... dus een soort base.base.functie constructie, maar dat compileert niet. Weet iemand hoe ik dit het beste aan kan pakken?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:50

mulder

ik spuug op het trottoir

Dat kan toch gewoon?

class One

public virtual DoSomething()

class Two

public override DoSomething()

class Three

public override DoSomething()

oogjes open, snaveltjes dicht


Verwijderd

Je model is fout.

Een inherited class is een 'specialisatie' van de baseclass waar de class van inherit/erft.

Maw: de geinherite class bevat alle functionaliteit van de baseclass en extra's / aanvullingen. Die aanvullingen in functionaliteit implementeer je soms door baseclass methods te overriden, door daar extra functionaliteit in te stoppen.

Het is dan semantisch onjuist om naar een class hoger in de hierarchie te springen, behalve de baseclass van de geinherite class, immers je vult DIE functionaliteit aan.

Als je 3 classes hebt: A, B en C en B erft van A en C erft van B en je wilt in C een method uit A aanroepen door baseclass calls, dan is het normaliter zo dat je vanuit C base.method aanroept, dus in B en de implementatie van B extend de implementatie van A, dus DAAR doe je weer base.method, welke de method van A is.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Op vrijdag 19 juli 2002 13:09 schreef Otis het volgende:
Je model is fout.

Een inherited class is een 'specialisatie' van de baseclass waar de class van inherit/erft.

Maw: de geinherite class bevat alle functionaliteit van de baseclass en extra's / aanvullingen. Die aanvullingen in functionaliteit implementeer je soms door baseclass methods te overriden, door daar extra functionaliteit in te stoppen.

Het is dan semantisch onjuist om naar een class hoger in de hierarchie te springen, behalve de baseclass van de geinherite class, immers je vult DIE functionaliteit aan.
Daar ben ik het niet mee eens. Een inherited class die een base class aanvult moet hem niet vervangen. Derived::foo() hoeft om dezelfde reden Base::foo() niet te vervangen; het is volstrekt redelijk om Base::foo() aan te roepen.

Omdat de IS-A relatie transitief is, is een Derived object niet alleen een Base object, maar ook een BaseOfBase object en wat deze verder aan parents heeft. Het is dan ook redelijk om die aan te roepen. Het enige waar je op moet letten is dat het Derived object nog steeds aan de IS-A relatie moet voldoen met alle base objecten. Derived::foo() moet dus de invarianten van Intermediate::foo() waarborgen, ook al slaat Derived::foo() die tussenstap over en roept'ie direct Base::foo() aan.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein