Partager via


Modificateur de fichier

À compter de C# 11, le mot clé contextuel file est un modificateur de type.

Le modificateur file limite la visibilité d’un type de niveau supérieur au fichier dans lequel il est déclaré. Le modificateur file est le plus souvent appliqué aux types écrits par un générateur source. 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. 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 dans lequel il est déclaré. 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 est visible uniquement dans le fichier où il est déclaré, 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 file-local ne peut pas être un membre de champ d'un type non local au 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 l’accessibilité déclarée dans la spécification du langage C# , ainsi que les types locaux de fichiers C# 11 dans la spécification des fonctionnalités.

Voir aussi