Dela via


Filmodifierare

Modifieraren file begränsar en toppnivåtyps synlighet till filen som innehåller deklarationen. Källgeneratorer tillämpar oftast modifieraren på file typer som de genererar. Fillokala typer ger källgeneratorer ett bekvämt sätt att undvika namnkollisioner mellan genererade typer.

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

file-modifikatorn deklarerar en fil-lokal typ, som i det här exemplet:

file class HiddenWidget
{
    // implementation
}

Alla typer som är kapslade i en fillokal typ visas också bara i filen som innehåller deklarationen. Andra typer i en assembly kan använda samma namn som en fil-lokal typ. Eftersom den fillokala typen endast visas i filen som innehåller deklarationen skapar dessa typer inte en namngivningskollision.

En fillokal typ kan inte vara returtyp eller parametertyp för en medlem som deklarerats i en icke-fillokal typ. En fillokal typ kan inte vara en fältmedlem av en icke-fillokal typ. En mer synlig typ kan dock implicit implementera en fillokal gränssnittstyp. Typen kan också uttryckligen implementera ett fil-lokalt gränssnitt, men explicita implementeringar kan bara användas i den samma filen.

I följande exempel visas en offentlig typ som använder en filspecifik typ för att erbjuda en arbetarmetod. Dessutom implementerar den publika typen ett fillokalt gränssnitt implicit:

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

I en annan källfil kan du deklarera typer som har samma namn som de fillokala typerna. De fil-lokala typerna är inte synliga.

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

Medlemssökning föredrar en fillokal typ som deklarerats i samma fil framför en icke-fillokal typ som deklarerats i en annan fil. Den här regeln säkerställer att en källgenerator kan förlita sig på att medlemssökningen löses till en fil-lokal typ utan att förväxlas med andra typdeklarationer. I föregående exempel gäller alla användningar av HiddenWidget i File1.cs den fillokala typ som deklarerats i File1.cs. Den fil-lokala deklarationen för HiddenWidget döljer den offentliga deklarationen i File2.cs.

Språkspecifikation för C#

Mer information finns i Deklarerad tillgänglighet i C#-språkspecifikationen och funktionsspecifikationen Fillokala typer .

Se även