Partager via


Texte détaillé : @ dans les variables, les attributs et les littéraux de chaîne

Le @ caractère spécial sert d’identificateur détaillé. Vous l’utilisez de la manière suivante :

  1. Pour indiquer qu’un littéral de chaîne doit être interprété en détail. Le @ caractère de cette instance définit un littéral de chaîne détaillé. Les séquences d’échappement simples (par exemple "\\" , pour une barre oblique inverse), les séquences d’échappement hexadécimales (comme "\x0041" pour un A majuscule) et les séquences d’échappement Unicode (comme "\u0041" pour un A majuscule) sont interprétées littéralement. Seule une séquence d’échappement de guillemets ("") n’est pas interprétée littéralement ; elle produit un guillemet double. En outre, en cas de séquences d’échappement d’accolades de chaîne interpolées détaillées ({{ et }}) ne sont pas interprétées littéralement ; elles produisent des caractères d’accolades simples. L’exemple suivant définit deux chemins d’accès de fichier identiques, un à l’aide d’un littéral de chaîne standard et l’autre à l’aide d’un littéral de chaîne détaillé. Il s’agit de l’une des utilisations les plus courantes des littéraux de chaînes détaillées.

    string filename1 = @"c:\documents\files\u0066.txt";
    string filename2 = "c:\\documents\\files\\u0066.txt";
    
    Console.WriteLine(filename1);
    Console.WriteLine(filename2);
    // The example displays the following output:
    //     c:\documents\files\u0066.txt
    //     c:\documents\files\u0066.txt
    

    L’exemple suivant illustre l’effet de la définition d’un littéral de chaîne standard et d’un littéral de chaîne détaillé qui contiennent des séquences de caractères identiques.

    string s1 = "He said, \"This is the last \u0063hance\x0021\"";
    string s2 = @"He said, ""This is the last \u0063hance\x0021""";
    
    Console.WriteLine(s1);
    Console.WriteLine(s2);
    // The example displays the following output:
    //     He said, "This is the last chance!"
    //     He said, "This is the last \u0063hance\x0021"
    
  2. Pour utiliser des mots clés C# en tant qu’identificateurs. Le @ caractère préfixe un élément de code que le compilateur doit interpréter en tant qu’identificateur plutôt qu’un mot clé C#. L’exemple suivant utilise le @ caractère pour définir un identificateur nommé for qu’il utilise dans une for boucle.

    string[] @for = { "John", "James", "Joan", "Jamie" };
    for (int ctr = 0; ctr < @for.Length; ctr++)
    {
       Console.WriteLine($"Here is your gift, {@for[ctr]}!");
    }
    // The example displays the following output:
    //     Here is your gift, John!
    //     Here is your gift, James!
    //     Here is your gift, Joan!
    //     Here is your gift, Jamie!
    
  3. Pour permettre au compilateur de faire la distinction entre les attributs en cas de conflit d’affectation de noms. Un attribut est une classe qui dérive de Attribute. Son nom de type inclut généralement l’attribut de suffixe, bien que le compilateur n’applique pas cette convention. L’attribut peut ensuite être référencé dans le code par son nom de type complet (par exemple, [InfoAttribute] ou son nom raccourci (par exemple). [Info] Toutefois, un conflit d’affectation de noms se produit si deux noms de types d’attribut raccourcis sont identiques, et un nom de type inclut le suffixe Attribut , mais l’autre ne le fait pas. Par exemple, le code suivant ne parvient pas à compiler, car le compilateur ne peut pas déterminer si l’attribut ou InfoAttribute l’attribut Info est appliqué à la Example classe. Pour plus d’informations, consultez CS1614.

    using System;
    
    [AttributeUsage(AttributeTargets.Class)]
    public class Info : Attribute
    {
       private string information;
    
       public Info(string info)
       {
          information = info;
       }
    }
    
    [AttributeUsage(AttributeTargets.Method)]
    public class InfoAttribute : Attribute
    {
       private string information;
    
       public InfoAttribute(string info)
       {
          information = info;
       }
    }
    
    [Info("A simple executable.")] // Generates compiler error CS1614. Ambiguous Info and InfoAttribute.
    // Prepend '@' to select 'Info' ([@Info("A simple executable.")]). Specify the full name 'InfoAttribute' to select it.
    public class Example
    {
       [InfoAttribute("The entry point.")]
       public static void Main()
       {
       }
    }
    

Voir aussi