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 deCar
petrolEngine.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