Exacte tekst- @ in variabelen, kenmerken en letterlijke tekenreeksen

Het @ speciale teken fungeert als een verbatim-id. U gebruikt deze op de volgende manieren:

  1. Om aan te geven dat een letterlijke tekenreeks letterlijk moet worden geïnterpreteerd. Het @ teken in dit exemplaar definieert een letterlijke letterlijke tekenreeks. Eenvoudige escapereeksen (zoals "\\" voor een backslash), hexadecimale escapereeksen (zoals "\x0041" voor een hoofdletter A) en Unicode-escapereeksen (zoals "\u0041" voor een hoofdletter A) worden letterlijk geïnterpreteerd. Alleen een escapereeks voor aanhalingstekens ("") wordt letterlijk niet geïnterpreteerd; het produceert één dubbel aanhalingsteken. Daarnaast worden escapereeksen voor tekenreeksen die zijn geïnterpoleerd ({{ en }}) niet letterlijk geïnterpreteerd; ze produceren enkele accoladetekens. In het volgende voorbeeld worden twee identieke bestandspaden gedefinieerd, één met behulp van een gewone letterlijke tekenreeks en de andere met behulp van een letterlijke letterlijke tekenreeks. Dit is een van de meest voorkomende toepassingen van letterlijke letterlijke woordreeksen.

    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
    

    In het volgende voorbeeld ziet u het effect van het definiëren van een gewone letterlijke tekenreeks en een letterlijke letterlijke verbatimtekenreeks die identieke tekenreeksen bevatten.

    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. C#-trefwoorden gebruiken als id's. Het @ teken voorvoegt een code-element dat de compiler moet interpreteren als een id in plaats van een C#-trefwoord. In het volgende voorbeeld wordt het @ teken gebruikt om een id te definiëren die for in een for lus wordt gebruikt.

    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. Om de compiler in staat te stellen onderscheid te maken tussen kenmerken in gevallen van een naamconflict. Een kenmerk is een klasse die is afgeleid van Attribute. De typenaam bevat doorgaans het achtervoegselkenmerk, hoewel de compiler deze conventie niet afdwingt. Het kenmerk kan vervolgens in code worden verwezen door de volledige typenaam (bijvoorbeeld [InfoAttribute] of de verkorte naam (bijvoorbeeld [Info]). Er treedt echter een naamconflict op als twee verkorte kenmerktypenamen identiek zijn en één typenaam het achtervoegsel Kenmerk bevat, maar de andere niet. De volgende code kan bijvoorbeeld niet worden gecompileerd omdat de compiler niet kan bepalen of het Info kenmerk InfoAttribute wordt toegepast op de Example klasse. Zie CS1614 voor meer informatie.

    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()
       {
       }
    }
    

Zie ook