Dela via


fil (C#-referens)

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

Modifieraren file begränsar en toppnivåtyps omfång och synlighet till filen där den deklareras. Modifieraren file tillämpas vanligtvis på typer som skrivs av en källgenerator. Fillokala typer ger källgeneratorer ett bekvämt sätt att undvika namnkollisioner mellan genererade typer. Modifieraren file deklarerar en fillokal 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 där den deklareras. Andra typer i en sammansättning kan använda samma namn som en fillokal typ. Eftersom den fillokala typen endast visas i filen där den deklareras skapar dessa typer inte en namngivningskollision.

En fillokal typ kan inte vara returtyp eller parametertyp för en medlem som är mer synlig än file omfånget. En fillokal typ kan inte vara en fältmedlem av en typ som har större synlighet än file omfånget. En mer synlig typ kan dock implicit implementera en fillokal gränssnittstyp. Typen kan också uttryckligen implementera ett fillokalt gränssnitt, men explicita implementeringar kan endast användas inom omfånget file .

Exempel

I följande exempel visas en offentlig typ som använder en fillokal typ för att tillhandahålla en arbetsmetod. Dessutom implementerar den offentliga 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 fillokala typerna visas inte:

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

Språkspecifikation för C#

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

Se även