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

pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention - 20 avril 2010 à 14:16 - Dernière réponse : pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention
- 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

Répondre au sujet
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 20 avril 2010 à 14:40
+1
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_GG29
pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention - 20 avril 2010 à 14:44
0
Utile
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
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 20 avril 2010 à 14:50
0
Utile
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
pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention - 20 avril 2010 à 14:53
0
Utile
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
cs_GG29 327 Messages postés vendredi 23 décembre 2005Date d'inscription 8 février 2011 Dernière intervention - 20 avril 2010 à 14:57
0
Utile
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
pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention - 20 avril 2010 à 14:59
0
Utile
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
patatasux 18 Messages postés lundi 11 janvier 2010Date d'inscription 21 mai 2010 Dernière intervention - 20 avril 2010 à 15:55
0
Utile
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
pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention - 21 avril 2010 à 15:31
0
Utile
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
pyr0123 48 Messages postés lundi 28 juillet 2003Date d'inscription 13 juillet 2010 Dernière intervention - 22 avril 2010 à 15:19
0
Utile
protected Parent()
et ca marche :)
Commenter la réponse de pyr0123

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.