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