Problème d'héritage [Résolu]

Signaler
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
-
Bonjour,

Je souhaite créer une ma classe hérité d'une classe parente :
class MyEnfant : Parent
{
  // consructor
  public MyEnfant()
  {
  }
}


L'erreur :
Erreur 2 'Parent' ne contient pas un constructeur qui accepte des arguments '0'


Je ne comprends pas...
Note : la classe Parent contient un constructeur qui prend un paramètre.
Comment faire ?
Merci !

9 réponses

Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
12
Il faut préciser la valeur du paramètre à utiliser pour le constructeur parent
class MyEnfant : Parent
{
  // consructor
  public MyEnfant() : base(la valeur du paramètre)
  {
  }
}



---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

Je précise que le classe parente ne contient qu'un seul constructeur, il ne devrait donc pas y avoir d'ambiguïté ..
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
12
il ne devrait donc pas y avoir d'ambiguïté

Certes il n'y a pas d'ambiguité. Cependant comment tu veux que le compilateur trouve la valeur du paramètre à passer au constructeur. Il n'est pas encore devin donc c'est à toi de la préciser avec la syntaxe que je t'ai précisée dans le message précédant.

---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

Ok merci bcp cela fonctionne.

Puis-je alors écrire mon constructeur comme cela ; est-ce logique ?

public MyEnfant(string id) : base(id)
{
  Parent p = new Parent(id);
}
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
12
C'est parfaitement logique.
Cependant Parent p = new Parent(id); ne sert à rien dans le code que tu as mis.

---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

OK, si j'ai bien compris le fait de rajouter
: base(id)

permet d'appeler le constructeur parent sans passer par le new..
Génial =)
Messages postés
18
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
21 mai 2010

c'est bien, ça, passer par new, te créerai une nouvelle instance, tandis que la, le constructeur parent initialisera les propriété du fils. (propriétés que le fils a hérité du père)

c'est tout l'intérêt de l'héritage.
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

Dernière question, est-il possible de créer une classe enfant singleton aussi ?
C'est à dire, une classe A 'parente' singleton, et une classe 'enfant' B singleton aussi.
Car, dans la classe A le constructeur est private d'après le pattern singleton .
Quand je créé l'enfant, il ne 'verra' pas le construteur parent puisqu'il est en private.

Comment s'en sortir ?!

Code au cas ce n'est pas clair :
class Parent
{
 private Parent() { }
 public Parent GetInstance() { .. } // singleton
}
class Enfant : Parent
{
  private Enfant() {} // erreur compilo : non-visibilité de Parent.Parent()
  public Enfant GetInstance(){ .. }
}
}


Merci
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010

protected Parent()
et ca marche :)