Classes imbriquées

Résolu
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 14 sept. 2006 à 12:15
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 10 oct. 2009 à 00:22
Bonjour,

Pouvez-vous m'aider sur ce problème de classes immbriquées :
J'ai une classe 2 imbriquée dans une classe 1. Mes 2 classes ne sont pas statique. Dans une méthode non statique de la classe 2, je souhaite utiliser une méthode non statique de la classe 1. Quand je fais ceci, j'obtiens le message suivant : cannot access non-static methode "maMethode" in a static context. Je voulais savoir pourquoi je suis dans un contexte statique ?
D'autre part, comment acceder à l'instance de ma classe 1 dans ma classe 2 ? Je peux évidement passer une instance de ma classe 1 dans le constructeur de ma classe 2, mais n'existe t-il pas une méthode plus simple (un mot clé un peu comme this mais qui concernerait l'objet en cours de la classe 1) ?

merci d'avance
Mathmax

9 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 sept. 2006 à 16:52
non... rien.
Car cette organisation logique permet de structure ton code... ce n'est pas une "organisation d'instance".

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 sept. 2006 à 14:01
hum... faut pas confondre classes imbriquées (neasted class) et propriétés !

souvent, lorsque l'on crée une classe imbriquée, on donne la référence de l'objet parent (quand c'est nécessaire). Car ce n'est pas parce que les classes sont imbriquées qu'il existe une dépendance entres-elles.

Dans un context statique (ex : public static void Class2.Mafonction(); ) tu n'as pas le droit d'utiliser des membres de l'instance. Hors, ce que tu fais là, c'est justement ça. Tu essayes d'utiliser une méthode d'une instance de la classe1 à partir d'une méthode statique de la classe2. Sauf biensur si tu passes ta classe1 en paramètre de ta méthode.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
14 sept. 2006 à 16:39
J'ai dû mal m'exprimer. La méthode de ma classe 2 n'est pas déclaré statique. Voici un exemple du code :
public class MaClass1
{
    ...
    public void Methode1()
    {
    ...
    }
    ...
    public class MaClass2
    {
        ...
        public void Methode2()

        {

        ...
        Methode1();  <-- utilisation de la Methode1 dans la Methode2 : erreur : cannot access non-static methode "maMethode" in a static context
        ... 

        }
        ...
    }
}

Mathmax
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 sept. 2006 à 16:43
ok... mais c'est toujours pareil... ce n'est pas parce que MaClasse2 est contenue dans MaClasse1 qu'elle peut voir (et utiliser) les méthodes de MaClasse1.

Il faut pour cela donner une référence de MaClasse1 à MaClasse2... par l'intermédiaire du constructeur par exemple.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0

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

Posez votre question
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
14 sept. 2006 à 16:48
D'accord, on est obligé de faire comme celà alors ? N'y a t-il pas un mot clé un peu comme this mais qui désigne la classe parent ? Sinon pourquoi me dit-on que je suis dans un context statique ?

Mathmax
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
14 sept. 2006 à 17:00
ok merci pour tes réponses sebmafate
J'admire aussi la réactivité !

Mathmax
0
dgidg1971 Messages postés 2 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 29 avril 2009
2 avril 2009 à 16:14
Réactif mais pas juste: Tu peux en effet référencer la méthode de la classe englobante (MaClass1) à partir de la classe incluse (MaClass2). L'appel est le suivant:
MaClass1.this.Methode1();
0
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
2 avril 2009 à 16:29
[../auteur/DGIDG1971/1348000.aspx dgidg1971] :

euh j'aimerais bien savoir comment le compilateur arrive a résoudre un truc pareil?
En tout cas ta syntaxe est pas du tout reconnue par mon intélissens ni par mon compilateur...
alors ou bien on parle pas le même C# ou bien j'ai loupé un truc
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
10 oct. 2009 à 00:22
Bon ça date mais pour le prochain qui comme moi tombera ici lors d'un recherche, la réponse se trouve à cette adresse: MSDN Types imbriqués (Guide de programmation C#)

http://msdn.microsoft.com/fr-fr/library/ms173120(VS.80).aspx

Ca fait un peu bricolage mais bon, c'est apparament comme ça...


[i]________________________________

Quand on pose une question on est con 5 minutes!
Quand on ne la pose pas on le reste toute sa vie.../i
0
Rejoignez-nous