Problème d'héritage

Résolu
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010 - 20 avril 2010 à 14:16
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010 - 22 avril 2010 à 15:19
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

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
20 avril 2010 à 14:40
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.
1
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
20 avril 2010 à 14:44
Je précise que le classe parente ne contient qu'un seul constructeur, il ne devrait donc pas y avoir d'ambiguïté ..
0
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
20 avril 2010 à 14:50
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.
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
20 avril 2010 à 14:53
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);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
20 avril 2010 à 14:57
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.
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
20 avril 2010 à 14:59
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 =)
0
patatasux Messages postés 18 Date d'inscription lundi 11 janvier 2010 Statut Membre Dernière intervention 21 mai 2010
20 avril 2010 à 15:55
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.
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
21 avril 2010 à 15:31
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
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
22 avril 2010 à 15:19
protected Parent()
et ca marche :)
0
Rejoignez-nous