@ (C# Başvurusu)
@Özel karakter, tam tanımlayıcı işlevi görür. Aşağıdaki yollarla kullanılabilir:
C# anahtar sözcüklerini tanımlayıcı olarak kullanılacak şekilde etkinleştirmek için.
@Karakter, derleyicinin bir C# anahtar sözcüğü yerine bir tanımlayıcı olarak yorumlanacağı bir kod öğesi ön ekine sahiptir. Aşağıdaki örnek,@bir döngüsünde kullandığı adlı bir tanımlayıcıyı tanımlamak için karakterini kullanırforfor.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!Dize sabit değerinin tam olarak yorumlandığını göstermek için.
@Bu örnekteki karakter, tam bir dize sabit değeri tanımlar. Basit kaçış dizileri ("\\"ters eğik çizgi gibi), onaltılık kaçış dizileri ("\x0041"büyük a için gibi) ve Unicode kaçış dizileri (örn"\u0041". bir büyük harf a), tam olarak yorumlanır. Yalnızca bir Quote kaçış sırası (""), tam olarak yorumlanmaz; bir çift tırnak işareti üretir. Bunlara ek olarak, tam olarak bulunan bir dize ayracı kaçış dizileri ({{ve), tam olarak}}yorumlanmaz; tek küme ayracı karakterleri üretir. Aşağıdaki örnek, biri normal dize değişmez değeri ve diğeri de tam olarak bir dize sabiti kullanarak iki özdeş dosya yolunu tanımlar. Bu, tam dize değişmez değerlerinin yaygın kullanımlarındaki bir 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.txtAşağıdaki örnek, bir normal dize sabit değeri ve özdeş karakter dizileri içeren tam bir dize sabiti tanımlamanın etkisini gösterir.
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"Derleyicinin, bir adlandırma çakışması durumunda öznitelikleri birbirinden ayırt etmek üzere etkinleştirmek için. Öznitelik, öğesinden türetilen bir sınıftır Attribute . Tür adı genellikle sonek özniteliğini içerir, ancak derleyici bu kuralı zorlamaz. Daha sonra özniteliğe, tam tür adı (örneğin,
[InfoAttribute]veya kısaltılmış adı) ile (örneğin,) başvuruda bulunabilir[Info]. Ancak, iki kısaltılmış öznitelik türü adı özdeş ise ve bir tür adı öznitelik sonekini içeriyorsa ancak diğeri yoksa, bir adlandırma çakışması oluşur. Örneğin, derleyiciInfoveyaInfoAttributeözniteliğinin sınıfa uygulanıp uygulanmadığını belirleyemediği için aşağıdaki kod derlenemiyorExample. 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() { } }