Novidades do C# 7.2 — parte 2: private protected, non-trailing named arguments e digit separators

Este segundo post da série sobre novidades do C# 7.2 traz exemplos de uso do modificador private protected, além de melhorias no uso de digit separators e envolvendo a nomeação de argumentos ao se invocar um método.

Caso queira acompanhar ou até mesmo rever o primeiro da série acesse o link a seguir, que inclui instruções sobre como habilitar o uso do C# 7.2 no Visual Studio 2017 Update 15.5:

Novidades do C# 7.2 - parte 1: como habilitar, ref readonly e in parameters


O modificador private protected

Presente em versões anteriores da linguagem C#, o modificador protected internal determina que o acesso a um elemento de uma classe fique restrito ao assembly em que a mesma foi declarada e/ou a suas subclasses (estas últimas podem estar localizadas em outros projetos).

No exemplo a seguir é possível observar o uso de uma propriedade (Valor) marcada como protected internal por uma classe-filha (ClasseDerivada) localizada no mesmo assembly do tipo ClasseBase (LibBase):

Já na próxima listagem está a implementação do tipo NovaClasseDerivada, o qual foi declarado em outro assembly (NovaLib). Herdando suas características de ClasseBase, esta classe consegue acessar sem maiores dificuldades a propriedade Valor (definida originalmente em ClasseBase):

Mas e se for necessário impedir o acesso à propriedade Valor em NovaClasseDerivada? O C# 7.2 traz agora uma alternativa que simplifica este processo: o modificador private protected. Este novo recurso permitirá o acesso a um elemento apenas na classe em que o mesmo foi definido ou em tipos derivados pertencentes ao mesmo assembly de origem.

Alterando a propriedade Valor em ClasseBase para private protected:

Aparecerá então um alerta de erro em NovaClasseDerivada indicando que o acesso à propriedade Valor não é possível (a instrução que faz uso deste elemento em ClasseDerivada ainda continuará válida, já que se encontra no mesmo assembly):


Non-trailing named arguments

Em versões anteriores da linguagem C# o uso de um argumento nomeado em um método exigia que os parâmetros subsequentes também fossem identificados de forma explícita. Um exemplo disto seria a instrução:

Math.Pow(x: 2, y: 5)

Em que ao se especificar o parâmetro x foi também necessário indicar o argumento y. A ordem destes parâmetros também poderia, alternativamente, estar invertida (obviamente com ambos os argumentos nomeados).

Esta forma de declaração era obrigatória e, caso não fosse adotada, resultaria em erros como o indicado a seguir:

O C# 7.2 traz agora uma nova funcionalidade chamada non-trailing named arguments que contorna esta limitação. Este recurso permitirá que ao se nomear um argumento a identificação dos demais parâmetros não precise ser declarada de forma explícita, desde claro que se leve em conta a ordem em que tais argumentos foram especificados em um método. Um exemplo disto pode ser observado na próxima listagem:

A imagem a seguir traz o resultado da execução deste código:


Digit separators após 0B, 0b, 0X e 0x

Uma das novidades do C# 7.0 foram os digit separators. Este recurso faz uso do caracter “_” (underline) na separação de algarismos em sequências numéricas, tendo como grande vantagem tornar mais legível a visualização de valores no código C#:

Quando do lançamento desta funcionalidade não era permitida a utilização do caracter “_” logo depois de 0B, 0b, 0X e 0x (empregados nas representações de valores binários e hexadecimais). Já o C# 7.2 traz agora também esta possibilidade:

Na próxima imagem está o resultado da execução deste último exemplo:


One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.