Comparteix via


Dominio de accesibilidad (referencia de C#)

El dominio de accesibilidad de un miembro especifica las secciones del programa en las que puede hacer referencia a ese miembro. Si el miembro está anidado dentro de otro tipo, tanto el nivel de accesibilidad del miembro como el dominio de accesibilidad del tipo contenedor inmediatamente determinan su dominio de accesibilidad.

La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.

La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.

Sugerencia

Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.

El dominio de accesibilidad de un tipo de nivel superior siempre incluye al menos el texto del programa del proyecto donde se declara. En otras palabras, el dominio incluye todos los archivos de origen del proyecto. El dominio de accesibilidad de un tipo anidado siempre incluye al menos el texto del programa del tipo donde se declara. En otras palabras, el dominio es el cuerpo del tipo, que incluye todos los tipos anidados. El dominio de accesibilidad de un tipo anidado nunca supera el del tipo contenedor. En el ejemplo siguiente se muestran estos conceptos.

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 Main método , un comentario sigue cada instrucción para indicar el dominio de accesibilidad de cada miembro. Las instrucciones que intentan hacer referencia a los miembros inaccesibles se comentan. Si desea ver los errores del compilador causados por hacer referencia a un miembro inaccesible, quite los comentarios de uno en uno.

public class T1
{
    public static int publicInt;
    internal static int internalInt;
    private static int privateInt = 0;

    static T1()
    {
        // T1 can access public or internal members
        // in a public or private (or internal) nested class.
        M1.publicInt = 1;
        M1.internalInt = 2;
        M2.publicInt = 3;
        M2.internalInt = 4;

        // Cannot access the private member privateInt
        // in either class:
        // M1.privateInt = 2; //CS0122
    }

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

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

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

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

        // Error CS0122: inaccessible outside T1.
        // T1.privateInt = 3;

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

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

        // Error CS0122: inaccessible outside M1.
        //    T1.M1.privateInt = 3;

        // Error CS0122: inaccessible outside T1.
        //    T1.M2.publicInt = 1;

        // Error CS0122: inaccessible outside T1.
        //    T1.M2.internalInt = 2;

        // Error CS0122: inaccessible outside M2.
        //    T1.M2.privateInt = 3;

        // Keep the console open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}

Especificación del lenguaje C#

Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es el origen definitivo de la sintaxis y el uso de C#.

Consulte también