Los modificadores de acceso en C# proporcionan control sobre la visibilidad y acceso a los miembros de las clases y estructuras.
Los modificadores de acceso son la forma de implementar encapsulación en C#, uno de los pilares de la programación orientada a objetos
Si quieres aprender más sobre Encapsulación
consulta el Curso de Programación Orientada a Objetos leer más
Modificadores de acceso
Los miembros de la clase base pueden tener diferentes niveles de accesibilidad: public
, protected
, internal
, protected internal
y private
.
La accesibilidad de estos miembros determina cómo pueden ser utilizados por la clase derivada.
Modificador | Accesible desde |
---|---|
public | Desde cualquier lugar. |
protected | Desde la clase base y las clases derivadas. |
internal | Dentro del mismo ensamblado. |
protected internal | Desde el mismo ensamblado o desde clases derivadas. |
private | Solo dentro de la clase. |
Modificador public
El modificador public permite que los miembros sean accesibles desde cualquier lugar del código, sin restricciones. Es útil para definir la API pública de una clase, permitiendo que otros componentes interactúen con ella.
public class Vehiculo
{
public string Marca { get; set; }
public string Modelo { get; set; }
public void Arrancar()
{
Console.WriteLine($"{Marca} {Modelo} ha arrancado.");
}
}
Aquí, las propiedades Marca
y Modelo
, así como el método Arrancar
, son públicos y pueden ser accedidos desde cualquier lugar donde se instancie un objeto Vehiculo
.
Modificador private
El modificador private restringe el acceso a los miembros únicamente a la clase o estructura que los define. Esto significa que ningún otro código fuera de esta clase puede acceder a estos miembros, promoviendo el encapsulamiento y la protección de los datos internos.
public class CuentaBancaria
{
private decimal saldo;
public CuentaBancaria(decimal saldoInicial)
{
saldo = saldoInicial;
}
public void Depositar(decimal cantidad)
{
saldo += cantidad;
}
public decimal ObtenerSaldo()
{
return saldo;
}
}
En este ejemplo, saldo
está declarado como private
, por lo que solo puede ser accedido y modificado mediante los métodos públicos Depositar
y ObtenerSaldo
.
Modificador internal
El modificador internal restringe el acceso a los miembros a cualquier código dentro del mismo ensamblado (es decir, el mismo proyecto o biblioteca). Esto es útil para componentes que deben ser accesibles en toda la aplicación, pero no expuestos públicamente a otros ensamblados.
internal class ServicioInterno
{
internal void Ejecutar()
{
Console.WriteLine("Ejecutando servicio interno.");
}
}
En este ejemplo, la clase ServicioInterno
y su método Ejecutar
solo son accesibles dentro del mismo ensamblado.
Modificador protected
El modificador protected permite que los miembros sean accesibles dentro de su clase y por cualquier clase derivada. Esto es útil para definir miembros que deben ser accesibles para la herencia pero no expuestos públicamente.
public class Animal
{
protected void Comer()
{
Console.WriteLine("El animal está comiendo.");
}
}
public class Perro : Animal
{
public void Ladrar()
{
Comer(); // Acceso permitido a método protegido de la clase base
Console.WriteLine("El perro está ladrando.");
}
}
En este ejemplo, el método Comer
es protected
y puede ser llamado por la clase derivada Perro
, pero no está disponible fuera de esta jerarquía de herencia.
Modificador protected internal
Se puede combinar internal y protected para permitir el acceso dentro del mismo ensamblado y en clases derivadas.
public class Base
{
protected internal void Metodo()
{
Console.WriteLine("Método accesible desde el mismo ensamblado o clases derivadas.");
}
}
public class Derivada : Base
{
public void LlamarMetodo()
{
Metodo(); // Acceso permitido
}
}
En este ejemplo, Metodo
puede ser accedido tanto por clases derivadas como por cualquier clase en el mismo ensamblado.