Compartilhar via


Access Modifiers (C# Programming Guide)

Todos os tipos e membros de tipos tem um nível de acessibilidade, que controla se eles podem ser usados a partir de outro código no seu conjunto ou outros assemblies. Você pode usar os seguintes modificadores de acesso para especificar a acessibilidade de um tipo ou membro quando declará-lo:

  • pública
    O tipo ou membro pode ser acessado por qualquer outro código no mesmo assembly ou outro conjunto que faz referência a ele.

  • Particular
    O tipo ou membro pode ser acessado somente pelo código na mesma classe ou struct.

  • protegido
    O tipo ou membro pode ser acessado somente pelo código na mesma classe ou struct ou em uma classe derivada da classe.

  • interno
    O tipo ou membro pode ser acessado por qualquer código no mesmo assembly, mas não a partir de outro assembly.

  • protected internal
    O tipo ou membro pode ser acessado por qualquer código no assembly no qual ele está declarado ou de uma classe derivada em outro assembly. Acesso a outro assembly deve ocorrer dentro de uma declaração de classe que deriva da classe na qual o elemento interno protegido é declarado e ele deve ocorrer por meio de uma instância do tipo classe derivada.

Os exemplos a seguir demonstram como especificar modificadores de acesso em um tipo e membro:

public class Bicycle
{
    public void Pedal() { }
}

Nem todos os modificadores de acesso podem ser usados por todos os tipos ou membros em todos os contextos e, em alguns casos, a acessibilidade de um membro do tipo é restrito com a acessibilidade do respectivo tipo. As seções a seguir fornecem mais detalhes sobre a acessibilidade.

Classe e a acessibilidade de Struct

Classes e estruturas que são declaradas dentro de um espaço para nome (em outras palavras, que não estão aninhadas dentro de outras classes ou estruturas) podem ser público ou interno. Interno é o padrão se nenhum modificador de acesso for especificado.

Membros de struct, incluindo classes aninhadas e estruturas, podem ser declarados como público, interna ou privada. Os membros, incluindo classes aninhadas e estruturas de classe, pode ser público, interno, protegido, interno protegido ou particular. O nível de acesso para os membros de struct, incluindo classes aninhadas e estruturas e membros de classe é privado por padrão. Particulares tipos aninhados não são acessíveis de fora do tipo recipiente.

Classes derivadas não podem ter maior acessibilidade de seus tipos base. Em outras palavras, você não pode ter uma classe pública B que deriva de uma classe interna A. Se isso foi permitido, ele teria o efeito de fazer A pública, porque todos os membros protegidos ou internos do A são acessíveis a partir da classe de derivada.

Você pode habilitar específico outros assemblies para acessar seus tipos internos usando o InternalsVisibleToAttribute. Para obter mais informações, consulte Friend Assemblies (C# e Visual Basic).

Classe e membro Struct acessibilidade

Os membros de classe (inclusive estruturas e classes aninhadas) podem ser declarados com qualquer um dos cinco tipos de acesso. Os membros de struct não podem ser declarados como protegido porque structs não oferecem suporte a herança.

Normalmente, a acessibilidade de um membro não é maior que a acessibilidade do tipo que o contém. No entanto, um membro público de uma classe interna pode estar acessível fora do assembly se o membro implementa os métodos de interface ou substitui os métodos virtuais que são definidos na classe base pública.

O tipo de qualquer membro que é um campo, propriedade ou evento deve ser pelo menos, tão acessível quanto o próprio membro. Da mesma forma, o tipo de retorno e os tipos de parâmetro de qualquer membro que é um método, indexador ou representante devem ser pelo menos, tão acessíveis quanto o próprio membro. Por exemplo, você não pode ter um método público M que retorna uma classe C , a menos que C é também o público. Da mesma forma, você não pode ter uma propriedade protegida do tipo A Se A é declarado como particular.

Operadores definidos pelo usuário sempre devem ser declarados como públicos. Para obter mais informações, consulte operador (Referência de C#).

Destruidores não podem ter modificadores de acessibilidade.

Para definir o acesso de nível de um membro de class ou struct, adicione a palavra-chave apropriada para a declaração de membro, conforme mostrado no exemplo a seguir.

// 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; }
    }
}
ObservaçãoObservação

O nível de acessibilidade de interno protegido significa não protegido ou interno, protected e internal. Em outras palavras, um membro protected internal pode ser acessado de qualquer classe no mesmo assembly, incluindo classes derivadas. Para limitar a acessibilidade para somente as classes derivadas no mesmo assembly, declarar a própria classe interna e declarar seus membros como protegido.

Outros tipos.

Interfaces declarados diretamente dentro de um namespace podem ser declarados como público ou interno e, assim como classes e estruturas, interfaces de padrão para acesso interno. Os membros de interface sempre são públicos, porque a finalidade de uma interface é permitir que outros tipos acessar uma classe ou struct. Nenhum modificador de acesso pode ser aplicado aos membros de interface.

Os membros de enumeração sempre são públicos e não pode ser aplicado nenhum modificador de acesso.

Delegados se comportam como classes e estruturas. Por padrão, eles têm acesso interno quando declaradas dentro de um namespace e privadas de acesso quando aninhados.

Especificação da linguagem C#

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

Consulte também

Referência

Classes e estruturas (guia de programação de C#)

Interfaces (C# Programming Guide)

private (C# Reference)

public (C# Reference)

internal (C# Reference)

protected (C# Reference)

classe (Referência de C#)

struct (Referência de C#)

interface (Referência de C#)

Conceitos

C# Programming Guide

Histórico de alterações

Date

History

Motivo

Junho de 2010

Esclarecida acesso interno protegido e o nível de acesso padrão para classes, structs e delegados.

Comentários do cliente.