Página Inicial Nível 1 Nível 2 Nível 3 Nível 4 Nível 5 Nível 6 Perguntas Lista de Exercícios

Modificadores de acesso

Formas de acesso ao código de uma classe, por padrão o modificador utilizado, se não informado é o private.

Definição da documentação Microsoft

Todos os tipos e membros de tipo têm um nível de acessibilidade, que controla se podem ser usados de outro código no seu assembly ou outros assemblies.

Você pode usar os modificadores de acesso a seguir para especificar a acessibilidade de um tipo ou membro quando você o declarar:

Público

O modificador de acesso public dá acesso total ao membro, mesmo fora do seu contexto.

O acesso não é restrito.

class MinhaClasse
{
    public int x; // sem restrição de acesso
}

Privado

O modificador de acesso private restringe o acesso ao seu contexto apenas.

O acesso é limitado ao tipo recipiente.

class MinhaClasse
{
    public int x;  // sem restrição de acesso
    private int y; // somente pode ser utilizado dentro da classe MinhaClasse
    double z;      // somente pode ser utilizado dentro da classe MinhaClasse
}

Protegido

O modificador de acesso protected restringe o acesso ao seu contexto e de classes derivadas (herança)

O acesso é limitado à classe que os contém ou aos tipos derivados da classe que os contém.

class MinhaClasse
{
    public int x;       // sem restrição de acesso
    private int y;      // somente pode ser utilizado dentro da classe MinhaClasse
    double z;           // somente pode ser utilizado dentro da classe MinhaClasse
    protected string w; // somente pode ser utilizado dentro da classe MinhaClasse e classes derivadas
}
class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        // Error CS1540
        // X somente pode ser acessado
        //  por classes derivadas de A
        // a.x = 10;

        // Como essa classe deriva de A
        // então o acesso é permitido
        b.x = 10;
    }
}

Interno

O modificador de acesso internal somente é acessível no mesmo assembly

class MinhaClasse
{
    public int x;       // sem restrição de acesso
    private int y;      // somente pode ser utilizado dentro da classe MinhaClasse
    double z;           // somente pode ser utilizado dentro da classe MinhaClasse
    protected string w; // somente pode ser utilizado dentro da classe MinhaClasse e classes derivadas
    internal string a;  // somente dentro da dll gerada
}

Protegido Interno

O modificador de acesso protected internal somente é acessível no mesmo assembly, porém o protected dá acesso às classes derivadas

// Assembly1.cs
namespace Assembly1
{
    class ClasseBase
    {
        protected internal string nome;  // somente dentro da dll gerada
    }
    class Program
    {
        static Main(string[] args)
        {
            ClasseBase classeBase = new ClasseBase();
            Console.WriteLine(classeBase.nome);
        }
    }
}
using Assembly1;
class ClasseDerivada : ClasseBase
{
}
class Program
{
    static Main(string[] args)
    {
        ClasseBase classeBase = new ClasseBase();
        ClasseDerivada classeDerivada = new ClasseDerivada();

        // Error CS1540
        // o acesso somente pode ser feito por heranças
        // classeBase.nome = 10;

        // Por herdar não há problemas
        classeDerivada.nome = 10;
    }
}

Privado Interno

O modificador de acesso private internal somente é acessível no mesmo assembly.

// Assembly1.cs
// Compile with: /target:library
public class ClasseBase
{
    private protected int valor = 0;
}

public class ClasseDerivada : BaseClass
{
    void Access()
    {
        BaseClass baseObject = new BaseClass();

        // Error CS1540, somente utilizado em classes derivadas.
        // baseObject.valor = 5;

        // Sem problemas já que é uma herança
        valor = 5;
    }
}
 // Assembly2.cs
 // Compile with: /reference:Assembly1.dll
 class ClasseDerivada2 : BaseClass
 {
     void Access()
     {
         // Error CS0122, somente em classes derivadas dentro do mesmo assembly
         // valor = 10;
     }
 }

Página Inicial Nível 1 Nível 2 Nível 3 Nível 4 Nível 5 Nível 6 Perguntas Lista de Exercícios
Nível 6 - Modificadores de acesso Nível 6 - Herança Nível 6 - Propriedades Nível 6 - Métodos Nível 6 - Sobrecarga de métodos