file (riferimento C#)

A partire da C# 11, la parola chiave contestuale file è un modificatore di tipo.

Il modificatore file limita l'ambito e la visibilità del tipo di primo livello al file in cui è dichiarato. Il modificatore file in genere verrà applicato ai tipi scritti da un generatore di origine. I tipi file-local forniscono ai generatori di origine un modo pratico per evitare conflitti di nomi tra i tipi generati. Il modificatore file dichiara un tipo file-local, come in questo esempio:

file class HiddenWidget
{
    // implementation
}

Tutti i tipi annidati all'interno di un tipo file-local sono visibili solo all'interno del file in cui sono dichiarati. Altri tipi in un assembly possono usare lo stesso nome di un tipo file-local. Dato che il tipo file-local è visibile solo nel file in cui è dichiarato, questi tipi non creano un conflitto di denominazione.

Un tipo file-local non può essere il tipo restituito o il tipo di parametro di qualsiasi membro più visibile rispetto all'ambito file. Un tipo file-local non può essere un membro del campo di un tipo con visibilità maggiore rispetto all'ambito file. Tuttavia, un tipo più visibile può implementare in modo implicito un tipo di interfaccia file-local. Il tipo può anche implementare in modo esplicito un'interfaccia file-local, ma le implementazioni esplicite possono essere usate solo all'interno dell'ambito file.

Esempio

Nell'esempio seguente viene illustrato un tipo pubblico che usa un tipo file-local per fornire un metodo di ruolo di lavoro. Inoltre, il tipo pubblico implementa in modo implicito un'interfaccia file-local:

// 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 un altro file di origine è possibile dichiarare tipi con gli stessi nomi dei tipi file-local. I tipi file-local non sono visibili:

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

Specifiche del linguaggio C#

Per altre informazioni, vedere Accessibilità dichiarata in C# Language Specification e la specifica della funzionalità C# 11 - Tipi file-local.

Vedi anche