Junior
¿Cuáles son los modificadores de acceso en C#?
sobes.tech AI
Respuesta de la IA
En C# existen los siguientes modificadores de acceso:
- public: El acceso no está restringido. Los miembros marcados como
publicson accesibles desde cualquier lugar donde esté accesible su tipo contenedor. - private: El acceso está restringido a su tipo contenedor. Los miembros marcados como
privatesolo son accesibles desde el código dentro de la misma clase o estructura. - protected: El acceso está restringido al tipo que lo contiene o a los tipos derivados de ese tipo. Los miembros marcados como
protectedson accesibles dentro de su clase y en las clases derivadas. - internal: El acceso está restringido a la compilación actual (.dll o .exe). Los miembros marcados como
internalson accesibles desde cualquier lugar dentro de la misma compilación. - protected internal: El acceso está restringido a la compilación actual o a los tipos derivados del tipo que lo contiene en otras compilaciones. Es una combinación de
protectedeinternal. - private protected: El acceso está restringido al tipo que lo contiene o a los tipos derivados de ese tipo solo en la misma compilación. Es una combinación de
privateyprotected.
// Ejemplo de uso de modificadores de acceso
public class MyClass
{
public int PublicField; // Accesible desde cualquier lugar
private int PrivateField; // Solo accesible dentro de MyClass
protected int ProtectedField; // Accesible dentro de MyClass y en clases derivadas
internal int InternalField; // Accesible dentro de la compilación actual
protected internal int ProtectedInternalField; // Accesible dentro de la compilación actual O en clases derivadas
private protected int PrivateProtectedField; // Accesible dentro de MyClass O en clases derivadas en esta misma compilación
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Error - campo privado no accesible en la herencia
ProtectedInternalField = 40; // OK
PrivateProtectedField = 50; // OK
}
}
public class AnotherClassInSameAssembly
{
void AnotherMethod()
{
MyClass mc = new MyClass();
mc.PublicField = 1; // OK
mc.InternalField = 2; // OK
mc.ProtectedInternalField = 3; // OK
// mc.PrivateField = 4; // Error
// mc.ProtectedField = 5; // Error
// mc.PrivateProtectedField = 6; // Error
}
}