Clase anidada de C#
C# Clase anidada
En este tutorial, aprenderá sobre la clase anidada en C# con la ayuda de ejemplos.
En C#, podemos definir una clase dentro de otra clase. Se conoce como una clase anidada. Por ejemplo,
class OuterClass {
...
class InnerClass {
...
}
}
Aquí, hemos creado la clase InnerClass dentro de la clase OuterClass . El InnerClass se llama la clase anidada.
Acceso a miembros
Para acceder a los miembros de las clases anidadas, primero debemos crear sus objetos.
1.Crear objeto de clase exterior
OuterClass obj1 = new OuterClass();
Aquí, hemos creado el obj1 objeto de la clase OuterClass .
OuterClass.InnerClass obj2 = new OuterClass.InnerClass();
Puedes ver que hemos usado OuterClass.InnerClass para crear el obj2 objeto de la clase interna. Esto se debe a que InnerClass es la clase anidada de OuterClass .
Una vez que hemos creado el objeto de las clases individuales, podemos usar el nombre del objeto y el operador punto para acceder a los miembros de cada clase.
Ejemplo:clase anidada de C#
using System;
namespace CsharpNestedClass {
// outer class
public class Car {
public void displayCar() {
Console.WriteLine("Car: Bugatti");
}
// inner class
public class Engine {
public void displayEngine() {
Console.WriteLine("Engine: Petrol Engine");
}
}
}
class Program {
static void Main(string[] args) {
// create object of outer class
Car sportsCar = new Car();
// access method of outer class
sportsCar.displayCar();
// create object of inner class
Car.Engine petrolEngine = new Car.Engine();
// access member of inner class
petrolEngine.displayEngine();
Console.ReadLine();
}
}
} Salida
Car: Bugatti Engine: Petrol Engine
En el programa anterior, hemos anidado el Engine clase dentro del Car clase.
Dentro del Program class, hemos creado objetos tanto de la clase externa como de la clase interna.
// object of outer class
Car sportsCar = new Car();
// object of nested class
Car.Engine petrolEngine = new Car.Engine(); Luego usamos estos objetos para acceder a los métodos de cada clase.
sportsCar.displayCar()- acceda al método de clase externa usando el objeto deCarpetrolEngine.displayEngine()- acceda al método de clase interna usando el objeto deEngine
Nota :No podemos acceder a los miembros de la clase interna usando el objeto de la clase externa. Por ejemplo,
// error code
sportsCar.displayEngine();
Aquí, no podemos acceder al displayEngine() método de la clase interna Engine usando el deportivo objeto de la clase exterior.
Acceder a los miembros de la clase externa dentro de la clase interna
Podemos acceder a miembros de la clase externa dentro de la clase interna. Para esto usamos un objeto de la clase externa. Por ejemplo,
using System;
namespace CsharpNestedClass {
// outer class
public class Car {
public string brand = "Bugatti";
// nested class
public class Engine {
public void displayCar() {
// object of outer class
Car sportsCar = new Car();
Console.WriteLine("Brand: " + sportsCar.brand);
}
}
}
class Program {
static void Main(string[] args) {
// object of inner class
Car.Engine engineObj = new Car.Engine();
engineObj.displayCar();
Console.ReadLine();
}
}
} Salida
Brand: Bugatti
En el ejemplo anterior, hemos anidado el Engine clase dentro del Car clase. Fíjate en la línea,
// inside Engine class
Car sportsCar = new Car();
Console.WriteLine("Brand: " + sportsCar.brand);
Aquí, hemos usado el objeto de la clase Car para acceder al campo marca .
Acceso a miembros estáticos de la clase externa dentro de la clase interna
Si necesitamos acceder a miembros estáticos de la clase externa, no necesitamos crear su objeto. En su lugar, podemos usar directamente el nombre de la clase externa. Por ejemplo,
using System;
namespace CsharpNestedClass {
// outer class
public class Car {
//static member of outer class
public static string brand = "Bugatti";
// nested class
public class Engine {
public void display() {
// access static member of outer class
Console.WriteLine("Brand: " + Car.brand);
}
}
}
class Program {
static void Main(string[] args) {
// object of inner class
Car.Engine obj = new Car.Engine();
obj.display();
Console.ReadLine();
}
}
} Salida
Brand: Bugatti
En el ejemplo anterior, hemos anidado el Engine clase dentro del Car clase. Car tiene un campo estático marca .
Aquí hemos accedido al campo estático marca dentro de la clase interna (Engine ) usando el nombre de la clase externa (Car ).
Console.WriteLine("Brand: " + Car.brand); Herencia de clase externa
Como una clase normal, también podemos heredar la clase externa. Por ejemplo,
using System;
namespace CsharpNestedClass {
// outer class
class Computer {
public void display() {
Console.WriteLine("Method of Computer class");
}
// nested class
public class CPU {
}
}
class Laptop : Computer {
}
class Program {
static void Main(string[] args) {
// object of derived class
Laptop obj = new Laptop();
obj.display();
Console.ReadLine();
}
}
} Salida
Method of Computer class
En el ejemplo anterior, hemos derivado la clase Laptop de la clase exterior Computer .
Debido a esto, podemos acceder al display() método de la clase Computer usando el objeto de la clase Laptop .
Heredar clase interna
En C#, también podemos heredar la clase interna. Por ejemplo,
using System;
namespace CsharpNestedClass {
// outer class
class Computer {
// nested class
public class CPU {
public void display() {
Console.WriteLine("Method of CPU class");
}
}
}
// inheriting inner class
class Laptop : Computer.CPU {
}
class Program {
static void Main(string[] args) {
// object of derived class
Laptop obj = new Laptop();
obj.display();
Console.ReadLine();
}
}
} Salida
Method of CPU class
En el ejemplo anterior, hemos derivado el Laptop clase de la clase interna CPU .
Observe que hemos usado el nombre de la clase externa junto con la clase anidada para heredar la clase interna.
class Laptop : Computer.CPU {} Lenguaje C