Delen via


bestand (C#-verwijzing)

Vanaf C# 11 is het file contextuele trefwoord een typeaanpassingsfunctie.

De file wijzigingsfunctie beperkt het bereik en de zichtbaarheid van een type op het hoogste niveau tot het bestand waarin het wordt gedeclareerd. De file wijzigingsfunctie wordt over het algemeen toegepast op typen die zijn geschreven door een brongenerator. Bestands-lokale typen bieden brongeneratoren een handige manier om naamconflicten tussen gegenereerde typen te voorkomen. De file wijzigingsfunctie declareert een bestand-lokaal type, zoals in dit voorbeeld:

file class HiddenWidget
{
    // implementation
}

Alle typen die zijn genest binnen een lokaal bestandstype, zijn ook alleen zichtbaar in het bestand waarin het is gedeclareerd. Andere typen in een assembly kunnen dezelfde naam gebruiken als een lokaal bestandstype. Omdat het lokale bestandstype alleen zichtbaar is in het bestand waarin het is gedeclareerd, maken deze typen geen naamconflict.

Een lokaal bestandstype kan niet het retourtype of parametertype zijn van een lid dat zichtbaarder is dan file het bereik. Een lokaal bestandstype kan geen veldlid zijn van een type dat meer zichtbaarheid heeft dan file het bereik. Een meer zichtbaar type kan echter impliciet een type bestands-lokale interface implementeren. Het type kan ook expliciet een bestands-lokale interface implementeren , maar expliciete implementaties kunnen alleen binnen het file bereik worden gebruikt.

Opmerking

In het volgende voorbeeld ziet u een openbaar type dat gebruikmaakt van een lokaal bestandstype om een werkmethode op te geven. Daarnaast implementeert het openbare type impliciet een bestands-lokale interface:

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

In een ander bronbestand kunt u typen declareren die dezelfde namen hebben als de bestandstypen. De bestandstypen zijn niet zichtbaar:

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

C#-taalspecificatie

Zie Toegankelijkheid gedeclareerd in de C#-taalspecificatie en de functiespecificatie voor lokale bestandstypen van C# 11 voor meer informatie.

Zie ook