معالجة ملف XML (دليل برمجة C#)
ينشئ المحول البرمجي سلسلة المعرف لكل تركيبة في تعليماتك برمجية التي تم تحديدها بالعلامات لإنشاء الوثائق . ( للمعلومات عن كيفية تعليم التعليمات البرمجية الخاصة بك, شاهد علامات موصى بها لتوثيق التعليقات.) سلسلة المعرف تعرف بشكل فريد البناء. تستطيع البرامج التي تعالج ملفات XML استخدام سلسلة المعرف للتعرف على عنصر التعريف/الانعكاس.NET Framework المطابق الذي تنطبق عليه الوثائق.
ملف XML لا يمثل تمثيلاً هرمياً للتعليمات البرمجية الخاصة بك؛ و لكنه قائمة كاملة بالمعرف الذي تم إنشاؤه لكل عنصر من العناصر.
يلاحظ المحول البرمجي القواعد التالية عند يقوم بإنشاء سلاسل معرّف:
لا يسمح بالمسافات في السلسلة.
ويحدد الجزء الأول من سلسلة المعرف نوع الأعضاء التي تم تحديدهم، بحرف واحد متبوعاً بنقطتين. يستخدم أنواع الأعضاء التاليين في:
الحرف
الوصف
لا
مساحة الاسم
لا يمكنك إضافة تعليقات الوثائق إلى مساحة الاسم، ولكن يمكنك صنع مراجع cref التي تدعمها.
T
النوع الفئة، و الواجهة، والبنية، والتعداد، والمندوب
F
حقل
P
الخاصية (بما في ذلك المفهرسات أو خصائص مفهرسة أخرى)
M
الأسلوب (بما في ذلك الأساليب الخاصة كالدوال الإنشائية, عوامل التشغيل, و هكذا)
E
حدث
!
سلسلة الخطأ
باقي السلسلة يوفر معلومات حول الخطأ. وينشئ مترجم C# معلومات عن خطأ للارتباطات التي لا يمكن حلها.
الجزء الثاني من السلسلة هو اسم مؤهل بشكل كامل لهذا البند، بدءاً من جذر مساحة الاسم. اسم العنصر، و نوع (أنواع) الارفاق، ومساحة الاسم تكون مفصولة بنقاط. اسم العنصر، و نوع (أنواع) الارفاق، ومساحة الاسم تكون مفصولة بنقاط. ومن المفترض أن لا يوجد عنصر له علامة تجزئة مباشرة في اسمه. على سبيل المثال، سيكون الاسم المؤهل بشكل كامل من الدالة الإنشائية للسلسلة "System.String.#ctor".
للـخصائص و الأساليب, إذا كان هناك وسائط للأسلوب ، يتبع قائمة الوسائط بين أقواس. ان لم يوجد وسائط.,لا يتم عرض أقواس الوسيطات مفصولة بفواصل. ترميز كل وسيطة يتبع مباشرة بكيفية تشفيرها في التوقيع الرقمي لـ .NET Framework .
أساس الأنواع. الأنواع العادية (ELEMENT_TYPE_CLASS أو ELEMENT_TYPE_VALUETYPE) ممثلة كاسم مؤهل بشكل كامل من النوع.
أنواع مضمن (على سبيل المثال، ELEMENT_TYPE_I4 ، ELEMENT_TYPE_OBJECT ، ELEMENT_TYPE_STRING ، ELEMENT_TYPE_TYPEDBYREF. و ELEMENT_نوع_VOID) يتم تمثيلها كاسم مؤهل بشكل كامل من النوع الكامل المطابق. على سبيل المثال، النظام.Int32 أو النظام.TypedReference.
يتم تمثيل ELEMENT_TYPE_PTR كـ ' * ' تتبع نوع المعدلة.
يتم تمثيل ELEMENT_TYPE_PTR كـ ' * ' تتبع نوع المعدلة.
يتم تمثيل ELEMENT_TYPE_PTR كـ ' * ' تتبع نوع المعدلة. لا ينشئ مترجم C# هذا أبداً.
يتم تمثيل ELEMENT_TYPE_CMOD_REQ كـ ' | ' و الاسم المؤهل بشكل كامل لفئة المعدّل, و يتبع النوع المعدّل. لا ينشئ مترجم C# هذا أبداً.
يتم تمثيل ELEMENT_TYPE_CMOD_REQ كـ ' | ' و الاسم المؤهل بشكل كامل لفئة المعدّل, و يتبع النوع المعدّل.
يتم تمثيل ELEMENT_TYPE_SZARRAY ["]" يتبع نوع عنصر الصفيف.
يتم تمثيل ELEMENT_TYPE_SZARRAY ["]" يتبع نوع عنصر الصفيف. لا ينشئ مترجم C# هذا أبداً.
يتم تمثيل ELEMENT_TYPE_ARRAY الحد الأدنى:size,الحد الأدنى:size] حيث يكون عدد الفواصل هو الرتبة-1، والحدود الدنيا وحجم كل البعد، إذا كانت معروفة، تتمثل بالأرقام العشرية. إذا لم يتم تحديد الحد الأدنى أو الحجم, فإنه يتم حذفه ببساطة. في حالة حذف الحد الأدنى وحجم بعد معيّن, فإن ': ' يتم حذفها أيضاً. على سبيل المثال، ينحصر صفيف ثنائي الأبعاد مع 1 كالحدود السفلية و الأحجام الغير المحدد وهي [1:, 1:].
يتم تمثيل ELEMENT_TYPE_FNPTR "= FUNC: type(توقيع)", حيث type هو نوع الإرجاع و توقيع هي وسيطات الأسلوب. إذا لم يكن هناك وسائط فسوف يتم حذف الأقواس. لا ينشئ مترجم C# هذا أبداً.
ولا يتم تمثيل المكونات التالية للتوقيع لأنه لم يتم استخدامها لأساليب المفاضلة المحملة بشكل زائد:
مصطلاحات الاستدعاء
نوع الإرجاع
نوع_العناصر_الخافرة
تحويل فقط لعوامل التشغيل (op_Implicit و op_Explicit)، القيمة الإرجاع لأسلوب ترميز صيغة ' ~ ' متبوعاً بنوع الإرجاع كما تم الترميز أعلاه.
بالنسبة للأنواع العامة فإن اسم النوع سوف يكون متبوعاً بعلامة عودة ثم إلى رقم يشير إلى العدد من المعلمات من النوع العام. على سبيل المثال،
تحديد العمود من النوع SQLTEXT<member name="T:SampleClass`2"> أو SQLBIGCHAR أو public class SampleClass<T, U>SQLBIGVARCHAR.
أساليب أخذ الأنواع العامة مثل المعلمات ، فإن معلمات النوع العام تكون محددة كأرقام تسبقها علامات عودة (على سبيل المثال ` 0، ` 1). كل رقم يمثل منهج صفيف يستند بالنسبة لعنصر النوع المعلمات العام.
أمثلة
تظهر الأمثلة التالية كيف تنشئ السلاسل المعرفة لفئة وكيف يتم إنشاء أعضائها:
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#)