Dominio de accesibilidad (Referencia de C#)

Actualización: noviembre 2007

El dominio de accesibilidad de un miembro especifica en qué secciones del programa se puede hacer referencia a dicho miembro. Si el miembro está anidado dentro de otro tipo, su dominio de accesibilidad viene determinado por el nivel de accesibilidad del miembro y por el dominio de accesibilidad del tipo contenedor inmediato.

El dominio de accesibilidad de un tipo de nivel superior es, al menos, el texto del programa del proyecto en el que se declara. Es decir, el dominio incluye todos los archivos de código fuente de este proyecto. El dominio de accesibilidad de un tipo anidado es, al menos, el texto del programa en el que el tipo aparece declarado. Es decir, el dominio es el cuerpo del tipo, que incluye todos los tipos anidados. El dominio de accesibilidad de un tipo anidado no puede superar al del tipo contenedor. Estos conceptos se muestran en el siguiente ejemplo.

Ejemplo

Este ejemplo contiene un tipo de nivel superior, T1, y dos clases anidadas, M1 y M2. Las clases contienen campos que tienen diferentes accesibilidades declaradas. En el método Main, a cada instrucción le sigue un comentario que indica el dominio de accesibilidad de cada miembro. Observe que las instrucciones que intentan hacer referencia a los miembros inaccesibles están marcadas con comentarios. Si desea ver los errores generados por el compilador cuando se intenta hacer referencia a un miembro inaccesible, quite los comentarios de uno en uno.

namespace AccessibilityDomainNamespace
{
    public class T1
    {
        public static int publicInt;
        internal static int internalInt;
        private static int privateInt = 0; // CS0414

        public class M1
        {
            public static int publicInt;
            internal static int internalInt;
            private static int privateInt = 0; // CS0414
        }

        private class M2
        {
            public static int publicInt = 0;
            internal static int internalInt = 0;
            private static int privateInt = 0; // CS0414
        }
    }

    class MainClass
    {
        static void Main()
        {
            // Access is unlimited:
            T1.publicInt = 1;

            // Accessible only in current assembly:
            T1.internalInt = 2;

            // Error: inaccessible outside T1:
            //    T1.myPrivateInt = 3;  

            // Access is unlimited:
            T1.M1.publicInt = 1;

            // Accessible only in current assembly:
            T1.M1.internalInt = 2;

            // Error: inaccessible outside M1:
            //    T1.M1.myPrivateInt = 3; 

            // Error: inaccessible outside T1:
            //    T1.M2.myPublicInt = 1;

            // Error: inaccessible outside T1:
            //    T1.M2.myInternalInt = 2;

            // Error: inaccessible outside M2:
            //    T1.M2.myPrivateInt = 3;
        }
    }
}

Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 3.5.1 Accesibilidad declarada

  • 3.5.2 Dominios de accesibilidad

  • 3.5.4 Restricciones de accesibilidad

  • 10.3.5 Modificadores de acceso

  • 10.3.8.2 Accesibilidad declarada

Vea también

Conceptos

Guía de programación de C#

Referencia

Palabras clave de C#

Modificadores de acceso (Referencia de C#)

Niveles de accesibilidad (Referencia de C#)

Restricciones en el uso de los niveles de accesibilidad (Referencia de C#)

Modificadores de acceso (Guía de programación de C#)

public (Referencia de C#)

private (Referencia de C#)

protected (Referencia de C#)

internal (Referencia de C#)

Otros recursos

Referencia de C#