2010-07-01 8 views
5

comment implémenter les classes extérieures et internes en C#Classe interne et externe classe en C#

i ont deux classes imbriquées

comme

class Outer 
{ 
    int TestVariable = 0; 
    class Inner 
    { 
     int InnerTestVariable = TestVariable // Need to access the variable "TestVariable" here 
    } 
} 

Son erreur montrant lors de la compilation.

Il peut être résolu par

1) Faire TestVariable statique

2) Passer une instance de la classe externe à la classe intérieure

mais java il n'y a pas besoin de créer une instance ou statique.

Puis-je utiliser la même fonctionnalité en C#?

+0

duplication possible de [Quelle est la meilleure façon d'accéder au contrôle dans la classe englobante à partir de la classe imbriquée?] (Http://stackoverflow.com/questions/185124/whats-the-best-way-of-accessing- the-control-in-the-enclosing-class-from-the-nes) – nawfal

Répondre

11

Non, C# n'a pas la même sémantique que Java dans ce cas. Vous pouvez soit créer TestVariableconst, static, soit passer une instance de Outer au constructeur de Inner comme vous l'avez déjà noté.

0

variable make internal ou passer à son intérieur constructor

+0

Si je déclare la variable comme interne, elle n'est pas accessible dans la classe interne –

3

Vous pouvez créer une instance de classe interne sans avoir même instance de la classe externe, ce qui devrait se produire dans ce cas, vous pensez? Voilà pourquoi vous ne pouvez pas l'utiliser

Outer.Inner iner = new Outer.Inner(); // what will be InnerTestVariable value in this case? There is no instance of Outer class, and TestVariable can exist only in instance of Outer 

Voici une des façons de le faire

class Outer 
    { 
     internal int TestVariable=0; 
     internal class Inner 
     { 
      public Inner(int testVariable) 
      { 
       InnerTestVariable = testVariable; 
      } 
      int InnerTestVariable; //Need to access the variabe "TestVariable" here 
     } 
     internal Inner CreateInner() 
     { 
      return new Inner(TestVariable); 
     } 
    } 
0

Réponse courte: Non,

Vous aurez besoin d'une certaine façon d'injecter la TestVariable dans votre Classe intérieure. Faire votre testVariable pourrait potentiellement conduire à un comportement indésirable. Ma suggestion serait de l'injecter via le constructeur.

Questions connexes