البيانات الوصفية (واجهة سطر الأوامر)
في بنية اللغة المشتركة (CLI)، تشير البيانات الوصفية إلى هياكل بيانات محددة مضمنة في كود لغة الوسيط المشتركة (CIL) والتي تصف البنية العامة للكود. تصف البيانات الوصفية جميع الفئات وأعضاء الفئات المُعرَّفة في التجميع، بالإضافة إلى الفئات وأعضاء الفئات التي سيستدعيها التجميع الحالي من تجميع آخر. تحتوي البيانات الوصفية للدالة على وصف كامل لها، بما في ذلك الفئة (والتجميع الذي يحتويها)، ونوع القيمة المُعادة ، وجميع معلمات الدالة .
يقوم مُصرّف لغة سطر الأوامر (CLI) بإنشاء البيانات الوصفية وتخزينها في التجميعة التي تحتوي على لغة CIL . عند تنفيذ لغة CIL في وقت التشغيل، يتحقق النظام من تطابق البيانات الوصفية للدالة المُستدعاة مع البيانات الوصفية المخزنة في الدالة المُستدعِية. يضمن هذا إمكانية استدعاء الدالة فقط بالعدد الصحيح من المعاملات وأنواعها الصحيحة.
تستخدم منصة تطبيقات وقت تشغيل ويندوز، الموجودة في ويندوز 8 وويندوز فون 8، تنسيق بيانات تعريف واجهة سطر الأوامر (CLI) لوصف واجهات المكونات للتعليمات البرمجية المكتوبة بأي من لغات البرمجة المدعومة . ويكمن الاختلاف في استخدامها ضمن وقت تشغيل اللغة المشتركة (CIL) في أن التجميعة لا تحتوي عادةً على أي تعليمات CIL. [ 1 ]
صفات
يستطيع المطورون إضافة بيانات وصفية إلى شيفراتهم البرمجية عبر السمات . يوجد نوعان من السمات: السمات المخصصة والسمات شبه المخصصة، وكلاهما متشابه في الصيغة بالنسبة للمطور . تُعدّ السمات في الشيفرة البرمجية بمثابة رسائل إلى المُصرّف لتوليد البيانات الوصفية. في لغة CIL، تُعرف البيانات الوصفية، مثل مُعدِّلات الوراثة ومُعدِّلات النطاق، وأي شيء آخر غير رموز العمليات أو التدفقات، بالسمات أيضًا.
السمة المخصصة هي فئة عادية ترث من الفئة الأصليةSystem.Attribute . يمكن استخدام السمة المخصصة على أي دالة أو خاصية أو فئة أو تجميعة كاملة باستخدام الصيغة التالية: كما في المثال التالي:[AttributeName(optional parameter, optional name=value pairs)]
[مخصص] [مخصص(1)] [مخصص(1، تعليق="نعم")]تُستخدم السمات المخصصة على نطاق واسع في واجهة سطر الأوامر (CLI). يستخدم إطار عمل اتصالات ويندوز (Windows Communication Framework) السمات لتعريف عقود الخدمات، ويستخدمها ASP.NET لعرض الطرق كخدمات ويب ، ويستخدمها LINQ to SQL لتعريف ربط الفئات بالمخطط العلائقي الأساسي ، ويستخدمها Visual Studio لتجميع خصائص الكائن، ويحدد مطور الفئة تصنيف فئة الكائن بتطبيق [Category]السمة المخصصة. تُفسَّر السمات المخصصة بواسطة كود التطبيق وليس بواسطة بيئة وقت التشغيل المشتركة (CLR). عندما يرى المُصرِّف سمة مخصصة، فإنه يُنشئ بيانات وصفية مخصصة لا تتعرف عليها بيئة وقت التشغيل المشتركة. يجب على المطور توفير كود لقراءة البيانات الوصفية والتعامل معها. على سبيل المثال، يمكن التعامل مع السمة الموضحة في المثال بواسطة الكود التالي:
باستخدام النظام ؛class CustomAttribute : Attribute { private int paramNumber = 0 ; private string comment = "" ;public CustomAttribute ( int num = 0 ) { paramNumber = num ; }public String Comment { set { comment = value ; } } }يُربط اسم الفئة باسم الخاصية. يُضيف مُصرّف Visual C# تلقائيًا السلسلة " Attribute" في نهاية أي اسم خاصية. بالتالي، يجب أن ينتهي كل اسم فئة خاصية بهذه السلسلة، ولكن من المسموح تعريف خاصية بدون اللاحقة "-" Attribute. عند إضافة خاصية إلى عنصر، سيبحث المُصرّف عن كل من الاسم الحرفي والاسم مع Attributeإضافة اللاحقة "-" في النهاية، أي إذا كتبتَ "-"، [Custom]فسيبحث المُصرّف عن كل من "-" Customو"- CustomAttribute". إذا وُجد كلاهما، فسيفشل المُصرّف. يُمكن إضافة البادئة " @" إلى اسم الخاصية إذا كنتَ لا تُريد المخاطرة بالغموض، لذا فإن كتابة "-" [@Custom]لن تُطابق "-" CustomAttribute. استخدام الخاصية يستدعي مُنشئ الفئة. المُنشئات المُحمّلة مُدعمة. تُربط أزواج الاسم والقيمة بالخصائص، حيث يُشير الاسم إلى اسم الخاصية، والقيمة المُقدّمة تُحددها الخاصية.
أحيانًا يكون هناك غموض فيما يتعلق بما تقوم بإلحاقه بالخاصية. انظر إلى الكود التالي:
[برتقالي] public int ExampleMethod ( string input ) { // يوضع جسم الدالة هنا }ما الذي تم تمييزه باللون البرتقالي؟ هل هو العنصر ExampleMethod، أم قيمته المُعادة، أم ربما التجميع بأكمله؟ في هذه الحالة، سيتعامل المُصرّف افتراضيًا مع السمة على أنها مُلحقة بالدالة. إذا لم يكن هذا هو المقصود، أو إذا رغب المُبرمج في توضيح الكود ، فيمكنه تحديد هدف للسمة . كتابة ` _ ...[return: Orange][assembly: Orange]assemblyfieldeventmethodmoduleparampropertyreturntype
تُستخدم السمة شبه المخصصة تمامًا مثل السمات المخصصة العادية، ولكنها لا تحتوي على معالج مخصص؛ بل يمتلك المترجم وعيًا ضمنيًا بالسمات ويتعامل مع الكود المُعلَّم بهذه السمات بشكل مختلف. تُنفَّذ سمات مثل `<Select>` Serializableو` Obsolete<Select>` كسمات شبه مخصصة. لا ينبغي أبدًا استخدام السمات شبه المخصصة بواسطة ILAsm ، حيث يمتلك بنية كافية لوصف البيانات الوصفية.
تخزين البيانات الوصفية
تحتوي التجميعات على جداول بيانات وصفية. تُوصف هذه الجداول وفقًا لمواصفات CIL. [ 2 ] تحتوي جداول البيانات الوصفية على صفر أو أكثر من المدخلات، ويُحدد موضع كل مدخل فهرسه. عند استخدام كود CIL للبيانات الوصفية، يتم ذلك من خلال رمز البيانات الوصفية. هذا الرمز عبارة عن قيمة 32 بت ، حيث تُحدد البتات الثمانية الأولى جدول البيانات الوصفية المناسب، بينما تُحدد البتات الـ 24 المتبقية فهرس البيانات الوصفية في الجدول. يحتوي إطار عمل .NET SDK على مثال يُسمى ILDASM metainfo، والذي يسرد جداول البيانات الوصفية في التجميعة، إلا أن هذه المعلومات نادرًا ما تكون مفيدة للمطور. يمكن عرض البيانات الوصفية في التجميعة باستخدام أداة ILDASM المُقدمة من إطار عمل .NET SDK.
في معيار CIL، تُعرَّف البيانات الوصفية بصيغة ILAsm (لغة التجميع)، وصيغة تمثيل على القرص للتخزين، وصيغة مُضمَّنة في تجميعات ملفات تنفيذية محمولة (PE، .exe أو .dll). وتعتمد صيغة PE على الصيغة الموجودة على القرص.
انعكاس
تُستخدم واجهة برمجة التطبيقات Reflection لقراءة بيانات تعريف واجهة سطر الأوامر (CLI). توفر واجهة برمجة التطبيقات Reflection عرضًا منطقيًا لبيانات التعريف بدلًا من العرض الحرفي الذي توفره أدوات مثل metainfo. في الإصدار 1.1 من إطار عمل .NET، يُمكن استخدام Reflection لفحص أوصاف الفئات وأعضائها، واستدعاء الدوال. مع ذلك، لا يسمح هذا الإصدار بالوصول إلى لغة CIL الخاصة بدالة ما أثناء التشغيل. أما الإصدار 2.0 من إطار العمل، فيتيح الحصول على لغة CIL الخاصة بدالة ما.
أدوات البيانات الوصفية الأخرى
إلى جانب System.Reflectionمساحة الاسم، تتوفر أدوات أخرى يمكن استخدامها لمعالجة البيانات الوصفية. يوفر إطار عمل Microsoft .NET مكتبة لمعالجة البيانات الوصفية CLR مُنفذة بلغة البرمجة الأصلية . كما يمكن استخدام أدوات خارجية لاسترداد البيانات الوصفية ومعالجتها، مثل PostSharp و Mono Cecil .
انظر أيضاً
مراجع
- ↑ "ملفات بيانات تعريف ويندوز (WinMD)" . تطبيقات ويندوز UWP . 30 ديسمبر 2021.
- ↑ جيوارين. "البيانات الوصفية والمكونات ذاتية الوصف - .NET" . learn.microsoft.com . تم الاطلاع عليه في 5 سبتمبر 2025 .
- البنية التحتية للغة المشتركة
