Partager via


Modificateur de fichier

Le file modificateur limite la visibilité d’un type de niveau supérieur au fichier contenant sa déclaration. Les générateurs sources appliquent le plus souvent le file modificateur aux types qu’ils génèrent. Les types locaux de fichiers fournissent des générateurs sources avec un moyen pratique d’éviter les collisions de noms entre les types générés.

La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.

La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.

Conseil / Astuce

Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.

Le modificateur file déclare un type local de fichier, comme dans cet exemple :

file class HiddenWidget
{
    // implementation
}

Tous les types imbriqués dans un type local de fichier sont également visibles uniquement dans le fichier contenant sa déclaration. D’autres types d’un assembly peuvent utiliser le même nom qu’un type local de fichier. Étant donné que le type local de fichier n’est visible que dans le fichier contenant sa déclaration, ces types ne créent pas de collision de nommage.

Un type local de fichier ne peut pas être le type de retour ou le type de paramètre d’un membre déclaré dans un type non local de fichier. Un type local de fichier ne peut pas être un membre de champ d’un type non local de fichier. Toutefois, un type plus visible peut implémenter implicitement un type d’interface local de fichier. Le type peut également implémenter explicitement une interface locale de fichier, mais les implémentations explicites peuvent uniquement être utilisées dans le même fichier.

L’exemple suivant montre un type public qui utilise un type local de fichier pour fournir une méthode de travail. En outre, le type public implémente implicitement une interface locale de fichier :

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

Dans un autre fichier source, vous pouvez déclarer des types qui ont les mêmes noms que les types locaux de fichiers. Les types locaux de fichiers ne sont pas visibles :

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

La recherche de membre préfère un type local de fichier déclaré dans le même fichier qu’un type non local de fichier déclaré dans un autre fichier. Cette règle garantit qu'un générateur de source peut s'appuyer sur la recherche d'un membre résolvant un type local de fichier sans ambiguïté avec d'autres déclarations de type. Dans l’exemple précédent, toutes les utilisations de HiddenWidget dans File1.cs sont résolues en type local de fichier déclaré dans File1.cs. La déclaration locale de fichier de HiddenWidget masque la déclaration publique dans File2.cs.

Spécification du langage C#

Pour plus d’informations, consultez Accessibilité déclarée dans la spécification du langage C# et la spécification de la fonctionnalité de types locaux de fichiers .

Voir aussi