cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
14 sept. 2006 à 12:15
draluorg
Messages postés625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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) ?
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201436 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.
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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
...
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201436 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.
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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 ?
dgidg1971
Messages postés2Date d'inscriptionvendredi 21 mars 2008StatutMembreDernière intervention29 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();
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 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