Partilhar via


arquivo (Referência C#)

Começando com C# 11, a file palavra-chave contextual é um modificador de tipo.

O file modificador restringe o escopo e a visibilidade de um tipo de nível superior ao arquivo no qual ele é declarado. O file modificador geralmente será aplicado a tipos escritos por um gerador de código-fonte. Os tipos de arquivos locais fornecem aos geradores de origem uma maneira conveniente de evitar colisões de nomes entre os tipos gerados. O file modificador declara um tipo de arquivo local, como neste exemplo:

file class HiddenWidget
{
    // implementation
}

Todos os tipos aninhados em um tipo de arquivo local também só são visíveis dentro do arquivo no qual ele é declarado. Outros tipos em um assembly podem usar o mesmo nome que um tipo de arquivo local. Como o tipo de arquivo local é visível apenas no arquivo onde é declarado, esses tipos não criam uma colisão de nomes.

Um tipo de arquivo local não pode ser o tipo de retorno ou o tipo de parâmetro de qualquer membro que seja mais visível do que file o escopo. Um tipo de arquivo local não pode ser um membro de campo de um tipo que tenha maior visibilidade do que file o escopo. No entanto, um tipo mais visível pode implementar implicitamente um tipo de interface de arquivo local. O tipo também pode implementar explicitamente uma interface local-arquivo, mas implementações explícitas só podem ser usadas dentro do file escopo.

Exemplo

O exemplo a seguir mostra um tipo público que usa um tipo de arquivo local para fornecer um método de trabalho. Além disso, o tipo público implementa uma interface arquivo-local implicitamente:

// In File1.cs:
file interface IWidget
{
    int ProvideAnswer();
}

file class HiddenWidget
{
    public int Work() => 42;
}

public class Widget : IWidget
{
    public int ProvideAnswer()
    {
        var worker = new HiddenWidget();
        return worker.Work();
    }
}

Em outro arquivo de origem, você pode declarar tipos que têm os mesmos nomes que os tipos de arquivo local. Os tipos de arquivo local não estão visíveis:

// In File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
    public void RunTask()
    {
        // omitted
    }
}

Especificação da linguagem C#

Para obter mais informações, consulte Acessibilidade declarada na Especificação de linguagem C# e Especificação de recurso C# 11 - Tipos locais de arquivo.

Consulte também