Udostępnij za pośrednictwem


file (odwołanie w C#)

Począwszy od języka C# 11, file słowo kluczowe kontekstowe jest modyfikatorem typów.

Modyfikator file ogranicza zakres i widoczność typu najwyższego poziomu do pliku, w którym jest zadeklarowany. Modyfikator file będzie zwykle 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
}

Wszystkie typy zagnieżdżone w typie lokalnym pliku są również widoczne tylko w pliku, w którym jest zadeklarowany. 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 pliku lokalnego nie może być typem zwracanym ani typem parametru dowolnego elementu członkowskiego, który jest bardziej widoczny niż file zakres. Typ pliku lokalnego nie może być elementem członkowskim pola typu, który ma większą widoczność niż file zakres. Jednak bardziej widoczny typ może niejawnie implementować typ interfejsu lokalnego pliku. Typ może również jawnie zaimplementować interfejs lokalny pliku, ale jawne implementacje mogą być używane tylko w file zakresie.

Przykład

W poniższym przykładzie przedstawiono typ publiczny, który używa typu pliku lokalnego do zapewnienia metody procesu roboczego. 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
    }
}

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Zadeklarowane ułatwienia dostępu w specyfikacji języka C# i specyfikacji funkcji C# 11 — File local types .

Zobacz też