Entendiendo los Modificadores de Acceso en C# (Especificadores) con Ejemplos Prácticos
¿Qué son los Modificadores de Acceso en C#?
Los modificadores de acceso—palabras clave que controlan la visibilidad de tipos y miembros de tipos—son una piedra angular del encapsulamiento en C#. Determinan qué código puede referenciar una clase, propiedad o método, asegurando que solo las partes previstas de un programa puedan interactuar con detalles de implementación internos.
Hay seis modificadores de acceso disponibles en C#:
- Private
- Public
- Protected
- Internal
- Protected Internal
- Private Protected
En este tutorial aprenderá:
- Qué son los modificadores de acceso y por qué importan
- Modificadores Private, Public, Protected e Internal en profundidad
- Cómo los constructores inicializan campos de clase
Modificadores de Acceso Private
Marcar un miembro como private restringe su uso a la clase contenedora únicamente. Código externo—incluyendo otras clases dentro del mismo ensamblado—no puede referenciar un miembro private.
Ejemplo de Modificador de Acceso Private
Modifiquemos SetTutorial en Tutorial.cs para ilustrar esta regla. Cambie la palabra clave public a private:

Ahora cambie a Program.cs. El compilador subrayará la llamada a SetTutorial con una línea roja ondulada, indicando que el método es inaccesible desde esta ubicación.

Modificadores de Acceso Public
Los miembros públicos son visibles para cualquier código que pueda referenciar el tipo contenedor. Este es el valor por defecto para miembros que no especifican un modificador de acceso.
Ejemplo de Modificador de Acceso Public

Porque SetTutorial se declara public, puede ser llamado desde Program.cs sin errores de compilador.
Modificadores de Acceso Protected
Un miembro protected es accesible solo dentro de su propia clase y cualquier clase derivada. Este nivel de acceso es ideal para crear clases base reutilizables mientras se salvaguarda la implementación interna.
Modificadores de Acceso Internal
Los miembros internal son visibles para todo el código dentro del mismo ensamblado pero no para código en otros ensamblados. Esto es útil para componentes de librería que deberían exponerse solo a los consumidores de la librería.
Constructores en C#
Los constructores inicializan una nueva instancia de una clase. Comparten el nombre de la clase, no tienen tipo de retorno e invocados automáticamente cuando se usa new.
- El acceso por defecto para un constructor es
publica menos que se especifique lo contrario. - Un constructor no puede declarar un tipo de retorno.
Ejemplo de un Constructor en C#
Demostraremos un constructor que establece valores por defecto para TutorialID y TutorialName cuando se crea un objeto Tutorial.
Paso 1) Añada el constructor a Tutorial.cs:

Explicación del Código
- El método llamado
Tutorialse trata como constructor. Se ejecuta automáticamente cuando se crea una instancia. - El constructor asigna
0aTutorialIDy"Default"aTutorialName, asegurando estado inicial consistente.
En Program.cs, elimine la llamada a SetTutorial para enfocarse en el comportamiento del constructor:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Tutorial { public int TutorialID; public string TutorialName; public Tutorial() { TutorialID = 0; TutorialName = "Default"; } public void SetTutorial(int pID, string pName) { TutorialID = pID; TutorialName = pName; } public string GetTutorial() { return TutorialName; } static void Main(string[] args) { Tutorial pTutor = new Tutorial(); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } } Explicación del Código
- Se crea una instancia de
Tutorialcon la palabra clavenew. - El método
GetTutorialrecupera elTutorialNamepor defecto, que luego se muestra víaConsole.WriteLine.
Al ejecutarse, la consola muestra:
Salida:

La salida confirma que el constructor se ejecutó e inicializó TutorialName a "Default".
Nota: El valor "Default" proviene del constructor, no de código externo.
Resumen
- Los modificadores de acceso definen la visibilidad de miembros de clase.
privateoculta miembros de todo código externo.publicexpone miembros a cualquier código referenciador.protectedrestringe miembros a la clase y sus descendientes.internallimita visibilidad al ensamblado actual.- Los constructores inicializan campos cuando un objeto se instancia.
Lenguaje C
- Entendiendo los modificadores de acceso en C#: Public, Private, Protected, Internal y más
- Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
- Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
- Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
- Funciones en C++ Explicadas con Ejemplos de Código Prácticos
- Dominando Colecciones en C#: Tutorial Práctico con Ejemplos del Mundo Real
- Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
- Función round() en Python explicada con ejemplos prácticos
- Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
- Python timeit(): medición de tiempo de ejecución con ejemplos prácticos
- Python list.count(): Guía Experta con Ejemplos Prácticos