Share via


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

O domínio de acessibilidade de um membro Especifica quais seções do programa membro pode ser referenciado. Se o membro estiver aninhado em outro tipo, o seu domínio de acessibilidade é determinado por ambas as o nível de acessibilidade o membro e o 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 que ele seja declarado no projeto. 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 no qual é declarada. Ou seja, o domínio é o corpo de tipo, que inclui todos os tipos aninhados. O domínio de acessibilidade de um tipo aninhado nunca excede do tipo recipiente. Esses conceitos são demonstrados no exemplo a seguir.

Exemplo

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

namespace AccessibilityDomainNamespace
{
    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 de C#.

Consulte também

Referência

Palavras-chave C#

Modificadores de acesso (Referência de C#)

Níveis de acessibilidade (Referência de C#)

Restrições ao uso de níveis de acessibilidade (Referência de C#)

Modificadores de acesso (Guia de Programação em C#)

public (Referência de C#)

private (Referência de C#)

protected (Referência de C#)

internal (Referência de C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#