J'ai juste essayé de créer cette implémentation simple: Si je le compile, il se plaindre: p> ne peut pas accéder à un élément non statique de type externe 'A.TEST' via type imbriqué 'B.Test.TestClass' P>
blockquote> Je n'aime pas la solution de paramétrage: existe une autre solution pour cela? P> p >
statique int abc = 0; code> p>
4 Réponses :
La classe interne a besoin d'une référence à une instance de la classe extérieure:
Jeez vous êtes rapide! J'ai pris 4 petites mines sanglantes! Peut-être que je devrais apprendre à toucher le type! = (
Vous venez probablement d'un antécédents Java où ce code fonctionnerait comme prévu. P>
en C #, les types imbriqués sont statiques em> (dans le langage de Java), c'est-à-dire qu'ils ne sont pas liés à une instance de la classe mère. C'est pourquoi votre code échoue. Vous devez passer une instance de la classe mère à la classe enfant et accéder à son em> membre abc code>. P>
Je ne vois pas pourquoi Peut-être que moi Lumière sur ceci: p> Utilisez comme ceci: p> testclass code> devrait strud> changer le parent
Test code> quand c'est une classe d'instance.
de Les classes nichées C # sont comme des classes imbriquées C ++, pas les classes intérieures Java P>
Quand vous déclarez une classe à l'intérieur une autre classe, la classe intérieure encore agit comme une classe normale. La nidification contrôle l'accès et la visibilité, mais Pas de comportement. En d'autres termes, tous les règles que vous avez apprises sur régulière Les classes s'appliquent également aux classes imbriquées. P>
en Java, la classe intérieure a un secret ce membre de 0 $ qui se souvient de la cas de la classe extérieure à laquelle C'était lié. P>
En d'autres termes, les classes intérieures Java sont sucre syntaxique qui n'est pas disponible c #. En C #, vous devez le faire manuellement. p> blockQuote>
@CyberRrew: C'est indiqué dans l'erreur: A = Test, B = Test.TestClass "