Dela via


Filmodifierare

Från och med C# 11 är det file kontextuella nyckelordet en typmodifierare.

file-modifieraren begränsar en toppnivåtyps synlighet till filen där den deklareras. Den file modifieraren tillämpas oftast på typer som skrivs av en källgenerator. Fillokala typer ger källgeneratorer ett bekvämt sätt att undvika namnkollisioner mellan genererade typer. 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 är endast synliga inom samma fil där de deklareras. Andra typer i en assembly kan använda samma namn som en fil-lokal typ. Eftersom den fil-lokala typen endast är synlig i filen där den deklareras, skapar dessa typer inte en namnkollision.

En fillokal typ kan inte vara returtyp eller parametertyp för en medlem som deklarerats i en icke-fillokal typ. En fil-lokal typ kan inte vara en fältmedlem i en icke-fil-lokal. 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# Language Specificationoch C# 11 – Fillokala typer funktionsspecifikation.

Se även