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.