Novidades do C# 11: File-scoped types
O C# 11 traz também uma nova possibilidade para definir o escopo de uma classe/tipo, além das implementações já existentes e baseadas no uso de modificadores como public, private, internal…
Trata-se da funcionalidade batizada como File-scoped types (também chamada de File local types), com a qual podemos criar classes/tipos cujo escopo está restrito ao arquivo .cs em que tais construções foram definidas. Para isto utilizaremos a palavra-chave file na declaração de um tipo.
Supondo um mesmo projeto (ExemploFileScopedType) em foram definidas as classes ClasseTeste1 e Mensagem num arquivo chamado Teste1.cs:
E os tipos ClasseTeste2 e Mensagem, desta vez em outro arquivo chamado Teste2.cs:
Obviamente que as 2 declarações de Mensagem pertencentes a um mesmo namespace (ExemploFileScopedType) resultarão em erros durante a compilação do projeto:
Esses mesmos erros serão apontados se utilizarmos o Visual Studio 2022:
Podemos corrigir este problema substituindo em Teste2.cs o modificador public da classe Mensagem por file, como indicado na próxima listagem:
Com isto o Visual Studio 2022 não acusará mais erros:
Na listagem a seguir temos um exemplo de utilização dos tipos apresentados nas listagens anteriores (no arquivo Program.cs):
A execução deste exemplo trará um resultado similar ao da imagem seguinte:
O código desse projeto foi disponibilizado no GitHub:
https://github.com/renatogroffe/CSharp11-FileScopedTypes
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!