Classes imbriquées [Résolu]

cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 14 sept. 2006 à 12:15 - Dernière réponse : draluorg 627 Messages postés vendredi 23 avril 2004Date d'inscription 25 novembre 2010 Dernière intervention
- 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
Afficher la suite 

9 réponses

Répondre au sujet
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 sept. 2006 à 16:52
+3
Utile
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#]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 sept. 2006 à 14:01
0
Utile
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#]
Commenter la réponse de sebmafate
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 14 sept. 2006 à 16:39
0
Utile
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
Commenter la réponse de cs_mathmax
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 14 sept. 2006 à 16:43
0
Utile
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#]
Commenter la réponse de sebmafate
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 14 sept. 2006 à 16:48
0
Utile
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
Commenter la réponse de cs_mathmax
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 14 sept. 2006 à 17:00
0
Utile
ok merci pour tes réponses sebmafate
J'admire aussi la réactivité !

Mathmax
Commenter la réponse de cs_mathmax
dgidg1971 2 Messages postés vendredi 21 mars 2008Date d'inscription 29 avril 2009 Dernière intervention - 2 avril 2009 à 16:14
0
Utile
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();
Commenter la réponse de dgidg1971
cs_Malkuth 278 Messages postés samedi 22 février 2003Date d'inscription 24 avril 2013 Dernière intervention - 2 avril 2009 à 16:29
0
Utile
[../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
Commenter la réponse de cs_Malkuth
draluorg 627 Messages postés vendredi 23 avril 2004Date d'inscription 25 novembre 2010 Dernière intervention - 10 oct. 2009 à 00:22
0
Utile
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
Commenter la réponse de draluorg

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.