Udostępnij za pośrednictwem


Przetwarzanie pliku XML (C# Programming Guide)

Kompilator generuje ciąg Identyfikatora dla każdego konstrukcji w kodzie, który jest oznakowany do generowania dokumentacji.(Aby uzyskać informacje na temat tagu kodu, zobacz Zalecane znaczniki komentarzy dokumentacji.) Ciąg Identyfikatora jednoznacznie identyfikuje konstrukcji.Programy, które przetwarzają pliku XML można użyć do określenia odpowiednich ciąg Identyfikatora.Element metadanych/odbicia NET Framework dotyczy dokumentacji.

Plik XML nie jest Hierarchiczna reprezentacja kodu; jest płaska lista, który został wygenerowany identyfikator dla każdego elementu.

Generując ciągi identyfikatorów, kompilator przestrzega następujących zasad:

  • Spacja nie jest w ciągu.

  • Pierwsza część ciąg Identyfikatora identyfikuje rodzaj Członkowskie identyfikowane z pojedynczego znaku, po której następuje dwukropek.Używane są następujące typy Członkowskie:

    Znak

    Opis

    N

    obszar nazw

    Dokumentację komentarzy nie można dodać do obszaru nazw, ale można wprowadzać cref odwołania do nich, w przypadku gdy jest to obsługiwane.

    T

    Typ: klasa interfejsu struct, enum, pełnomocnik

    F

    pole

    P

    Właściwość (w tym indeksatory lub innych właściwości indeksowanych)

    M

    Metoda (łącznie z takich specjalnych metod jako konstruktorzy, operatorów i tak dalej)

    E

    zdarzenia

    !

    ciąg błędu

    Pozostałe ciąg zawiera informacje o błędzie.Kompilator C# generuje informacje o błędach dla łącza, których nie można rozpoznać.

  • Druga część ciągu jest w pełni kwalifikowanej nazwy elementu, zaczynając od katalogu głównego obszaru nazw.Nazwa elementu, jego otaczający typ(-y) i obszaru nazw są oddzielonych kropkami.Jeśli nazwa sam element ma okresów, są zastąpione przez znak hash (#).Zakłada się, że żaden element nie ma znaku hash bezpośrednio w jego nazwę.Na przykład Pełna nazwa konstruktora ciąg byłoby "System.String.#ctor".

  • Dla właściwości i metody Jeśli argumenty tej metody, lista argumentów w nawiasach następuje.Jeśli nie istnieją żadne argumenty, nawiasy nie są obecne.Argumenty są oddzielone przecinkami.Kodowanie każdego argumentu następuje bezpośrednio jak jest zakodowana w.NET Framework podpisu:

    • Typów podstawowych.Regularne typów (po elemencie ELEMENT_TYPE_CLASS lub ELEMENT_TYPE_VALUETYPE) są reprezentowane jako w pełni kwalifikowana nazwa typu.

    • Typów wewnętrznych (na przykład, ELEMENT_TYPE_I4, ELEMENT_TYPE_OBJECT, ELEMENT_TYPE_STRING, ELEMENT_TYPE_TYPEDBYREF.i ELEMENT_TYPE_VOID) są reprezentowane w pełni kwalifikowaną nazwę odpowiedniego typu pełne.Na przykład System.Int32 lub System.TypedReference.

    • Elementów ELEMENT_TYPE_PTR jest reprezentowane jako ' *' następującego zmodyfikowanego typu.

    • ELEMENT_TYPE_BYREF jest reprezentowane jako '@' następującego zmodyfikowanego typu.

    • ELEMENT_TYPE_PINNED jest reprezentowane jako "^" następującego zmodyfikowanego typu.Kompilator C# nigdy nie generuje to.

    • ELEMENT_TYPE_CMOD_REQ jest reprezentowane jako ' |' i w pełni kwalifikowanej nazwy klasy modyfikator następującego zmodyfikowanego typu.Kompilator C# nigdy nie generuje to.

    • ELEMENT_TYPE_CMOD_OPT jest reprezentowane jako "!" i w pełni kwalifikowanej nazwy klasy modyfikator następującego zmodyfikowanego typu.

    • ELEMENT_TYPE_SZARRAY jest reprezentowane jako "[]" następującego typu elementu tablicy.

    • ELEMENT_TYPE_GENERICARRAY jest reprezentowane jako "?" następującego typu elementu tablicy.Kompilator C# nigdy nie generuje to.

    • ELEMENT_TYPE_ARRAY jest reprezentowane jako związanie:size,związanie:size gdzie liczba przecinkami jest ranga - 1, a dolną i rozmiar każdego wymiaru, jeśli są znane, są reprezentowane w zapisie dziesiętnym.Jeśli dolna granica lub rozmiar nie jest określony, po prostu pominięto.Jeśli pominięto dolną granicą i rozmiar dla określonego wymiaru ":" zostanie pominięty, jak również.Na przykład 2-wymiarowe tablicy z 1 jako dolną i rozmiary nieokreślony jest [1:, 1:].

    • ELEMENT_TYPE_FNPTR jest reprezentowane jako "= PF:type(podpisu)", gdzie type jest zwracany typ i podpisu jest argumenty metody.Jeśli nie istnieją żadne argumenty, nawiasy są pominięte.Kompilator C# nigdy nie generuje to.

    Następujące składniki podpisu nie są reprezentowane, ponieważ nigdy nie są one używane do różnego przeciążonej metody:

    • Konwencja wywołania

    • zwracany typ

    • ELEMENT ELEMENT_TYPE_SENTINEL

  • Dla konwersji operatorów tylko (op_Implicit i op_Explicit), wartość zwracana przez metodę są kodowane jako "~" następuje zwracany typ jako kodowane powyżej.

  • Do typów ogólnych nazwa typu będą następować podziałki Wstecz, a następnie numer, który wskazuje liczbę parametrów typu rodzajowego.Na przykład,

    <member name="T:SampleClass`2">jest tagiem dla typu, który jest zdefiniowany jako public class SampleClass<T, U>.

    Dla metod podejmowania typy rodzajowe jako parametry parametr typu rodzajowego są określone jako liczby wraz z tylnym znaczniki (na przykład "0, 1).Każdy numer reprezentujących notacji tablicę indeksowaną od zera dla typu parametry rodzajowe.

Przykłady

Poniższe przykłady pokazują, jak identyfikator ciągi dla klasy i jej członków, powinien zostać wygenerowany:

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; }

    }
}

Zobacz też

Informacje

/doc (C# kompilator opcje)

Komentarzy dokumentacji XML (Podręcznik programowania C#)

Koncepcje

Podręcznik programowania C#