Delen via


De bestandsmodificator

De file wijzigingsfunctie beperkt de zichtbaarheid van een type op het hoogste niveau tot het bestand dat de declaratie bevat. Brongeneratoren passen de wijzigingsgenerator file meestal toe op typen die ze genereren. Bestands-lokale typen bieden brongeneratoren een handige manier om naamconflicten tussen gegenereerde typen te voorkomen.

De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.

De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.

Aanbeveling

Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.

De file modifier declareert een lokaal bestandstype, zoals in dit voorbeeld:

file class HiddenWidget
{
    // implementation
}

Alle typen die zijn genest binnen een bestand-lokaal type, zijn ook alleen zichtbaar in het bestand dat de declaratie bevat. Andere typen in een assembly kunnen dezelfde naam gebruiken als een lokaal bestandstype. Omdat het lokale bestandstype alleen zichtbaar is in het bestand dat de declaratie bevat, maken deze typen geen naamconflict.

Een bestand-lokaal type kan niet het retourtype of parametertype zijn van een lid dat is gedeclareerd in een niet-bestand-lokaal type. Een bestand-lokaal type kan geen veldlid zijn van een niet-bestand-lokaal type. Een meer zichtbaar type kan echter impliciet een type bestands-lokale interface implementeren. Het type kan ook expliciet implementeren een lokale bestandsinterface, maar expliciete implementaties kunnen alleen in hetzelfde bestand worden gebruikt.

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 bestand-lokale typen. De bestand-lokale typen zijn niet zichtbaar:

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

Het opzoeken van leden geeft de voorkeur aan een lokaal bestandstype dat in hetzelfde bestand is gedeclareerd ten opzichte van een niet-bestand-lokaal type dat in een ander bestand is gedeclareerd. Deze regel zorgt ervoor dat een brongenerator kan vertrouwen op het oplossen van ledenzoekopdrachten naar een bestandlokaal type zonder dubbelzinnigheid met andere typedeclaraties. In het voorgaande voorbeeld worden alle toepassingen van HiddenWidget in File1.cs omgezet in het lokale bestandstype dat in File1.csis gedeclareerd. De bestands-lokale verklaring van HiddenWidget verbergt de openbare verklaring in File2.cs.

C#-taalspecificatie

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

Zie ook