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

Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
- - Dernière réponse : 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 !
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
10
1
Merci
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.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_GG29
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
0
Merci
Je précise que le classe parente ne contient qu'un seul constructeur, il ne devrait donc pas y avoir d'ambiguïté ..
Commenter la réponse de pyr0123
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
10
0
Merci
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.
Commenter la réponse de cs_GG29
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
0
Merci
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);
}
Commenter la réponse de pyr0123
Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
10
0
Merci
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.
Commenter la réponse de cs_GG29
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
0
Merci
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 =)
Commenter la réponse de pyr0123
Messages postés
18
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
21 mai 2010
0
Merci
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.
Commenter la réponse de patatasux
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
0
Merci
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
Commenter la réponse de pyr0123
Messages postés
48
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
13 juillet 2010
0
Merci
protected Parent()
et ca marche :)
Commenter la réponse de pyr0123