Novidades do C# 12: ref readonly parameters

Renato Groffe
2 min readDec 11, 2023

--

O C# 7.2 trouxe como uma de suas novidades uma capacidade chamada in parameters, a qual determina que uma referência fornecida como parâmetro a um método não sofra alterações no interior do mesmo. Abordei esta funcionalidade em um artigo publicado ainda no ano de 2017 neste blog:

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

Na listagem a seguir temos um exemplo de utilização de in parameter na definição do método estático Calcular (parâmetro numero), que integra o tipo Fatorial (uma implementação de testes para cálculos de fatoriais):

A tentativa de alterar o parâmetro numero no método Calcular resultará em erros de compilação, como indicado na imagem seguinte:

Clique nesta imagem para visualizar com uma melhor resolução

Podemos substituir no C# 12 o uso de in por ref readonly, alternativa que pode facilitar o entendimento em implementações que empregavam originalmente apenas ref (e que, portanto, permitiam alterações em uma referência):

Assim como acontece com in, a utilização de ref readonly também impede que um parâmetro sofra alterações no método em que foi declarado. É o que observamos na próxima imagem:

Clique nesta imagem para visualizar com uma melhor resolução

Ao invocar o método Fatorial podemos repassar uma variável como parâmetro usando as palavras-chave ref ou in (não há diferenças práticas entre essas 2 alternativas):

O resultado da execução desta Console Application a partir do Visual Studio 2022 está na imagem seguinte:

Clique nesta imagem para visualizar com uma melhor resolução

Essa aplicação foi disponibilizada no seguinte repositório do GitHub:

https://github.com/renatogroffe/CSharp12-RefReadOnlyParameters

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker