Szó szerinti szöveg – @ változókban, attribútumokban és sztringkonstansokban

A @ speciális karakter szó szerinti azonosítóként szolgál. A következő módokon használható:

  1. A sztringkonstans szó szerinti értelmezésének jelzése. A @ jelen példány karaktere egy szó szerinti sztringkonstanst határoz meg. A rendszer szó szerint értelmezi az egyszerű menekülési sorozatokat (például "\\" fordított perjelekhez), a hexadecimális menekülési sorozatokat (például "\x0041" nagybetűs A esetén) és a Unicode-feloldósorozatokat (például "\u0041" nagybetűs A esetén). Csak az idézőjelek feloldási sorozatát ("") nem értelmezi szó szerint; egy dupla idézőjelet hoz létre. Emellett szó szerint interpolált sztringkapcsos zárójelek esetén a feloldósorozatok ({{ és }}) nem szó szerint értelmezve vannak; egyetlen zárójelkaraktert hoznak létre. Az alábbi példa két azonos fájlelérési utat határoz meg, az egyiket egy normál sztringkonstans, a másikat pedig egy szó szerinti sztringkonstans használatával. Ez a szó szerinti sztringkonstansok egyik leggyakoribb felhasználási módja.

    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
    

    Az alábbi példa egy reguláris sztringkonstans és egy azonos karaktersorozatokat tartalmazó szó szerinti sztringkonstans definiálásának hatását mutatja be.

    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#-kulcsszavak használata azonosítóként. A @ karakter előtagja egy kódelem, amelyet a fordító a C# kulcsszó helyett azonosítóként értelmez. Az alábbi példa egy ciklusban használt azonosító for definiálásához használja a @ karaktertfor.

    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. Annak engedélyezése, hogy a fordító különbséget tudjon tenni az attribútumok között elnevezési ütközés esetén. Az attribútum egy osztály, amely a forrásból Attributeszármazik. A típusnév általában tartalmazza az attribútum utótagot, bár a fordító nem kényszeríti ezt a konvenciót. Az attribútum ezután a kódban teljes típusnévvel (például [InfoAttribute] rövidített nevével( például [Info]) hivatkozható. Az elnevezési ütközés azonban akkor fordul elő, ha két rövidített attribútumtípus neve azonos, és az egyik típusnév tartalmazza az Attribútum utótagot, a másik pedig nem. A következő kód például nem fordítható le, mert a fordító nem tudja megállapítani, hogy a program alkalmazza-e az InfoInfoAttribute attribútumot az Example osztályra. További információ: 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()
       {
       }
    }
    

Lásd még