cs_Stephanie79
Messages postés6Date d'inscriptionmardi 1 juillet 2008StatutMembreDernière intervention11 septembre 2008
-
13 août 2008 à 10:38
cs_Stephanie79
Messages postés6Date d'inscriptionmardi 1 juillet 2008StatutMembreDernière intervention11 septembre 2008
-
13 août 2008 à 15:23
Bonjour,
Je suis débutante en POO et surtout en C#, donc j'espère que je vais bien m'expliquer.
Voici un bout de code (je n'ai pas mis les vrais noms de classes, ni tous les attributs pour des raisons de confidentialité, car c'est une appli professionnelle) :
abstract class Unite
{
protected Group pParent; //Parent de l'objet courant, si null, l'objet courant est la racine
//propriété de pParent
public Group Parent
{
get { return pParent; }
protected set
{
pParent=value;
}
}
}
class Group : Unite
{
private List pUnites;
public void AjouterUnite(Unite unit)
{
pUnites.Add(unit);
unit.Parent=this;
}
}
Je ne sais pas si vous avez bien compris le principe, mais ce qu'on réalise, c'est un arbre. Et l'attribut pParent de la classe de base me permet de remonter l'arbre jusqu'à la racine.
Le problème c'est que cette syntaxe "unit.Parent=this" ne fonctionne pas. J'ai l'erreur : "Impossible d'accéder au membre protégé 'Unite.Parent' par l'intermédiaire d'un qualificateur de type 'Unite' ; le qualificateur doit être de type 'Group' (ou dérivé de celui-ci)". Je ne comprends pas du tout pourquoi vu que unit est un objet de la classe de base et que la méthode protégée est appelée à partir de la classe dérivée.
Quelqu'un a-t-il une solution ?
A voir également:
Problème pour accéder à une méthode de base à partir d'une classe dérivée
cs_Stephanie79
Messages postés6Date d'inscriptionmardi 1 juillet 2008StatutMembreDernière intervention11 septembre 2008 13 août 2008 à 15:23
Merci pour vos réponses à tous les deux.
Cipoli, ce que tu me dis ne vas pas fonctionner : je n'ai certainement pas donné assez d'explications.
La méthode AjouterUnite permet d'ajouter une unité à un groupe d'unités. Et à l'intérieur de cette méthode, je veux définir le parent de l'unité que j'ajoute au groupe. Et le parent de cet unité c'est ce groupe lui-même.
Donc si tu fais unit.Parent=this.Parent, tu lui dis que tu veux que son parent soit le parent du groupe. Par exemple, si mes classes voulaient représenter un arbre de famille, dans ta solution, tu dirais que l'enfant du père a pour père, le père du père donc le grand-père (ouf je sais pas si c'est très clair lol).
WishhhMaster, j'ai bien regardé le lien et en effet ça correspond à mon problème. Si j'ai bien compris ce qui est expliqué, ça ne fonctionne pas car c'est une autre instance de Unite et pas son instance courante. Mais je ne peux pas mettre le set en public, et à cause de la structure de mes classes je ne peux pas non plus faire AjouterGroup(Group unit).
J'ai essayé cette solution qui est un lien dans celui que tu m'as envoyé. : http://blogs.msdn.com/ericlippert/archive/2008/03/28/why-can-t-i-access-a-protected-member-from-a-derived-class-part-two-why-can-i.aspx
Ca consiste à englober la classe Group dans la classe Unite. Ca fonctionne mais ça me parait un peu bizarre. Après je ne suis qu'une novice donc je ne peux pas juger...
WishhhMaster
Messages postés327Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention10 avril 20108 13 août 2008 à 13:18
Salut,
Comme solution soit tu mets ton set en public, soit tu change public void AjouterUnite(Unite unit) and public void AjouterGroup(Group unit) (mais donc tu ne peux ajouter que des instances de Group...)