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

Le caractère spécial @ sert d’identificateur de chaîne textuelle. Vous l’utilisez des façons suivantes :

  1. Pour indiquer qu’un littéral de chaîne doit être interprété textuellement. Le caractère @ dans cette instance définit un littéral de chaîne textuelle. Les séquences d’échappement simples (comme "\\" pour une barre oblique inverse), hexadécimales (comme "\x0041" pour un A majuscule) et Unicode (comme "\u0041" pour un A majuscule), sont interprétées littéralement. Seule une séquence d’échappement de guillemet ("") n’est pas interprétée littéralement ; elle génère un guillemet double. En outre, dans le cas d’une chaîne interpolée textuelle, les séquences d’échappement des accolades ({{ et }}) ne sont pas interprétées littéralement ; elles produisent une seule accolade. L’exemple suivant définit deux chemins 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 textuelle. Il s’agit là de l’une des utilisations les plus courantes de littéraux de chaîne textuelle.

    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 textuelle 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 @ est le préfixe d’un élément de code que le compilateur doit interpréter comme un 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 boucle for.

    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 de noms. Un attribut est une classe qui dérive de Attribute. Son nom de type comprend généralement le suffixe Attribute, 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 abrégé (par exemple, [Info]). Toutefois, un conflit survient si deux noms de type d’attribut abrégés sont identiques et que l’un d’eux inclut le suffixe Attribute, mais pas l’autre. Par exemple, la compilation du code suivant échoue, car le compilateur ne peut pas déterminer si l’attribut Info ou InfoAttribute est appliqué à la classe Example. 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