Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подробный текст —
Специальный @
символ служит в качестве подробного идентификатора. Его можно использовать следующим образом:
Чтобы указать, что строковый литерал интерпретируется подробно. Символ
@
в этом экземпляре определяет подробный строковый литерал. Простые escape-последовательности (например"\\"
, для обратной косой черты), шестнадцатеричные escape-последовательности (например, для прописной буквы А) и escape-последовательности Юникода (например"\x0041"
"\u0041"
, для верхнего регистра А) интерпретируются буквально. Только escape-последовательность кавычки (""
) не интерпретируется буквально; она создает один двойный кавычки. Кроме того, в случае с интерполированными последовательностями строковых фигурных фигурных скобок ({{
и}}
) не интерпретируются буквально; они создают символы с одной фигурной скобкой. В следующем примере определяются два одинаковых пути к файлам, один с помощью обычного строкового литерала и другого с помощью строкового литерала. Это одно из наиболее распространенных применений строковых литералов.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
В следующем примере показано, как определить обычный строковый литерал и подробный строковый литерал, содержащий идентичные последовательности символов.
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"
Использование ключевых слов C# в качестве идентификаторов. Символ
@
префиксирует элемент кода, который компилятор интерпретирует как идентификатор, а не ключевое слово C#. В следующем примере символ используется для определения идентификатора, который он использует@
в циклеfor
.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!
Чтобы компилятор мог различать атрибуты в случаях конфликта именования. Атрибут — это класс, производный от Attribute. Его имя типа обычно включает атрибут суффикса, хотя компилятор не применяет это соглашение. Затем атрибут можно ссылаться в коде по имени полного типа (например,
[InfoAttribute]
или его сокращенное имя (например,[Info]
). Однако конфликт именования возникает, если два сокращенных имена типов атрибутов идентичны, и одно имя типа включает суффикс атрибута , но другой не. Например, следующий код не может компилироваться, так как компилятор не может определить, применяется лиInfo
InfoAttribute
атрибут к классуExample
. Дополнительные сведения см. в разделе 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() { } }