7
votes

Problème de type imbriqué

J'ai juste essayé de créer cette implémentation simple: xxx

Si je le compile, il se plaindre:

ne peut pas accéder à un élément non statique de type externe 'A.TEST' via type imbriqué 'B.Test.TestClass'

Je n'aime pas la solution de paramétrage: statique int abc = 0;

existe une autre solution pour cela?


1 commentaires

@CyberRrew: C'est indiqué dans l'erreur: A = Test, B = Test.TestClass "


4 Réponses :


9
votes

La classe interne a besoin d'une référence à une instance de la classe extérieure: xxx


1 commentaires

Jeez vous êtes rapide! J'ai pris 4 petites mines sanglantes! Peut-être que je devrais apprendre à toucher le type! = (



15
votes

Vous venez probablement d'un antécédents Java où ce code fonctionnerait comme prévu.

en C #, les types imbriqués sont statiques (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 membre abc .


0 commentaires

1
votes

Je ne vois pas pourquoi testclass devrait changer le parent Test quand c'est une classe d'instance.

Peut-être que moi Lumière sur ceci: xxx

Utilisez comme ceci: xxx


0 commentaires

1
votes

de Les classes nichées C # sont comme des classes imbriquées C ++, pas les classes intérieures Java

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.

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é.

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.


0 commentaires