Testo verbatim: @ in variabili, attributi e valori letterali stringa

Il carattere speciale @ funge da identificatore verbatim. È possibile usarlo nei modi seguenti:

  1. Per indicare che un valore letterale stringa deve essere interpretato come verbatim. Il carattere @ in questa istanza definisce un valore letterale stringa verbatim. Le sequenze di escape semplici, ad esempio "\\" per una barra rovesciata, le sequenze di escape esadecimali, ad esempio "\x0041" per una A maiuscola, le sequenze di escape Unicode, ad esempio "\u0041" per una A maiuscola, vengono interpretate letteralmente. Solo una sequenza di escape tra virgolette ("") non viene interpretata letteralmente; produce una virgoletta doppia. Inoltre, nel caso di una stringa verbatim interpolatale sequenze di escape tra parentesi graffe ({{ e }}) non vengono interpretate letteralmente; producono caratteri con parentesi graffa singola. Nell'esempio seguente vengono definiti due percorsi di file identici, uno usando un valore letterale stringa normale e l'altro usando un valore letterale stringa verbatim. Questo è uno degli usi più comuni dei valori letterali stringa verbatim.

    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
    

    Nell'esempio seguente viene illustrato l'effetto della definizione di un valore letterale stringa normale e di un valore letterale stringa verbatim che contengono le sequenze di caratteri identiche.

    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. Per usare parole chiave di C# come identificatori. Il carattere @ precede un elemento di codice che il compilatore deve interpretare come identificatore piuttosto che come parola chiave di C#. Nell'esempio seguente il carattere @ viene usato per definire un identificatore denominato for che verrà usato in un ciclo 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. Per consentire al compilatore di distinguere tra gli attributi in caso di conflitto di denominazione. Un attributo è una classe che deriva da Attribute. Il nome del relativo tipo include in genere il suffisso Attributo, anche se il compilatore non applica questa convenzione. È possibile fare riferimento all'attributo nel codice usando il nome completo del tipo, ad esempio [InfoAttribute], o il nome abbreviato, ad esempio, [Info]. Tuttavia, si verifica un conflitto di denominazione se due nomi di tipo di attributo abbreviati sono identici e se un nome di tipo include il suffisso Attribute e l'altro no. Ad esempio, il codice seguente non viene compilato perché il compilatore non può determinare se l'attributo Info o InfoAttribute viene applicato alla classe Example. Per altre informazioni, vedere 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()
       {
       }
    }
    

Vedi anche