C# 10 - Cinco recursos que você tem que conhecer
Hoje vou apresentar cinco novos recursos do C# 10 que você tem a obrigação de conhecer. |
Estamos a poucos dias do lançamento oficial do .NET 6 que vai apresentar muitos recursos,e , junto com ele o C# 10 também vem recheado de novidades.
Neste artigo, vou apresentar uma revisão dos 5 recursos do C# 10 que você tem que conhecer.
1- Os Tipos Record agora suportam ToString sealed
No C# 10, podemos adicionar o modificador sealed ao sobrescrever ToString em um tipo record.
Agora temos a possibilidade de selar o método ToString e isso evita que o compilador sintetize um método ToString para qualquer tipo de registro derivado. Esta função permite que você garanta que todos os tipos de registro derivados usem o método ToString definido em um tipo de registro de base comum.
O recurso record foi introduzido no C# 9.0. Para detalhes veja o meu artigo: C# - Apresentando Records
O exemplo mostra um record Pessoa que
implementa uma substituição do método ToString(). Essa substituição também é
selada com a palavra-chave sealed.
A seguir o record Aluno herda de Pessoa e tenta substituir o método ToString(), o que dá um erro de compilação.
2- Declaração de namespace com escopo de arquivo
No C# 10 podemos usar a nova declaração namespace para definir que todas as declarações seguintes são membros do namespace declarado. (quanto declaração....)
Assim agora podemos utilizar um namespace para um arquivo inteiro ao invés de usar um bloco {}.
namespace SeuNamespace;
|
Essa nova sintaxe vai permitir economizar espaço vertical e horizontal para as declarações de namespace mais comuns além de permitir que você declare todos os tipos de um arquivo, que estão em um único namespace.
1- Usando a declaração namespace normal
using System.ComponentModel.DataAnnotations;
namespace Demo_Namespace
{
public partial class Aluno
{
[Key]
public int Id { get; set; }
public DateTime Idade { get; set; }
}
}
|
2- Usando a nova declaração namespace
using System.ComponentModel.DataAnnotations;
namespace Demo_Namespace;
public partial class Aluno
{
[Key]
public int Id { get; set; }
public DateTime Idade { get; set; }
}
|
3-
Strings interpoladas constantes
Para entender as strings interpoladas constantes,
primeiro precisamos entender a interpolação de strings.
O caractere $ identifica um literal de string como uma string interpolada. Uma
string interpolada é uma string literal que pode conter expressões de
interpolação.
Quando uma string interpolada é resolvida em uma string de resultado, os itens
com expressões de interpolação são substituídos pelas representações de string
dos resultados da expressão.
Perfeito, agora minha pergunta é….
O são as
strings interpoladas constantes do C# 10 ?
Elementar meu caro, o novo recurso do C# 10 chamado de
Constant Interpolated Strings permite
realizar a interpolação de strings constantes definidas com a palavra-chave
const.
A palavra-chave const pode ser usada para declarar um campo constante ou uma constante local. Campos e constantes locais não são variáveis e não podem ser modificados. As constantes podem ser números, valores booleanos, cadeias de caracteres ou uma referência nula.
Assim ao usar strings const nas versões anteriores da linguagem C# a concatenação somente podia ser feita com o operador +.
Com o C# 10 agora podemos usar o operador de interpolação de strings ($) para combinar strings const.
Assim o código abaixo vai funcionar sem erros:
var teste = new Teste(); teste.Demo(); public class Teste public const string Saudacoes = $"\n{Saudacao}, {Titulo}{Nome} !\n"; public void Demo() |
4- Padrões de propriedades estendidas
Primeiro, vejamos o que são os padrões de propriedade estendidos.
Esses padrões permitem que os sub-padrões de propriedade se refiram a membros aninhados, por exemplo podemos usar:
|
Ao invés de :
|
Agora o que são os padrões de propriedades estendidos do C# 10 ?
Assim o padrão permite que você corresponda às propriedades do objeto examinado e o C# 10 melhora esse padrão simplificando o acesso às propriedades aninhadas.
Dessa forma no C# 10 os campos ou propriedades aninhados podem ser referenciados em um padrão de propriedade. Exemplo:
1- Antes
public class ImpostoDoEstadoProperty { public string Estado { get; set; } }
public class CalculaImposto public class
Calculo
calcula switch
{ ImpostoEstadoProperty.Estado:
"SP" } } => 1.14975M * preco,
}; |
2- Agora o C# permite realizar o acesso diretamente a propriedade aninhada usando apenas um ponto (.):
public class ImpostoDoEstadoProperty { public string Estado { get; set; } } public class CalculaImposto public class Calculo calcula switch { ImpostoEstadoProperty.Estado: "SP" } => 1.14975M * preco, }; |
5 - Global Using
O novo recurso do C# 10 chamado de Global Using tem como objetivo simplificar e tornar o código C# mais leve declarando apenas uma vez a diretiva using em um namespace específico em um mesmo projeto.
O novo recurso Global Using do C# 10 introduz a palavra-chave global que podemos usar para identificar diretivas using que deverão ser aplicados a todos os arquivos da solução.
global using System; global using System.Collections.Generic; global using System.Threading.Tasks; global using Dapper; global using AutoMapper; ... |
Essas instruções podem ser colocadas em um arquivo separado em algum lugar do projeto, e o compilador C # saberá que todos esses namespaces se aplicam a todos os arquivos do projeto.
Você pode aplicar dois modificadores a
uma diretiva using:
- O modificador global tem o mesmo efeito que
adicionar a mesma diretiva using a todos os
arquivos-fonte em seu projeto. Esse modificador foi introduzido no C# 10.
- O modificador static importa os membros estáticos
e tipos aninhados de um único tipo, em vez de importar todos os tipos em um
namespace.
"Portanto, irmãos, empenhem-se ainda
mais para consolidar o chamado e a eleição de vocês, pois se agirem dessa forma,
jamais tropeçarão, e assim vocês estarão ricamente providos quando entrarem no
Reino eterno de nosso Senhor e Salvador Jesus Cristo."
2 Pedro 1:10,11
Referências:
C# - Lendo e escrevendo em arquivos textos e binários
C# - Entendo o I/O na plataforma .NET
C# - Fluxo assíncrono ou async streams
C#- Apresentando Streams assíncronos