C # - Encapsulación
Encapsulationse define como "el proceso de incluir uno o más elementos dentro de un paquete físico o lógico". La encapsulación, en la metodología de programación orientada a objetos, impide el acceso a los detalles de implementación.
La abstracción y la encapsulación son características relacionadas en la programación orientada a objetos. La abstracción permite hacer visible la información relevante y la encapsulación permite al programador implementar el nivel de abstracción deseado .
La encapsulación se implementa utilizando access specifiers. Unaccess specifierdefine el alcance y la visibilidad de un miembro de la clase. C # admite los siguientes especificadores de acceso:
- Public
- Private
- Protected
- Internal
- Interior protegido
Especificador de acceso público
El especificador de acceso público permite a una clase exponer sus variables miembro y funciones miembro a otras funciones y objetos. Se puede acceder a cualquier miembro público desde fuera de la clase.
El siguiente ejemplo ilustra esto:
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
public double length;
public double width;
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Length: 4.5
Width: 3.5
Area: 15.75
En el ejemplo anterior, las variables miembro length y width se declaran public, por lo que se puede acceder a ellos desde la función Main () utilizando una instancia de la clase Rectangle, llamada r.
La función miembro Display () y GetArea () también pueden acceder a estas variables directamente sin usar ninguna instancia de la clase.
Las funciones miembro Display () también se declaranpublic, por lo que también se puede acceder desde Main () usando una instancia de la clase Rectangle, llamadar.
Especificador de acceso privado
El especificador de acceso privado permite que una clase oculte sus variables miembro y funciones miembro de otras funciones y objetos. Solo las funciones de la misma clase pueden acceder a sus miembros privados. Incluso una instancia de una clase no puede acceder a sus miembros privados.
El siguiente ejemplo ilustra esto:
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
private double length;
private double width;
public void Acceptdetails() {
Console.WriteLine("Enter Length: ");
length = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter Width: ");
width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52
En el ejemplo anterior, las variables miembro length y width se declaran private, por lo que no se puede acceder a ellos desde la función Main (). Las funciones miembro AcceptDetails () y Display () pueden acceder a estas variables. Dado que las funciones miembro AcceptDetails () y Display () están declaradaspublic, se puede acceder a ellos desde Main () usando una instancia de la clase Rectangle, llamadar.
Especificador de acceso protegido
El especificador de acceso protegido permite que una clase secundaria acceda a las variables miembro y funciones miembro de su clase base. De esta forma ayuda a implementar la herencia. Discutiremos esto con más detalle en el capítulo de herencia.
Especificador de acceso interno
El especificador de acceso interno permite que una clase exponga sus variables miembro y funciones miembro a otras funciones y objetos en el ensamblado actual. En otras palabras, se puede acceder a cualquier miembro con un especificador de acceso interno desde cualquier clase o método definido dentro de la aplicación en la que se define el miembro.
El siguiente programa ilustra esto:
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
internal double length;
internal double width;
double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Length: 4.5
Width: 3.5
Area: 15.75
En el ejemplo anterior, observe que la función miembro GetArea () no se declara con ningún especificador de acceso. Entonces, ¿cuál sería el especificador de acceso predeterminado de un miembro de la clase si no mencionamos ninguno? Esprivate.
Especificador de acceso interno protegido
El especificador de acceso interno protegido permite que una clase oculte sus variables miembro y funciones miembro de otros objetos y funciones de clase, excepto una clase secundaria dentro de la misma aplicación. Esto también se usa al implementar la herencia.