다음을 통해 공유


XML 파일 처리(C# 프로그래밍 가이드)

컴파일러는 태그가 있는 코드의 각 구문에 ID 문자열을 생성하여 문서를 만듭니다.코드에 태그를 추가하는 방법에 대해서는 문서 주석에 대한 권장 태그를 참조하십시오. ID 문자열은 해당 구문을 고유하게 식별합니다.XML 파일을 처리하는 프로그램에서는 이 ID 문자열을 사용하여 문서가 적용될 해당 .NET Framework의 메타데이터/리플렉션 항목을 식별할 수 있습니다.

XML 파일은 코드를 계층 구조로 표현하지 않고 각 요소에 대해 생성된 ID를 사용하는 단순한 목록입니다.

컴파일러는 아래와 같은 규칙에 따라 ID 문자열을 생성합니다.

  • 문자열에 공백 문자를 사용하지 않습니다.

  • ID 문자열의 첫 부분은 식별할 멤버의 종류를 나타내는 단일 문자이며 그 뒤에 콜론이 옵니다.아래와 같은 멤버 형식을 사용합니다.

    문자

    설명

    N

    네임스페이스

    네임스페이스에는 문서 주석을 추가할 수 없지만 지원되는 경우 문서 주석에 대한 cref 참조를 만들 수 있습니다.

    T

    형식(클래스, 인터페이스, 구조체, 열거형, 대리자)

    F

    필드(field)

    P

    속성(인덱서와 기타 인덱싱된 속성 포함)

    M

    메서드(생성자, 연산자 등의 특수한 메서드 포함)

    E

    이벤트

    !

    오류 문자열

    나머지 문자열은 오류 정보를 제공합니다.C# 컴파일러는 확인할 수 없는 링크에 대한 오류 정보를 생성합니다.

  • 문자열의 둘째 부분은 네임스페이스의 루트에서 시작하는 항목의 정규화된 이름입니다.항목의 이름, 해당 포함 형식 및 네임스페이스는 마침표로 구분합니다.항목 이름 자체에 마침표가 있는 경우 해당 마침표는 해시 기호('#')로 바뀝니다.항목 이름에 직접 해시 기호를 사용하지 않는 것으로 가정합니다.예를 들어, String 생성자의 정규화된 이름은 "System.String.#ctor"가 될 수 있습니다.

  • 속성 및 메서드의 경우, 메서드 인수가 있는 경우 인수 목록을 괄호로 묶어야 합니다.인수가 없으면 괄호는 필요 없습니다.인수는 쉼표로 구분합니다.각 인수의 인코딩은 아래와 같이 .NET Framework 시그니처에서 인수를 인코딩하는 방법을 그대로 따릅니다.

    • 기본 형식.정규 형식(ELEMENT_TYPE_CLASS 또는 ELEMENT_TYPE_VALUETYPE)은 형식의 정규화된 이름으로 표시됩니다.

    • 내장 형식 (예를 들어, ELEMENT_TYPE_I4, ELEMENT_TYPE_OBJECT, ELEMENT_TYPE_STRING, ELEMENT_TYPE_TYPEDBYREF.및 ELEMENT_TYPE_VOID)는 해당 형식의 정규화된 이름으로 표시됩니다.예를 들어, System.Int32 또는 System.TypedReference 등으로 표시됩니다.

    • ELEMENT_TYPE_PTR는 수정된 형식 다음에 '*'을 붙여 표시합니다.

    • ELEMENT_TYPE_BYREF는 수정된 형식 다음에 '@'을 붙여 표시합니다.

    • ELEMENT_TYPE_PINNED는 수정된 형식 다음에 '^'을 붙여 표시합니다.C# 컴파일러에서는 이 내용이 적용되지 않습니다.

    • ELEMENT_TYPE_CMOD_REQ는 수정된 형식 다음에 '|' 및 한정자 클래스의 정규화된 이름을 붙여 표시합니다.C# 컴파일러에서는 이 내용이 적용되지 않습니다.

    • ELEMENT_TYPE_CMOD_REQ는 수정된 형식 다음에 '|' 및 한정자 클래스의 정규화된 이름을 붙여 표시합니다.

    • ELEMENT_TYPE_SZARRAY는 배열 요소 형식 다음에 "[]"를 붙여 표시합니다.

    • ELEMENT_TYPE_GENERICARRAY는 배열 요소 형식 다음에 "[?]"를 붙여 표시합니다.C# 컴파일러에서는 이 내용이 적용되지 않습니다.

    • ELEMENT_TYPE_ARRAY는 [lowerbound:size,lowerbound:size]의 형식으로 표시합니다. 여기에서, 쉼표의 수는 차수에서 1을 뺀 값이며 알려진 각 차원의 lowerbound와 size는 숫자로 표시됩니다.lowerbound 또는 size를 지정하지 않으면 생략됩니다.특정 차원의 lowerbound와 size가 생략되면 ':' 또한 생략됩니다.예를 들어, lowerbound가 1이고 size가 지정되지 않은 2차원 배열은 [1:,1:]입니다.

    • ELEMENT_TYPE_FNPTR는 "=FUNC:type(signature)"로 나타냅니다. 여기서, type은 반환 형식이며 signature는 메서드 인수입니다.인수가 없으면 괄호는 생략합니다.C# 컴파일러에서는 이 내용이 적용되지 않습니다.

    아래와 같은 시그니처 구성 요소는 오버로드된 메서드를 구분하는 데 사용되지 않기 때문에 표시되지 않습니다.

    • 호출 규칙

    • 반환 형식

    • ELEMENT_TYPE_SENTINEL

  • 변환 연산자(op_Implicit 및 op_Explicit)의 경우에만 위에서 인코딩한 대로 반환 형식 앞에 '~'를 붙여 메서드 반환 값을 인코딩합니다.

  • 제네릭 형식의 경우 형식의 이름 뒤에는 역따옴표(`) 및 제네릭 형식 매개 변수의 수를 나타내는 번호가 추가됩니다.다음 예제를 참조하십시오.

    <member name="T:SampleClass`2">는 public class SampleClass<T, U>로 정의된 형식에 대한 태그입니다.

    제네릭 형식을 매개 변수로 사용하는 메서드의 경우 제네릭 형식 매개 변수는 역따옴표(`)가 앞에 추가된 번호로 지정됩니다(예: `0, `1).각 번호는 형식의 제네릭 매개 변수에 대한 배열(0부터 시작) 표시를 나타냅니다.

예제

아래 예제는 클래스와 해당 멤버의 ID 문자열이 생성되는 방식을 보여 줍니다.

namespace N
{
    /// <summary>
    /// Enter description here for class X. 
    /// ID string generated is "T:N.X". 
    /// </summary>
    public unsafe class X
    {
        /// <summary>
        /// Enter description here for the first constructor.
        /// ID string generated is "M:N.X.#ctor".
        /// </summary>
        public X() { }


        /// <summary>
        /// Enter description here for the second constructor.
        /// ID string generated is "M:N.X.#ctor(System.Int32)".
        /// </summary>
        /// <param name="i">Describe parameter.</param>
        public X(int i) { }


        /// <summary>
        /// Enter description here for field q.
        /// ID string generated is "F:N.X.q".
        /// </summary>
        public string q;


        /// <summary>
        /// Enter description for constant PI.
        /// ID string generated is "F:N.X.PI".
        /// </summary>
        public const double PI = 3.14;


        /// <summary>
        /// Enter description for method f.
        /// ID string generated is "M:N.X.f".
        /// </summary>
        /// <returns>Describe return value.</returns>
        public int f() { return 1; }


        /// <summary>
        /// Enter description for method bb.
        /// ID string generated is "M:N.X.bb(System.String,System.Int32@,System.Void*)".
        /// </summary>
        /// <param name="s">Describe parameter.</param>
        /// <param name="y">Describe parameter.</param>
        /// <param name="z">Describe parameter.</param>
        /// <returns>Describe return value.</returns>
        public int bb(string s, ref int y, void* z) { return 1; }


        /// <summary>
        /// Enter description for method gg.
        /// ID string generated is "M:N.X.gg(System.Int16[],System.Int32[0:,0:])". 
        /// </summary>
        /// <param name="array1">Describe parameter.</param>
        /// <param name="array">Describe parameter.</param>
        /// <returns>Describe return value.</returns>
        public int gg(short[] array1, int[,] array) { return 0; }


        /// <summary>
        /// Enter description for operator.
        /// ID string generated is "M:N.X.op_Addition(N.X,N.X)". 
        /// </summary>
        /// <param name="x">Describe parameter.</param>
        /// <param name="xx">Describe parameter.</param>
        /// <returns>Describe return value.</returns>
        public static X operator +(X x, X xx) { return x; }


        /// <summary>
        /// Enter description for property.
        /// ID string generated is "P:N.X.prop".
        /// </summary>
        public int prop { get { return 1; } set { } }


        /// <summary>
        /// Enter description for event.
        /// ID string generated is "E:N.X.d".
        /// </summary>
        public event D d;


        /// <summary>
        /// Enter description for property.
        /// ID string generated is "P:N.X.Item(System.String)".
        /// </summary>
        /// <param name="s">Describe parameter.</param>
        /// <returns></returns>
        public int this[string s] { get { return 1; } }


        /// <summary>
        /// Enter description for class Nested.
        /// ID string generated is "T:N.X.Nested".
        /// </summary>
        public class Nested { }


        /// <summary>
        /// Enter description for delegate.
        /// ID string generated is "T:N.X.D". 
        /// </summary>
        /// <param name="i">Describe parameter.</param>
        public delegate void D(int i);


        /// <summary>
        /// Enter description for operator.
        /// ID string generated is "M:N.X.op_Explicit(N.X)~System.Int32".
        /// </summary>
        /// <param name="x">Describe parameter.</param>
        /// <returns>Describe return value.</returns>
        public static explicit operator int(X x) { return 1; }

    }
}

참고 항목

참조

/doc(C# 컴파일러 옵션)

XML 문서 주석(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드