login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Constructor van grandparent

Offline nemesiskoen - 31/03/2008 23:38 (laatste wijziging 31/03/2008 23:40)
Avatar van nemesiskoenGouden medaille

PHP expert
Is het in enig welke taal mogelijk om de constructor van de grootvader aan te roepen. Ik bedoel hierbij op een normale, flexible en oo manier. En dus niet (zoals het in php) kan:

  1. <?php
  2. class X extends Y // Y extends Z
  3. {
  4. public __construct($a, $b, $c)
  5. {
  6. Z::__construct($b, $c);
  7. }
  8. }


Ik heb het eigenlijk nodig voor iets in C# maar daar lukt het niet, en nu vroeg ik me af of het eigenlijk wel in eender welke taal mogelijk is.

Ik had het nodig voor:
  1. public class Model
  2. {
  3. public Model(int id)
  4. {
  5. // logic
  6. }
  7. public Model(DataRow row)
  8. {
  9. // logic
  10. }
  11. }
  12.  
  13. public class Forum_Topic_Data : Model
  14. {
  15. //
  16. }
  17.  
  18. public class Forum_Topic : Forum_Topic_Data
  19. {
  20. public Forum_Topic(int id) : base(id)
  21. {
  22. }
  23. public Forum_Topic(DataRow row) : base(row)
  24. {
  25. }
  26. }


Maar dit zal natuurlijk de constructor van Forum_Topic_Data aanroepen.

Base.Base(row) doet ook al niets...

4 antwoorden

Gesponsorde links
Offline Stijn - 31/03/2008 23:44
Avatar van Stijn PHP expert Het lijkt me logisch dat zoiets niet kan (waar zou het eindigen?). Je kan in C# wel meerdere constructors maken.

  1. class Z
  2. {
  3. public function __construct()
  4. {
  5. ...
  6. }
  7. }
  8.  
  9. //hier meerdere constructors maken
  10. class Y extends Z
  11. {
  12.  
  13. public function __construct()
  14. {
  15. parent::__construct(); //java: parent(); C# ken ik niet.
  16. }
  17.  
  18. }
  19.  
  20. //de x class
  21. class X extends Y
  22. {
  23.  
  24. public function __construct()
  25. {
  26. parent::__construct(); //java: parent(); - C# ken ik niet.
  27. }
  28.  
  29. }
Offline nemesiskoen - 31/03/2008 23:51 (laatste wijziging 01/04/2008 01:09)
Avatar van nemesiskoen Gouden medaille

PHP expert
Is het in JAVA niet "super"?
Die meerdere constructors is zoals ook meerdere methodes via "overloading". Iets wat in PHP niet nodig is omdat daar "optionele" variabelen zijn. Maarja, het is wel handig als ik bv. constructor logic wil afhandelen in mijn Model klasse, maar dat er wel een tussenklasse is waarin al mijn static functions gegroepeerd staan:

  1. public Model(DataRow row, bool wait)
  2. {
  3. _row = row;
  4. _id = Convert.ToInt32(_row["id"]);
  5. if (!_initConstructor() && !wait)
  6. FillVars();
  7. }


Dit geld voor elk model, bovenstaande constructor.
Mochten ze rechstreeks erven dan kon ik dit doen:
  1. public Forum_Topic(DataRow row, bool wait) : base(row, wait){}

edit: zelfs dat base gedoe zou niet eens nodig zijn, dat zou hij al automatisch doen. Maarja, tis de grandparent hier, en niet de parent...

Nu moet ik het zo doen:
  1. protected void _handleConstructor(DataRow row, bool wait)
  2. {
  3. _row = row;
  4. _id = Convert.ToInt32(_row["id"]);
  5. if (!_initConstructor() && !wait)
  6. FillVars();
  7. }


  1. public Forum_Topic(row) : this(row, false){}
  2. public Forum_Topic(DataRow row, bool wait)
  3. {
  4. _handleConstructor(row, wait);
  5. }


etc...
Het gaat ook wel, maarja, het is niet "logisch". Snap je?

edit: blijkbaar roept hij standaard de "hoofdconstructor" van de parents op (hoe diep dan ook) maar niet aangepast naar het aantal argumenten.
Offline rambo - 12/04/2008 20:19
Avatar van rambo HTML beginner Via de onderstaande constructor wordt ook de constructor van de base-klasse aangeroepen;

  1. public Klasse() : base()
  2. {
  3. }
Offline nemesiskoen - 12/04/2008 20:50
Avatar van nemesiskoen Gouden medaille

PHP expert
Ja, dat weet ik. Maar zoals ik zei wil ik niet van de base klasse, maar van de grootmoeder klasse. En ik ga niet in elke tussenklasse een extra constructor toevoegen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.226s