Back-End

7 mar, 2018

Novidades do C# 7.2: Modificadores de acesso private protected

Publicidade

Vamos para mais um artigo da série sobre C# 7. Lembrando que para utilizar as versões minor do C# (como a 7.1, ou 7.2), você precisa habilitá-la nos atributos do projeto. Veja neste artigo, como fazê-lo e também como habilitar na solution inteira para não ter que ficar configurando cada projeto individualmente.

Novidades do C# 7.2: Modificadores de acesso private protected

A partir da versão 7.2, poderemos criar membros de classes que só podem ser acessados em classes derivadas que estiverem no mesmo assembly.

Por exemplo, existindo a classe Base a seguir, com o campo f com os modificadores de acesso private protected, no assembly A:

namespace A
{
    class Base
    {
        private protected int f;
    }
}

Ao criarmos outra classe, no mesmo assembly, que deriva de Base, ela poderá acessar o campo f:

namespace A
{
    class DerivadaNoMesmoAssembly : Base
    {
        void M()
        {
            var x = base.f;
        }
    }
}

No entanto, caso fosse criada outra classe que deriva de Base em outro assembly (neste caso B), ela não poderia acessar o campo f:

namespace B
{
    class DerivadaEmOutroAssembly : Base
    {
        void M()
        {
            var x = base.f; //erro
        }
    }
}

É bastante comum imaginar que os modificadores protected internal tinham esta função, e isso é um engano. Esse engano acontece porque a pessoa imagina que o protected limita o acesso para apenas classes derivadas, e o internal limita ainda mais: para derivadas do mesmo assembly. Na verdade, eles se somam, ampliando o acesso inicial. Desta forma, protected internal significa que a classe é acessível de classes derivadas ou de qualquer outra classe do assembly. O ou é o ponto chave da questão, muita gente pensa ser um e, o que tornaria os modificadores mais restritivos.

Você consegue ler sobre mais sobre os modificadores private protected nos docs do Github sobre esta evolução.

***

Este artigo foi produzido em parceria com a Lambda3. Leia outros conteúdos no blog da empresa: blog.lambda3.com.br