Partilhar via


Domínio de acessibilidade (referência C#)

O domínio de acessibilidade de um membro especifica em quais seções do programa um membro pode ser referenciado. Se o membro estiver aninhado em outro tipo, seu domínio de acessibilidade será determinado pelo nível de acessibilidade do membro e pelo domínio de acessibilidade do tipo imediatamente contido.

O domínio de acessibilidade de um tipo de nível superior é, pelo menos, o texto do programa do projeto em que é declarado. Ou seja, o domínio inclui todos os arquivos de origem deste projeto. O domínio de acessibilidade de um tipo aninhado é pelo menos o texto do programa do tipo em que é declarado. Ou seja, o domínio é o corpo do tipo, que inclui todos os tipos aninhados. O domínio de acessibilidade de um tipo aninhado nunca excede o do tipo que contém. Esses conceitos são demonstrados no exemplo a seguir.

Exemplo

Este exemplo contém um tipo de nível superior, T1, e duas classes aninhadas, M1 e M2. As classes contêm campos que têm diferentes acessibilidades declaradas. Main No método, um comentário segue cada instrução para indicar o domínio de acessibilidade de cada membro. Observe que as declarações que tentam fazer referência aos membros inacessíveis são comentadas. Se você quiser ver os erros do compilador causados pela referência a um membro inacessível, remova os comentários um de cada vez.

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();
    }
}

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#.

Consulte também