XML belgeleri dosya işleme
Derleyici, belge oluşturmak için etiketlenmiş kodunuzdaki her yapı için bir kimlik dizesi oluşturur. Daha fazla bilgi için bkz . Önerilen etiketler belge açıklamaları. Kimlik dizesi, yapısını benzersiz olarak tanımlar. XML dosyasını işleyen programlar, belgelerin geçerli olduğu ilgili .NET Framework meta verilerini veya yansıma öğesini tanımlamak için kimlik dizesini kullanabilir.
XML dosyası kodunuzun hiyerarşik bir gösterimi değildir, her öğe için oluşturulan bir kimliğe sahip düz bir listedir.
Derleyici, kimlik dizelerini oluştururken aşağıdaki kuralları gözlemler:
Dizeye boşluk yerleştirilmemiş.
Kimlik dizesinin ilk bölümü, tek bir karakter ve ardından iki nokta üst üste ile tanımlanan üye türünü tanımlar. Aşağıdaki üye türleri kullanılır:
Karakter Açıklama N Ad Alanı
Bir ad alanına belge açıklamaları ekleyemezsiniz, bir ad alanına cref başvuruları mümkündür.T Tür: sınıf, arabirim, yapı, numaralandırma, temsilci D Tür tanımı F Alan P Özellik (dizin oluşturucular veya diğer dizinlenmiş özellikler dahil) M Yöntem (oluşturucular, işleçler vb. gibi özel yöntemler dahil) E Etkinlik ! Hata dizesi
Dizenin geri kalanı hata hakkında bilgi sağlar. MSVC derleyicisi, çözümlenebilen bağlantılar için hata bilgileri oluşturur.Dizenin ikinci bölümü, ad alanının kökünden başlayarak öğenin tam adıdır. Öğenin adı, kapsayan türü veya türleri ve ad alanı noktalarla ayrılır. Öğenin adının dönemleri varsa, bunlar karma işareti ('#') ile değiştirilir. Hiçbir öğenin adında doğrudan bir karma işareti olmadığı varsayılır. Örneğin, oluşturucunun tam adı
String
olacaktırSystem.String.#ctor
.Özellikler ve yöntemler için, yöntemin bağımsız değişkenleri varsa, parantez içine alınmış bağımsız değişken listesi aşağıdadır. Bağımsız değişken yoksa, parantez yoktur. Bağımsız değişkenler virgülle ayrılır. Her bağımsız değişken bir .NET Framework imzasında kodlanmış olduğu gibi kodlanır:
Temel türler. Normal türler (
ELEMENT_TYPE_CLASS
veyaELEMENT_TYPE_VALUETYPE
) türün tam adı olarak temsil edilir.İç türler (örneğin,
ELEMENT_TYPE_I4
,ELEMENT_TYPE_OBJECT
,ELEMENT_TYPE_STRING
,ELEMENT_TYPE_TYPEDBYREF
veELEMENT_TYPE_VOID
) ilgili tam türün tam adı (örneğin,System.Int32
veyaSystem.TypedReference
) olarak temsil edilir.ELEMENT_TYPE_PTR
, değiştirilen türden sonra '*
' olarak temsil edilir.ELEMENT_TYPE_BYREF
, değiştirilen türden sonra '@
' olarak temsil edilir.ELEMENT_TYPE_PINNED
, değiştirilen türden sonra '^
' olarak temsil edilir. MSVC derleyicisi hiçbir zaman bu öğeyi oluşturmaz.ELEMENT_TYPE_CMOD_REQ
, değiştirilen türün ardından değiştirici sınıfının '|
' ve tam adı olarak temsil edilir. MSVC derleyicisi hiçbir zaman bu öğeyi oluşturmaz.ELEMENT_TYPE_CMOD_OPT
, değiştirilen türün ardından değiştirici sınıfının '!
' ve tam adı olarak temsil edilir.ELEMENT_TYPE_SZARRAY
, dizinin öğe türünden sonra "[]
" olarak temsil edilir.ELEMENT_TYPE_GENERICARRAY
, dizinin öğe türünden sonra "[?]
" olarak temsil edilir. MSVC derleyicisi hiçbir zaman bu öğeyi oluşturmaz.ELEMENT_TYPE_ARRAY
, virgül sayısının derece - 1 olduğu ve:
]
her boyutun alt sınır ve boyutunun (biliniyorsa) ondalık olarak temsil edildiği alt sınır boyutu,
olarak[
:
temsil edilir. Daha düşük bir sınır veya boyut belirtilmezse atlanır. Belirli bir boyut için alt sınır ve boyut atlanırsa, ':
' de atlanır. Örneğin, alt sınır ve belirtilmemiş boyutlar olarak 1 olan 2 boyutlu bir dizi olarak[1:,1:]
temsil edilir.ELEMENT_TYPE_FNPTR
"=FUNC:type
(signature)" olarak temsil edilir; buradatype
dönüş türüdür ve imza yöntemin bağımsız değişkenleridir. Bağımsız değişken yoksa parantezler atlanır. MSVC derleyicisi hiçbir zaman bu öğeyi oluşturmaz.
Aşağıdaki imza bileşenleri hiçbir zaman aşırı yüklenmiş yöntemleri farklı hale getirme amacıyla kullanılmadığından temsil değildir:
Çağırma kuralı
Dönüş türü
ELEMENT_TYPE_SENTINEL
Yalnızca dönüştürme işleçleri için, yönteminin dönüş değeri daha önce kodlanmış olduğu gibi '
~
' olarak ve ardından dönüş türü olarak kodlanır.Genel türler için, türün adını bir geri işareti ve ardından genel tür parametrelerinin sayısını gösteren bir sayı izler. Örneğin,
<member name="T:MyClass`2">
Örnekte olarak
public class MyClass<T, U>
tanımlanan bir tür gösterilir.Genel türleri parametre olarak alan yöntemler için, genel tür parametreleri, arka değerlerle önceden oluşturulmuş sayılar olarak belirtilir (örneğin, '0, '1). Her sayı, türün genel parametreleri için sıfır tabanlı bir dizi konumunu temsil eder.
Örnek
Aşağıdaki örneklerde bir sınıf ve üyeleri için kimlik dizelerinin nasıl oluşturulacağı gösterilmektedir.
// xml_id_strings.cpp
// compile with: /clr /doc /LD
///
namespace N {
// "N:N"
/// <see cref="System" />
// <see cref="N:System"/>
ref class X {
// "T:N.X"
protected:
///
!X(){}
// "M:N.X.Finalize", destructor's representation in metadata
public:
///
X() {}
// "M:N.X.#ctor"
///
static X() {}
// "M:N.X.#cctor"
///
X(int i) {}
// "M:N.X.#ctor(System.Int32)"
///
~X() {}
// "M:N.X.Dispose", Dispose function representation in metadata
///
System::String^ q;
// "F:N.X.q"
///
double PI;
// "F:N.X.PI"
///
int f() { return 1; }
// "M:N.X.f"
///
int bb(System::String ^ s, int % y, void * z) { return 1; }
// "M:N.X.bb(System.String,System.Int32@,System.Void*)"
///
int gg(array<short> ^ array1, array< int, 2 >^ IntArray) { return 0; }
// "M:N.X.gg(System.Int16[], System.Int32[0:,0:])"
///
static X^ operator+(X^ x, X^ xx) { return x; }
// "M:N.X.op_Addition(N.X,N.X)"
///
property int prop;
// "M:N.X.prop"
///
property int prop2 {
// "P:N.X.prop2"
///
int get() { return 0; }
// M:N.X.get_prop2
///
void set(int i) {}
// M:N.X.set_prop2(System.Int32)
}
///
delegate void D(int i);
// "T:N.X.D"
///
event D ^ d;
// "E:N.X.d"
///
ref class Nested {};
// "T:N.X.Nested"
///
static explicit operator System::Int32 (X x) { return 1; }
// "M:N.X.op_Explicit(N.X!System.Runtime.CompilerServices.IsByValue)~System.Int32"
};
}