2010-07-01 30 views
5

cómo implementar clases exteriores interiores en C#clase interna y externa de clase en C#

Tengo dos clases anidadas

como

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

Su muestra de error durante la compilación.

Puede ser resuelto por

1) Hacer TestVariable como estática

2) Pasando una instancia de clase exterior a clase interna

pero en java no hay necesidad de crear Instancia o estático

¿Puedo usar la misma funcionalidad en C# también?

+0

posible duplicado de [¿Cuál es la mejor forma de acceder al control en la clase adjunta de la clase anidada?] (Http://stackoverflow.com/questions/185124/whats-the-best-way-of-accessing- the-control-in-the-enclosing-class-from-the-nes) – nawfal

Respuesta

11

No, C# no tiene la misma semántica que Java en este caso. Puede hacer TestVariableconst, static, o pasar una instancia de Outer al constructor de Inner como ya ha indicado.

0

variable tienen internal o pasar al interior de constructor

+0

Si declaro la variable como interna, no es accesible dentro de la clase interna –

3

Puede crear una instancia de la clase interna sin ni siquiera tener una instancia de la clase externa, lo que debería ocurrir en ese caso te parece? Es por eso que no se puede utilizar

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 

Esta es una de las maneras de hacerlo

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

Respuesta corta: No,

De alguna manera tendrá que inyectar el TestVariable en su Clase interna Hacer su testVariable podría conducir a un comportamiento no deseado. Mi sugerencia sería inyectarlo a través del constructor.

Cuestiones relacionadas