Condividi tramite


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 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) e 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 sequenze di escape di parentesi graffe interpolate verbatim ({{ e }}) non vengono interpretate letteralmente, ma producono caratteri di parentesi graffa singola. Nell'esempio seguente vengono definiti due percorsi di file identici, uno usando un valore letterale stringa regolare e l'altro usando un valore letterale stringa verbatim. Si tratta di 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 regolare e di un valore letterale stringa verbatim che contengono 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 C# come identificatori. Il @ carattere prefissi un elemento di codice che il compilatore deve interpretare come identificatore anziché come parola chiave C#. Nell'esempio seguente viene usato il @ carattere per definire un identificatore denominato for usato in un for ciclo.

    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 attributi in caso di conflitto di denominazione. Un attributo è una classe che deriva da Attribute. Il nome del tipo include in genere l'attributo suffisso, anche se il compilatore non applica questa convenzione. È quindi possibile fare riferimento all'attributo nel codice in base al nome completo del tipo ( ad esempio, [InfoAttribute] o al nome abbreviato , ad esempio [Info]). Tuttavia, si verifica un conflitto di denominazione se due nomi di tipi di attributo abbreviati sono identici e un nome di tipo include il suffisso Attribute , ma l'altro non. Ad esempio, il codice seguente non viene compilato perché il compilatore non è in grado di determinare se l'attributo Info o InfoAttribute viene applicato alla Example classe . 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()
       {
       }
    }
    

Vedere anche