Está en la página 1de 3

Modificadores de acceso

Los modificadores de acceso, como su nombre indica, determinan desde qu� clases se
puede acceder a un determinado elemento. En Java tenemos 4 tipos: public, private,
protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero
se suele conocer como default o package-private.
Todos los tipos y miembros de tipo tienen un nivel de accesibilidad que controla si
se pueden usar desde otro c�digo del ensamblado u otros ensamblados. Puede usar los
siguientes modificadores de acceso para especificar la accesibilidad de un tipo o
miembro cuando lo declare:
public
Puede obtener acceso al tipo o miembro cualquier otro c�digo del mismo ensamblado o
de otro ensamblado que haga referencia a �ste.
private
Solamente el c�digo de la misma clase o estructura puede acceder al tipo o miembro
aparte este modificador s�lo puede utilizarse sobre interfaces y clases internas,
no sobre clases o interfaces de primer nivel, dado que esto no tendr�a sentido.
Es importante destacar tambi�n que private convierte los elementos en privados para
otras clases, no para otras instancias de la clase. Es decir, un objeto de una
determinada clase puede acceder a los miembros privados de otro objeto de la misma
clase
protected
Solamente el c�digo de la misma clase, o de una clase derivada de esa clase, puede
acceder al tipo o miembro.
internal
Puede obtener acceso al tipo o miembro cualquier c�digo del mismo ensamblado, pero
no de un ensamblado distinto.

protected internal Cualquier c�digo del ensamblado en el que se ha declarado, o


desde cualquier clase derivada de otro ensamblado, puede acceder al tipo o miembro.

private protected El c�digo de la misma clase, o de un tipo derivado de esa clase,


puede acceder al tipo o miembro solo dentro de su ensamblado que declara.
No todos los tipos o miembros pueden usar todos los modificadores de acceso en
todos los contextos; en algunos casos la accesibilidad de un miembro de tipo est�
restringida por la accesibilidad de su tipo contenedor. En las secciones siguientes
se proporcionan m�s detalles sobre la accesibilidad.

Accesibilidad de clase y estructura


Las clases y estructuras que se declaran directamente en un espacio de nombres (es
decir, que no est�n anidadas en otras clases o estructuras) pueden ser p�blicas o
internas. Si no se especifica ning�n modificador de acceso, el valor predeterminado
es internal.

Los miembros de estructura, incluidas las clases y las estructuras anidadas, se


pueden declarar como public, internal, o private. Los miembros de clase, incluidas
las clases y las estructuras anidadas, pueden ser public, protected internal,
protected, internal, private protected o private. El nivel de acceso de los
miembros de clase y los miembros de estructura, incluidas las clases y estructuras
anidadas, es private de forma predeterminada. Los tipos anidados privados no son
accesibles desde fuera del tipo contenedor.

Las clases derivadas no pueden tener mayor accesibilidad que sus tipos base. En
otras palabras, no puede tener una clase p�blica B que derive de una clase interna
A. Si se permitiera, convertir�a A en p�blico, porque todos los miembros protegidos
o internos de A son accesibles desde la clase derivada.

Puede habilitar otros ensamblados concretos para acceder a los tipos internos
mediante InternalsVisibleToAttribute. Para m�s informaci�n, vea Ensamblados de
confianza.

Accesibilidad de miembros de clase y estructura


Los miembros de clase (incluidas las clases y las estructuras anidadas) se pueden
declarar con cualquiera de los seis tipos de acceso. Los miembros de estructura no
se pueden declarar como protegidos porque las estructuras no admiten la herencia.

Normalmente, la accesibilidad de un miembro no es mayor que la del tipo que lo


contiene. Pero un miembro p�blico de una clase interna podr�a ser accesible desde
fuera del ensamblado si el miembro implementa los m�todos de interfaz o invalida
los m�todos virtuales definidos en una clase base p�blica.

El tipo de cualquier miembro que sea un campo, propiedad o evento debe ser al menos
tan accesible como el propio miembro. Del mismo modo, el tipo devuelto y los tipos
de par�metro de cualquier miembro que sea un m�todo, indizador o delegado deben ser
al menos tan accesibles como el propio miembro. Por ejemplo, no puede tener un
m�todo p�blico M que devuelva una clase C a menos que C tambi�n sea p�blico. Del
mismo modo, no puede tener una propiedad protegida de tipo A si A se declara como
private.

Los operadores definidos por el usuario siempre deben declararse como public. Para
m�s informaci�n, vea Operador (Referencia de C#).

Los finalizadores no pueden tener modificadores de accesibilidad.

Para establecer el nivel de acceso de un miembro de clase o estructura, agregue la


palabra clave adecuada a la declaraci�n de miembro, como se muestra en el ejemplo
siguiente.

C#

Copiar
// public class:
public class Tricycle
{
// protected method:
protected void Pedal() { }

// private field:
private int wheels = 3;

// protected internal property:


protected internal int Wheels
{
get { return wheels; }
}
}
Nota

El nivel de accesibilidad protected internal significa protected O internal, no


protected E internal. Es decir, se puede acceder a un miembro protegido interno
desde cualquier clase del mismo ensamblado, incluidas las clases derivadas. Para
limitar la accesibilidad a las clases derivadas del mismo ensamblado, declare la
propia clase como internal y sus miembros como protected. Adem�s, a partir de C#
7.2, puede usar el modificador de acceso private protected para lograr el mismo
resultado sin necesidad de convertir en internal la clase contenedora.

Otros tipos
Las interfaces declaradas directamente en un espacio de nombres se pueden declarar
como public o internal y, al igual que las clases y las estructuras, su valor
predeterminado es el acceso interno. Los miembros de interfaz son siempre p�blicos
porque el prop�sito de una interfaz es permitir que otros tipos accedan a una clase
o estructura. A los miembros de interfaz no se les puede aplicar ning�n modificador
de acceso.

Los miembros de enumeraci�n siempre son p�blicos y no se les puede aplicar ning�n
modificador de acceso.

Los delegados se comportan como las clases y las estructuras. De forma


predeterminada, tienen acceso interno cuando se declaran directamente en un espacio
de nombres y acceso privado cuando est�n anidados.

Bibliografia
https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/classes-and-
structs/access-modifiers
http://mundogeek.net/archivos/2009/03/30/modificadores-en-java/

También podría gustarte