Share via


file (Referencia de C#)

A partir de C# 11, la palabra clave contextual file es un modificador de tipos.

El modificador file restringe el ámbito y la visibilidad de un tipo de nivel superior al archivo en el que se declara. Por lo general, el file modificador se aplicará a los tipos escritos por un generador de código fuente. Los tipos locales de archivo proporcionan a los generadores de código fuente una manera cómoda de evitar conflictos de nombres entre los tipos generados. El modificador file declara un tipo local de archivo, como en este ejemplo:

file class HiddenWidget
{
    // implementation
}

Todos los tipos anidados dentro de un tipo local de archivo también son visibles únicamente dentro del archivo en el que se declara. Otros tipos de un ensamblado pueden usar el mismo nombre que un tipo local de archivo. Dado que el tipo local de archivo solo está visible en el archivo donde se declara, estos tipos no crean un conflicto de nomenclatura.

Un tipo local de archivo no puede ser el tipo de valor devuelto ni el tipo de parámetro de ningún miembro que sea más visible que el ámbito file. Un tipo local de archivo no puede ser un miembro de campo de un tipo que tenga mayor visibilidad que el ámbito file. Sin embargo, un tipo más visible puede implementar implícitamente un tipo de interfaz local de archivo. El tipo también puede implementar explícitamente una interfaz local de archivo, pero solo se pueden usar implementaciones explícitas dentro del ámbito file.

Ejemplo

En el ejemplo siguiente se muestra un tipo público que usa un tipo local de archivo para proporcionar un método de trabajo. Además, el tipo público implementa implícitamente una interfaz local de archivo:

// 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();
    }
}

En otro archivo de origen, puede declarar tipos que tengan los mismos nombres que los tipos locales de archivo. Los tipos locales de archivo no son visibles:

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

Especificación del lenguaje C#

Para más información, consulte Accesibilidad declarada en la especificación del lenguaje C# y la especificación de características Tipos locales de archivo de C# 11.

Consulte también