Teks verbatim - @
dalam variabel, atribut, dan literal string
Karakter khusus @
berfungsi sebagai pengidentifikasi verbatim. Anda menggunakannya dengan cara berikut:
Untuk menunjukkan bahwa harfiah string akan ditafsirkan sebagai verbatim. Karakter
@
dalam instans ini menentukan harfiah string verbatim. 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 menentukan dua jalur file yang identik, satu menggunakan harfiah string reguler dan yang lainnya menggunakan harfiah string verbatim. Ini adalah salah satu penggunaan harfiah 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 menggambarkan efek penentuan harfiah string reguler dan harfiah string verbatim 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"
Untuk menggunakan kata kunci C# sebagai pengidentifikasi. Karakter
@
mengawali elemen kode yang ditafsirkan pengompilasi sebagai pengidentifikasi dan bukan kata kunci C#. Contoh berikut menggunakan karakter@
untuk menentukan pengidentifikasi bernamafor
yang digunakannya dalam perulanganfor
.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!
Agar pengompilasi dapat 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. Atribut kemudian dapat direferensikan dalam kode baik dengan nama jenis lengkapnya (misalnya,
[InfoAttribute]
atau 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 apakahInfo
atribut atauInfoAttribute
diterapkan keExample
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() { } }