De bestandsmodificator
Vanaf C# 11 is het file
contextuele trefwoord een typemodifier.
De file
wijzigingsfunctie beperkt de zichtbaarheid van een type op het hoogste niveau tot het bestand waarin het wordt gedeclareerd. De file
wijzigingsfunctie wordt het vaakst 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
modifier declareert een lokaal bestandstype, 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 type dat bestand-lokaal is, kan niet het retourtype of parametertype zijn van een lid dat in een niet-bestand-lokaal type is gedeclareerd. Een bestandlokaal type kan geen veld-lid zijn van een niet-bestandlokaal 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#-taalspecificatieen de C# 11 - Lokale bestandstypen functiespecificatie.