@(C# 참조)@ (C# Reference)

@ 특수 문자는 축자 식별자로 사용됩니다.The @ special character serves as a verbatim identifier. 다음과 같은 방법으로 사용할 수 있습니다.It can be used in the following ways:

  1. C# 키워드를 식별자로 사용하도록 설정합니다.To enable C# keywords to be used as identifiers. @ 문자는 컴파일러가 C# 키워드가 아닌 식별자로 해석할 코드 요소의 접두사입니다.The @ character prefixes a code element that the compiler is to interpret as an identifier rather than a C# keyword. 다음 예제에서는 @ 문자를 사용하여 for 루프에서 사용되는 for라는 이름의 식별자를 정의합니다.The following example uses the @ character to define an identifier named for that it uses in a for loop.

    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!
    
  2. 문자열 리터럴이 축자로 해석될 것임을 나타냅니다.To indicate that a string literal is to be interpreted verbatim. 이 인스턴스의 @ 문자는 축자 문자 문자열을 정의합니다.The @ character in this instance defines a verbatim string literal. 단순 이스케이프 시퀀스(예: 백슬래시에 "\\"), 16진수 이스케이프 시퀀스(예: 대문자 A에 "\x0041"), 유니코드 이스케이프 시퀀스(예: 대문자 A에 "\u0041")는 문자 그대로 해석됩니다.Simple escape sequences (such as "\\" for a backslash), hexadecimal escape sequences (such as "\x0041" for an uppercase A), and Unicode escape sequences (such as "\u0041" for an uppercase A) are interpreted literally. 인용 부호 이스케이프 시퀀스("")만 문자 그대로 해석되지 않고, 단일 작은따옴표를 생성합니다.Only a quote escape sequence ("") is not interpreted literally; it produces a single quotation mark. 또한 축자 보간된 문자열 중괄호 이스케이프 시퀀스({{}})는 그대로 해석되지 않습니다. 단일 중괄호 문자를 생성합니다.Additionally, in case of a verbatim interpolated string brace escape sequences ({{ and }}) are not interpreted literally; they produce single brace characters. 다음 예제에서는 각각 일반 문자열 리터럴 및 축자 문자열 리터럴을 사용하여 두 개의 동일한 파일 경로를 정의합니다.The following example defines two identical file paths, one by using a regular string literal and the other by using a verbatim string literal. 이것은 축자 문자열 리터럴의 일반적인 사용법 중 하나입니다.This is one of the more common uses of verbatim string literals.

    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
    

    다음 예제에서는 동일한 문자 시퀀스를 포함한 일반 문자열 리터럴 및 축자 문자열 리터럴의 효과를 보여 줍니다.The following example illustrates the effect of defining a regular string literal and a verbatim string literal that contain identical character sequences.

    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"      
    
  3. 이름이 서로 충돌하는 경우 특성 간에 구분하기 위해 컴파일러를 사용합니다.To enable the compiler to distinguish between attributes in cases of a naming conflict. 특성은 Attribute에서 파생되는 클래스입니다.An attribute is a class that derives from Attribute. 컴파일러는 이 규칙을 적용하지 않지만, 형식 이름에는 일반적으로 Attribute 접미사가 포함됩니다.Its type name typically includes the suffix Attribute, although the compiler does not enforce this convention. 전체 이름(예: [InfoAttribute]) 또는 약식 이름(예: [Info])으로 코드에서 특성을 참조할 수 있습니다.The attribute can then be referenced in code either by its full type name (for example, [InfoAttribute] or its shortened name (for example, [Info]). 그러나 두 개의 약식 특성 유형 이름이 동일하고 한 유형 이름에만 Attribute 접미사가 포함된 경우 이름 충돌이 발생합니다.However, a naming conflict occurs if two shortened attribute type names are identical, and one type name includes the Attribute suffix but the other does not. 다음 예에서는 컴파일러가 InfoInfoAttribute 특성 중 무엇을 Example 클래스에 적용할지 결정할 수 없으므로 코드가 컴파일되지 않습니다.For example, the following code fails to compile because the compiler cannot determine whether the Info or InfoAttribute attribute is applied to the Example class. 자세한 내용은 CS1614를 참조하세요.See CS1614 for more information.

    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'. Specify the full name 'InfoAttribute' to select it.
    public class Example
    {
       [InfoAttribute("The entry point.")]
       public static void Main()
       {
       }
    }
    

참조See also