Una clase es un proyecto o prototipo definido por el usuario a partir del cual se crean objetos. Básicamente, una clase combina los campos y métodos (función miembro que define acciones) en una sola unidad. En C#, un usuario puede definir una clase dentro de otra clase. Este tipo de clases se conocen como clases anidadas. Esta función permite al usuario agrupar de forma lógica las clases que solo se utilizan en un lugar, lo que aumenta el uso de la encapsulación y crea un código más legible y fácil de mantener.
Sintaxis:
class Outer_class { // Code.. class Inner_class { // Code.. } }
Ejemplo:
C#
// C# program to illustrate the // concept of nested class using System; // Outer class public class Outer_class { // Method of outer class public void method1() { Console.WriteLine("Outer class method"); } // Inner class public class Inner_class { // Method of inner class public void method2() { Console.WriteLine("Inner class Method"); } } } // Driver Class public class GFG { // Main method static public void Main() { // Create the instance of outer class Outer_class obj1 = new Outer_class(); obj1.method1(); // This statement gives an error because // you are not allowed to access inner // class methods with outer class objects // obj1. method2(); // Creating an instance of inner class Outer_class.Inner_class obj2 = new Outer_class.Inner_class(); // Accessing the method of inner class obj2.method2(); } }
Producción:
Outer class method Inner class Method
Puntos importantes:
- Una clase anidada se puede declarar como private, public, protected, internal, protected internal o private protected .
- La clase externa no puede acceder a los miembros de la clase interna directamente como se muestra en el ejemplo anterior.
- Se le permite crear objetos de clase interna en clase externa.
- La clase interna puede acceder al miembro estático declarado en la clase externa como se muestra en el siguiente ejemplo:
Ejemplo:
C#
// C# program to illustrate the // concept of nested class accessing // static members of the outer class using System; // Outer class public class Outer_class { // Static data member of the outer class public static string str = "Geeksforgeeks"; // Inner class public class Inner_class { // Static method of Inner class public static void method1() { // Displaying the value of a // static member of the outer class Console.WriteLine(Outer_class.str); } } } // Driver Class public class GFG { // Main method static public void Main() { // Accessing static method1 // of the inner class Outer_class.Inner_class.method1(); } }
Producción :
Geeksforgeeks
- La clase interna puede acceder a un miembro no estático declarado en la clase externa como se muestra en el siguiente ejemplo:
Ejemplo:
C#
// C# program to illustrate the // concept of nested class // accessing non-static member // of the outer class using System; // Outer class public class Outer_class { // Non-static data // member of outer class public int number = 1000000; // Inner class public class Inner_class { // Static method of Inner class public static void method1() { // Creating the object of the outer class Outer_class obj = new Outer_class(); // Displaying the value of a // static member of the outer class // with the help of obj Console.WriteLine(obj.number); } } } // Driver Class public class GFG { // Main method static public void Main() { // Accessing static method1 // of inner class Outer_class.Inner_class.method1(); } }
Producción :
1000000
- La clase interna de la instancia puede acceder a un miembro no estático declarado en la clase externa como se muestra en el siguiente ejemplo:
Ejemplo:
C#
// C# program to illustrate the // concept of nested class // accessing non-static member // of the outer class using System; // Outer class public class Outer_class { // Non-static data // member of outer class public int number = 2000000; // Non-static reference to Inner_class // instance. public Inner_class Inner { get; set; } // Constructor to establish link between // instance of Outer_class to its // instance of the Inner_class public Outer_class() { this.Inner = new Inner_class(this); } // Inner class public class Inner_class { // private field to hold // reference to an instance // of the Outer_class private Outer_class obj; // constructor that establishes // a reference to the Outer_class // to use within an Inner_cass instance public Inner_class(Outer_class outer) { obj = outer; } // Method of Inner class public void method1() { // Displaying the value of a // member of the outer class // with the help of obj Console.WriteLine(obj.number); } } } // Driver Class public class GFG { // Main method public static void Main() { // Create instance of Outer_class Outer_class Outer = new Outer_class(); // Accessing static method1 // of inner class Outer.Inner.method1(); } }
Producción :
2000000
- El alcance de una clase anidada está limitado por el alcance de su clase envolvente.
- De forma predeterminada, la clase anidada es privada.
- En C#, un usuario puede heredar una clase (incluida la clase anidada) en otra clase.
Ejemplo:
C#
// C# program to illustrate the // concept inheritance using System; // Outer class public class Outer_class { // Method of outer class public void method1() { Console.WriteLine("Outer class method"); } // Inner class public class Inner_class { } } // Derived class public class Exclass : Outer_class { // Method of derived class public void func() { Console.WriteLine("Method of derived class"); } } // Driver Class public class GFG { // Main method static public void Main() { // Creating object of // the derived class Exclass obj = new Exclass(); obj.func(); obj.method1(); } }
Producción :
Method of derived class Outer class method
- En C#, el usuario puede heredar una clase anidada de la clase externa.
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA