Teks verbatim - @ dalam variabel, atribut, dan literal string

Karakter @ khusus berfungsi sebagai pengidentifikasi verbatim. Gunakan dengan cara berikut:

  1. Untuk menunjukkan bahwa string harfiah adalah untuk ditafsirkan verbatim. Karakter @ dalam instans ini mendefinisikan string verbatim literal. Urutan escape sederhana (seperti "\\" untuk garis miring terbalik), urutan escape heksadesimal (seperti "\x0041" untuk huruf besar A), dan urutan escape Unicode (seperti "\u0041" untuk huruf besar A) ditafsirkan secara harfiah. Hanya urutan escape kutipan ("") yang tidak ditafsirkan secara harfiah; itu menghasilkan satu tanda kutip ganda. Selain itu, dalam kasus urutan escape kurung kurawal string terinterpolasi verbatim ({{ dan }}) tidak ditafsirkan secara harfiah; mereka menghasilkan karakter kurung kurawal tunggal. Contoh berikut mendefinisikan dua jalur file yang identik, satu dengan menggunakan string reguler literal dan yang lain dengan menggunakan string verbatim literal. Ini adalah salah satu penggunaan literal string verbatim yang lebih umum.

    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
    

    Contoh berikut mengilustrasikan efek menentukan literal string reguler dan string verbatim literal yang berisi urutan karakter yang identik.

    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. Untuk menggunakan kata kunci C# sebagai pengidentifikasi. Karakter @ awalan elemen kode yang ditafsirkan pengkompilasi sebagai pengidentifikasi daripada kata kunci C#. Contoh berikut menggunakan @ karakter untuk menentukan pengidentifikasi bernama for yang digunakannya dalam perulangan 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. Untuk memungkinkan pengkompilasi membedakan antara atribut dalam kasus konflik penamaan. Atribut adalah kelas yang berasal dari Attribute. Nama jenisnya biasanya mencakup Atribut akhiran, meskipun pengkompilasi tidak memberlakukan konvensi ini. Anda dapat mereferensikan atribut dalam kode baik dengan nama jenis lengkapnya (misalnya, [InfoAttribute]) atau dengan nama yang dipersingkat (misalnya, [Info]). Namun, konflik penamaan terjadi jika dua nama jenis atribut yang dipersingkat identik, dan satu nama jenis menyertakan akhiran Atribut tetapi yang lain tidak. Misalnya, kode berikut gagal dikompilasi karena pengkompilasi tidak dapat menentukan apakah Info atribut atau InfoAttribute diterapkan ke Example kelas. Untuk informasi selengkapnya, lihat 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()
       {
       }
    }
    

Lihat juga