Modyfikator plików
Począwszy od języka C# 11, słowo kluczowe file
kontekstowe jest modyfikatorem typu.
Modyfikator file
ogranicza widoczność typu najwyższego poziomu do pliku, w którym jest zadeklarowany. Modyfikator file
jest najczęściej stosowany do typów napisanych przez generator źródła. Typy plików lokalnych zapewniają generatory źródeł w wygodny sposób, aby uniknąć kolizji nazw między generowanymi typami. Modyfikator file
deklaruje typ pliku lokalnego, jak w tym przykładzie:
file class HiddenWidget
{
// implementation
}
Typy zagnieżdżone w typie lokalnym dla pliku są również widoczne tylko w pliku, w którym są zadeklarowane. Inne typy w zestawie mogą używać tej samej nazwy co typ pliku lokalnego. Ponieważ typ pliku lokalnego jest widoczny tylko w pliku, w którym jest zadeklarowany, te typy nie tworzą kolizji nazewnictwa.
Typ lokalny dla pliku nie może być typem zwracanym ani typem parametru żadnego elementu członkowskiego zadeklarowanego w typie innym niż lokalny dla pliku. Typ lokalny dla pliku nie może być elementem członkowskim pola nielokalnego dla pliku. Jednak bardziej widoczny typ może niejawnie implementować typ interfejsu lokalnego pliku. Typ może również jawnie zaimplementować lokalny dla pliku interfejs, ale jawne implementacje mogą być używane tylko w tym samym pliku.
W poniższym przykładzie przedstawiono typ publiczny, który używa lokalnego typu pliku do zapewnienia metody roboczej. Ponadto typ publiczny implementuje niejawnie interfejs lokalny pliku:
// 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();
}
}
W innym pliku źródłowym można zadeklarować typy o takich samych nazwach jak typy lokalne plików. Typy plików lokalnych nie są widoczne:
// In File2.cs:
// Doesn't conflict with HiddenWidget
// declared in File1.cs
public class HiddenWidget
{
public void RunTask()
{
// omitted
}
}
Wyszukiwanie elementów preferuje typ lokalny pliku zadeklarowany w tym samym pliku nad typ nielokalny zadeklarowany w innym pliku. Ta reguła gwarantuje, że generator kodu źródłowego może polegać na operacji wyszukiwania członków rozwiązywanej do typu lokalnego pliku bez niejednoznaczności z innymi deklaracjami typów. W poprzednim przykładzie wszystkie zastosowania HiddenWidget
w File1.cs odnoszą się do typu lokalnego pliku zadeklarowanego w File1.cs. Deklaracja plikowo-lokalna HiddenWidget
ukrywa deklarację publiczną w File2.cs.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Deklarowane ułatwienia dostępu w specyfikacji języka C# oraz specyfikacji funkcji Lokalne typy plików C# 11.
Zobacz też
- C# słowa kluczowe
- modyfikatory dostępu
- poziomy ułatwień dostępu
- modyfikatory
- publiczne
- chronione
- wewnętrzne