C# - Novos recursos da versão 7.1
Neste artigo vou apresentar 3 novos recursos da versão 7.1 da linguagem C#. |
Não faz muito tempo que apresentei as novidades da versão 7.0 da linguagem e já temos uma nova versão 7.1 com mais novidades.(Na verdade já temos a versão 7.2). Essa versão marca uma nova forma de liberação de novas versões mais cadenciada.
A versão 7.1 do C# inclui a capacidade de configurar o compilador para corresponder a uma versão especificada da linguagem, e, isso permite que você separe a decisão de atualizar as ferramentas da decisão de atualizar as versões da linguagem.
Basicamente a versão 7.1 adiciona os seguintes recursos:
Seleção de versão da linguagem;
Async em métodos Main();
Expressões literais default;
Nomes de elementos de Tuplas inferidos;
Novas opções do compilador : /refout e /refonly que controla a geração do assembly de referência;
Selecionando a versão da linguagem
O compilador C# suporta a versão 7.1 a partir do Visual Studio 2017 versão 15.3 ou o .NET Core SDK 2.0. No entanto, os recursos 7.1 são desativados por padrão. Para habilitar os recursos da versão 7.1, você precisa alterar a configuração da versão da linguagem para o seu projeto.
Em seu projeto C#, no Visual Studio, clique com o botão direito do mouse sobre o nome do projeto no Solution Explorer e selecione Properties:
Clique na guia Build e a seguir clique no botão Advanced, e,
no menu suspenso em Language version selecione a versão específica ou
C# latest major version(default) :
O último valor significa que você deseja usar a última versão menor na máquina atual. A versão C# 7.1 significa que você deseja usar o C# 7.1, mesmo depois que novas versões menores sejam lançadas.
1 - Asycn Main
O novo recurso Async Main permite que você utilize um await em seu método Main(). Anteriormente, você precisaria escrever o seguinte código :
static int Main()
{
return MetodoAssincrono().GetAwaiter().GetResult();
}
|
Agora você pode escrever :
static async Task<int> Main() { return await MetodoAssincrono(); } |
E se o seu programa não retorna um código de saída você pode declarar um método que retorna Task :
static async Task Main()
{
await MetodoAssincrono();
}
|
2 - Expressões literais default
As expressões literais padrão são um aprimoramento das expressões de valores padrão. Essas expressões inicializam uma variável para o valor padrão.
Uma
expressão de valor padrão produz o valor padrão para um tipo. As expressões de
valores padrão são particularmente úteis em classes e métodos genéricos. Uma
questão que surge com o uso de genéricos é como atribuir um valor padrão a um
tipo parametrizado T quando você não conhece o seguinte antecipadamente:
1-) Se T é um tipo de referência ou um tipo de valor.
2-) Se T é um tipo de valor, seja um valor numérico ou uma estrutura definida
pelo usuário.
Dada uma
variável t de um tipo parametrizado T, a declaração t = null só é válida
se T for um tipo de referência. A atribuição t = 0 funciona apenas para
tipos de valores numéricos, mas não para estruturas.
A solução é usar uma expressão de valor padrão, que retorna null para tipos de
referência (tipos de classe e tipos de interface) e zero para tipos de
valores numéricos.
Para estruturas definidas pelo usuário, ele retorna a estrutura inicializada
para o padrão de bits zero, que produz 0 ou null para cada membro, dependendo se
esse membro é um valor ou tipo de referência. Para tipos de valor anuláveis, o
padrão retorna um System.Nullable<T>, que é
inicializado como qualquer estrutura.
A expressão padrão (T) não está limitada a classes e métodos genéricos. As
expressões de valores padrão podem ser usadas com qualquer tipo gerenciado.
Assim qualquer uma das expressões a seguir é válida:
var s = default(string); var d = default(dynamic); var i = default(int); var n = default(int?); // n é um Nullable int onde HasValue é false. |
Quando você cria um objeto Uri dessa forma, você obtém um benefício imediato ao manter a URI em uma string.
3
- Nomes de elementos de tuplas inferidos
Esse recurso é um pequeno aprimoramento do recurso de tuplas introduzido na
versão 7.0 do C#.
Muitas vezes, quando você inicia uma tupla, as variáveis usadas para o lado direito da atribuição são as mesmas que os nomes que você gostaria para os elementos da tupla:
a- Antes da versão 7.1
int count = 5;
string label = "Cores usadas no mapa";
var pair = (count: count, label: label);
|
b- Veja como fica na versão 7.1
int count = 5;
string label = "Cores usadas no mapa";
var pair = (contagem, label); // nomes de elementos são "count" e "label"
|
Agora o nome dos elementos de tupla podem ser deduzidos das variáveis usadas para inicializar a tupla no C# 7.1.
E estamos conversados...
(disse
Jesus) "Eu sou o
pão vivo que desceu do céu; se alguém comer deste pão, viverá para sempre; e o
pão que eu der é a minha carne, que eu darei pela vida do mundo. "
João 6:51
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - 7 recursos da linguagem que talvez você não ... - Macoratti