Sdílet prostřednictvím


Modifikátor souboru

file Modifikátor omezuje viditelnost typu nejvyšší úrovně na soubor obsahující jeho deklaraci. 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
}

Všechny typy vnořené v místním typu souboru jsou viditelné pouze v souboru obsahujícím jeho deklaraci. 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 obsahujícím jeho deklaraci, tyto typy nevytvoří kolizi 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 naleznete v tématu Deklarovaná přístupnost ve specifikaci jazyka C# a specifikace funkce Místní typy souborů .

Viz také