Clases anidadas en C#

Luqman Khan 12 octubre 2023
  1. Clases anidadas en C#
  2. Razones para usar clases anidadas en C#
  3. Implementar Clases Anidadas en C#
Clases anidadas en C#

Este tutorial presentará clases anidadas en el lenguaje de programación C#.

Una clase es un modelo o patrón definido por el usuario y utilizado para construir cosas. Es una instancia única que combina métodos y campos (funciones miembro que definen acciones).

Clases anidadas en C#

En C#, un usuario puede definir una clase dentro de otra, llamadas clases anidadas. Su propósito principal es limitar el alcance de la clase anidada.

En comparación con las clases regulares, las clases anidadas ofrecen la posibilidad adicional de protección y modificadores privados. Si solo necesita invocar esta clase desde el contexto de la clase principal, generalmente es una excelente idea definirla como una clase anidada.

Supongamos que esta clase se utilizará fuera de la biblioteca. Por lo general, es más accesible para el usuario definirlo como una clase separada del mismo nivel, independientemente de si las dos clases tienen alguna relación conceptual.

Incluso si es técnicamente factible construir una clase pública anidada dentro de una clase principal pública, rara vez es una buena idea.

Razones para usar clases anidadas en C#

Hay varias razones de peso para usar clases anidadas.

  • Es una técnica práctica de agrupamiento de clases que solo se utiliza una vez.
  • Se mejora la encapsulación.
  • Las clases anidadas pueden hacer que el código sea más fácil de leer y mantener.
  • Facilita la agrupación lógica de clases.

Si una clase solo es valiosa para otra clase, tiene sentido incluirla en esa clase para mantener las dos juntas. Se simplifica más al anidar tales clases auxiliares.

Junto con los modificadores de acceso público e interno, una clase anidada puede incluir modificadores de acceso interno privado y protegido.

Hay ocasiones en las que es beneficioso implementar una interfaz devuelta desde dentro de la clase. Aún así, la implementación de esa interfaz debe estar completamente oculta del mundo exterior.

Por ejemplo, antes de que se introdujera yield en C#, incrustamos la implementación del enumerador dentro de una colección como una clase privada para construirlos. Los miembros de la colección tendrían acceso simple, pero el mundo exterior no necesitaría ni vería las complejidades de cómo se hace esto.

Implementar Clases Anidadas en C#

A continuación se muestra el código para ilustrar el concepto de clase anidada.

La clase Programa es la clase principal del programa, que tiene un método main público estático. Creamos la clase externa Outside_class como pública y otra clase interna llamada Inside_class como pública.

Además, creamos dos métodos: dentro de Outside_class y otro dentro de Inside_class. No podemos acceder a los métodos Inside_class desde los objetos Outside_class.

Para acceder al método dentro de este, necesitamos crear una instancia de Inside_class.

using System;

public class Program {
  public static void Main(string[] args) {
    // create instance of outside class
    Outside_class outinstance = new Outside_class();
    outinstance.outerclassmethod();
    // you can't access inside class methods from outside class objects
    // create instance of inside class
    Outside_class.Inside_class insideinstance = new Outside_class.Inside_class();
    // accessing the method of inside class.
    insideinstance.insideclassmethod();
    Console.Read();
  }
}
public class Outside_class {
  // Method of outside class
  public void outerclassmethod() {
    Console.WriteLine("here is Outside class method");
  }
  // Inner class
  public class Inside_class {
    // Method of inside class
    public void insideclassmethod() {
      Console.WriteLine("here is Inside class Method");
    }
  }
}

A continuación se muestra una imagen del código que usa clases anidadas con salida.

Clases anidadas de código

Ya está claro que las clases anidadas hacen que nuestro código sea fácilmente legible. Podemos juntar todas esas clases usadas entre sí.

Artículo relacionado - Csharp Class