Ayrıntılı metin - @ değişkenler, öznitelikler ve dize değişmez değerleri içinde

Özel @ karakter, ayrıntılı tanımlayıcı işlevi görür. Bunu aşağıdaki yollarla kullanırsınız:

  1. Dize değişmez değerlerinin ayrıntılı olarak yorumlanması gerektiğini belirtmek için. @ Bu örnekteki karakter bir düz metin dizesi değişmez değeri tanımlar. Basit kaçış dizileri (ters eğik çizgi gibi "\\" ), onaltılık kaçış dizileri (büyük harf A gibi "\x0041" ) ve Unicode kaçış dizileri (büyük A gibi "\u0041" ) kelimenin tam anlamıyla yorumlanır. Yalnızca bir tırnak kaçış dizisi ("") tam olarak yorumlanmamıştır; bir çift tırnak işareti oluşturur. Ayrıca, düz bir ilişkilendirmeli dize ayracı kaçış dizileri ({{ ve }}) tam olarak yorumlanmıyorsa, tek küme ayracı karakterleri üretir. Aşağıdaki örnek, biri normal bir dize değişmez değeri, diğeri ise düz metin dizesi değişmez değeri kullanarak iki özdeş dosya yolunu tanımlar. Bu, ayrıntılı dize değişmez değerlerinin daha yaygın kullanımlarından biridir.

    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
    

    Aşağıdaki örnekte, aynı karakter dizilerini içeren normal bir dize değişmez değeri ve düz metin dizesi değişmez değeri tanımlamanın etkisi gösterilmektedir.

    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. Tanımlayıcı olarak C# anahtar sözcüklerini kullanmak için. karakteri, @ derleyicinin C# anahtar sözcüğü yerine tanımlayıcı olarak yorumlamak üzere bir kod öğesine ön ek ekler. Aşağıdaki örnek, bir döngüde @for kullandığı adlı for tanımlayıcıyı tanımlamak için karakterini kullanır.

    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. Derleyicinin adlandırma çakışması durumlarında öznitelikleri ayırt edebilmesini sağlamak için. Öznitelik, öğesinden Attributetüretilen bir sınıftır. Tür adı genellikle sonek Özniteliğini içerir, ancak derleyici bu kuralı zorlamaz. Daha sonra kodda özniteliğe tam tür adıyla (örneğin, [InfoAttribute] kısaltılmış adıyla) [Info]başvurabilirsiniz. Ancak, iki kısaltılmış öznitelik türü adı özdeşse ve bir tür adı Öznitelik son ekini içerir ancak diğeri değilse adlandırma çakışması oluşur. Örneğin, derleyici veya InfoAttribute özniteliğinin sınıfına uygulanıp uygulanmadığını Info belirleyemediğinden Example aşağıdaki kod derlenemiyor. Daha fazla bilgi için bkz . 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()
       {
       }
    }
    

Ayrıca bkz.