Sdílet prostřednictvím


Modifikátor souboru

Počínaje jazykem C# 11 je kontextové klíčové slovo file modifikátorem typu.

Modifikátor file omezuje viditelnost typu nejvyšší úrovně na soubor, ve kterém je deklarován. Modifikátor file se nejčastěji používá na typy napsané generátorem zdroje. Místní typy souborů poskytují generátory zdrojů pohodlným způsobem, jak se vyhnout kolizím názvů mezi vygenerovanými typy. Modifikátor file deklaruje místní typ souboru, jak je znázorněno v tomto příkladu:

file class HiddenWidget
{
    // implementation
}

Kterékoli typy vnořené do typů místních pro soubor jsou také viditelné pouze v souboru, ve kterém jsou deklarovány. Jiné typy v sestavení můžou používat stejný název jako místní typ souboru. Vzhledem k tomu, že místní typ souboru je viditelný pouze v souboru, kde je deklarován, tyto typy nevytvoří kolize pojmenování.

Místní typ souboru nemůže být návratovým typem ani typem parametru žádného člena deklarovaného v jiném než místním typu. Místní typ souboru nemůže být členem pole jiného než místního souboru. Přístupnější typ však může implicitně implementovat typ místního rozhraní souboru. Typ může také explicitně implementovat místní rozhraní souboru, ale takové explicitní implementace mohou být použity pouze v rámci stejného souboru.

Následující příklad ukazuje veřejný typ, který používá souborově lokální typ k poskytování pracovní metody. Veřejný typ navíc implicitně implementuje místní rozhraní souboru:

// 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();
    }
}

V jiném zdrojovém souboru můžete deklarovat typy, které mají stejné názvy jako místní typy souborů. Místní typy souborů nejsou viditelné:

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

Vyhledávání členů dává přednost typu definovanému ve stejném souboru před typem, který není místní a je deklarován v jiném souboru. Toto pravidlo zajišťuje, že generátor kódu může spoléhat na vyhledávání členů, které vyhodnotí na místně definovaný typ bez nejednoznačnosti s jinými deklaracemi typu. V předchozím příkladu se všechna použití HiddenWidget v File1.cs přeloží na souborově lokální typ deklarovaný v File1.cs. Místní deklarace souboru HiddenWidget skryje veřejnou deklaraci v File2.cs.

Specifikace jazyka C#

Další informace najdete v tématu Deklarované přístupnosti vspecifikace jazyka C# jazyka C# a C# 11 – Místní typy souborů specifikace funkce.

Viz také