c# .net boo nested-class class-structure

c# nested class



Clases anidadas de.NET (3)

  1. Field tiene una clase pública anidada llamada FieldA
  2. FieldA hereda de Field
  3. por lo tanto, siempre puede acceder a FieldA desde FieldA .

La referencia no está creando cadenas infinitas, simplemente está apuntando a la misma clase. ( algún código de prueba )

Cuando accede a FieldA.FieldA , este último FieldA es accesible debido a que el antiguo FieldA es una instancia de Field por lo que el último FieldA realmente accede a Field.FieldA

La biblioteca de clases actual en la que estoy trabajando tendrá una clase base (Campo) con más de 50 tipos específicos de "campos" que heredarán de "Campo" y anidados para mantener la legibilidad. Por ejemplo...

abstract class Field { public int Length { get; set; } public class FieldA : Field { public static void DoSomething() { Console.WriteLine("Did something."); } } }

Hasta ahora todo se ve bien y puedo usar el código como se muestra:

class Program { static void Main(string[] args) { Field.FieldA.DoSomething(); } }

Sin embargo, ¿por qué funciona esto también? ¿Qué está sucediendo aquí que permite al compilador / IDE intellisense continuar encadenando estos "FieldA"?

class Program { static void Main(string[] args) { Field.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.DoSomething(); } }

No es una aplicación que se rompa de ninguna manera, pero pensó que era peculiar. Hace lo mismo en Boo (que es el lenguaje real que se usa para la biblioteca).


FieldA hereda una referencia a la clase FieldA que hereda una referencia a la clase FieldA que hereda una referencia a la clase FieldA que hereda una referencia a la clase FieldA que hereda una referencia a la clase FieldA que hereda una referencia a la clase FieldA que hereda una referencia a la clase FieldA que ...

Funciona porque eso es lo que le dijiste que hiciera.


Parece que querías algo así como:

abstract class Field { public int Length { get; set; } } public class FieldA : Field { public static void DoSomething() { Console.WriteLine("Did something."); } }

De lo contrario, estás definiendo una clase base con una clase interna, que los herederos también obtendrán. Entonces, cuando heredas de la clase externa para formar la clase interna, estás comenzando un ciclo.