DEV Community

Cover image for Novidades do C# 13: Recursos e Exemplos Práticos
Danilo O. Pinheiro, dopme.io
Danilo O. Pinheiro, dopme.io

Posted on

Novidades do C# 13: Recursos e Exemplos Práticos

O C# 13, lançado com o .NET 9, introduziu diversos aprimoramentos que tornam o desenvolvimento mais eficiente, seguro e expressivo. Vamos explorar os principais recursos com exemplos de código.

1. Coleções com params

Agora, o modificador params pode ser aplicado a qualquer tipo que suporte expressões de coleção, como List<T>, Span<T> e IEnumerable<T>. Isso permite passar coleções diretamente para métodos, sem a necessidade de convertê-las para arrays.

Exemplo:

public void ImprimirNumeros(params IEnumerable<int> numeros)
{
    foreach (var numero in numeros)
        Console.WriteLine(numero);
}

// Uso
ImprimirNumeros(new List<int> { 1, 2, 3 });
ImprimirNumeros(new int[] { 4, 5, 6 });
Enter fullscreen mode Exit fullscreen mode

Essa flexibilidade facilita o trabalho com diferentes tipos de coleções.

2. Novo Tipo Lock para Sincronização de Threads

O tipo System.Threading.Lock oferece uma abordagem moderna para sincronização de threads, substituindo o uso do Monitor. Ele permite um bloqueio mais seguro e eficiente em seções críticas de código.

Exemplo:

var lockObject = new System.Threading.Lock();
using (lockObject.EnterScope())
{
    // Seção crítica
    Console.WriteLine("Recurso acessado com segurança");
}
Enter fullscreen mode Exit fullscreen mode

Essa abordagem reduz o risco de deadlocks e melhora a clareza do código.

3. Acesso Implícito com Índices Reversos

O operador ^ agora pode ser usado em inicializadores de objetos, permitindo acessar elementos de coleções a partir do final de forma mais intuitiva.

Exemplo:

var contagem = new int[10];
contagem[^1] = 0; // Último elemento
contagem[^2] = 1; // Penúltimo elemento
Enter fullscreen mode Exit fullscreen mode

Isso facilita a manipulação de coleções sem a necessidade de cálculos manuais de índices.

4. Métodos async com ref e unsafe

Agora, métodos async podem declarar variáveis locais ref e utilizar código unsafe, desde que respeitem as regras de segurança, como não acessar variáveis ref após um await.

Exemplo:

public async Task ProcessarDadosAsync()
{
    Span<byte> buffer = stackalloc byte[1024];
    // Operações com buffer
    await Task.Delay(1000);
}
Enter fullscreen mode Exit fullscreen mode

Isso permite operações de memória de baixo nível de forma segura em métodos assíncronos.

5. Propriedades e Indexadores Parciais

Agora, é possível declarar propriedades e indexadores parciais, permitindo separar a definição e a implementação em diferentes arquivos, facilitando a organização do código.

Exemplo:

public partial class Pessoa
{
    public partial string Nome { get; set; }
}

// Em outro arquivo
public partial class Pessoa
{
    private string _nome;
    public partial string Nome
    {
        get => _nome;
        set => _nome = value;
    }
}
Enter fullscreen mode Exit fullscreen mode

Essa abordagem é útil, especialmente quando se trabalha com geradores de código.

6. Expressões with para Clonagem de Objetos

As expressões with foram aprimoradas para suportar a clonagem de objetos mais complexos, como arrays e coleções, facilitando a criação de cópias imutáveis com modificações.

Exemplo:

public record Pessoa(string Nome, int Idade, string[] Hobbies);

var pessoa1 = new Pessoa("Alice", 30, new string[] { "Leitura", "Caminhada" });
var pessoa2 = pessoa1 with { Idade = 31 };
Enter fullscreen mode Exit fullscreen mode

Essa funcionalidade melhora a imutabilidade e a segurança do código.

7. Literais de String Brutos

Os literais de string brutos, delimitados por três aspas ("""), permitem definir strings multilinhas sem a necessidade de escapar caracteres especiais, facilitando a manipulação de textos complexos.

Exemplo:

var json = """
{
    "nome": "João",
    "idade": 30,
    "hobbies": ["Leitura", "Ciclismo"]
}
""";
Enter fullscreen mode Exit fullscreen mode

Isso simplifica a inclusão de conteúdo como JSON ou XML no código.


🤝 Conecte-se Comigo

Estou sempre aberto a trocar ideias e aprender com a comunidade. Se você também está explorando o C# 13 ou outras tecnologias, vamos nos conectar:

Top comments (0)