مشاركة عبر


كتابة التعليمات البرمجية المتوافقة مع CLS

التوافق مع مواصفات اللغة العامة (CLS) يشير عامة إلى إدعاء أن قواعد و قيود CLS تُتبع. ومع ذلك ، المفهوم له معنى أكثر تحديداً اعتماداً على ما إذا كنت تصف تعليمات برمجية متوافقة مع CLS أو أدوات تطوير متوافقة مع CLS , كالمحول البرمجي. الأدوات المتوافقة مع CLS يمكنها أن تساعدك على كتابة تعليمات برمجية متوافقة مع CLS.

تعليمات برمجية متوافقة مع CLS

إذا كنت ترغب في أن تكون التعليمات البرمجية الخاصة بك متوافقة مع CLS , يجب أن تعرض الوظيفة بطريقة متوافقة مع CLS في الأماكن التالية:

  • تعريفات الفئات العامة الخاصة بك.

  • تعريفات الأعضاء العامة من الفئات العامة , و الأعضاء التي يمكن الوصول إليها من الفئات المشتقة (وصولالعائلة).

  • المعلمات و أنواع الإرجاع للأساليب العامة من الفئات العامة و للأساليب التي يمكنها الوصول إلى الفئات المشتقة.

لا يلزم اتباع قواعد CLS في الميزات التي تستخدمها في تعريفات الفئات الخاصة ،و في تعريفات الأساليب الخاصة في الفئات العامة , و في المتغيرات المحلية . يمكنك أيضاً استخدام ميزات أي لغة تريدها في التعليمات البرمجية التي تقوم بتنفيذ الفئة الخاصة بك و لا يزال لديها مكون متوافق مع CLS.

ملاحظةملاحظة

الصفائف المسننة — أي، صفائف من الصفائف — متوافقة مع CLS.في .NET Framework الإصدار 1.0 ، يُبَلِغ المحول البرمجي لـ C# أنها ليست كذلك خطأً.

يمكنك وضع علامة على التجميعات , و الوحدات و الأنواع و الأعضاء كمتوافق مع CLS أو أوغير متوافق مع CLS باستخدام CLSCompliantAttribute. كل التجميعات المراد أن تكون متوافقة مع CLS يجب توضع عليها علامة بهذا. التجميع الذي لم يتم وضع علامة عليه كمتوافق مع CLS يعتبر غير متوافق مع CLS. إذا لم تطبق سمة CLS على نوع , هذا النوع يُفتَرض أن يكون لديه نفس التوافق مع CLS للتجميع حيث تم تعريف النوع. وبشكل مماثل، إذا لم تٌطبق سمة CLS على عضو , هذا العضو يُعتبر أن يكون لدي نفس التوافق مع CLS للنوع الذي يُعَرِفه. لا يمكنك وضع علامة متوافق مع CLS على عنصر من برنامج ما إذا كان يحتوي بداخله على عنصر لم يتم وضع علامة متوافق مع CLS عليه . يوضح المثال في نهاية هذا الموضوع استخدام CLSCompliantAttribute.

يمكن أن تكون التجميعات , و الوحدات , و الأنواع متوافقة مع CLS حتى لو كانت بعض أجزاء التجميع أو الوحدة أو النوع ليست متوافقة مع CLS - طالما تحقق شرطان:

  • إذا تم وضع علامة على العنصر على أنه متوافق مع CLS , الأجزاء الغير متوافقة مع CLS يجب أن يتم وضع علامة عليها باستخدام CLSCompliantAttribute و تعيين الوسيطة الخاصة بها إلى false .

  • يجب أن يتم توفير عضو بديل قابل للمقارنة متوافق مع CLS لكل عضو غير متوافق مع CLS.

إذا صممت مكتبة فئات متوافقة مع CLS , المكتبة الخاصة بك سيكون لديها ضمان أن تعمل تفاعلياً مع نطاق عريض من لغات البرمجة; لذلك، المكتبة الخاصة بك سيكون لها قاعدة عملاء أعرض من الإصدار الغير متوافق مع CLS.

يوفر .NET Framework مكتبة فئات متوافقة مع CLS. للحصول على مزيد من المعلومات حول مكتبة الفئات هذه ، راجع مكتبة فئة NET Framework..

أدوات متوافقة مع CLS

اللغات التي تستهدف وقت التشغيل قد وافقت على دعم ميزات CLS واتباع قواعد CLS الموجهه إلى المحولات البرمجية. هذه المحولات البرمجية للغات تبسط التوافق مع CLS بعمل أنواع CLS للبيانات و الميزات المتوفرة لإنشاء المكونات. يتم وصف مستويات التوافق مع CLS بين المحولات البرمجية و الأدوات الأخرى كما يلي:

  • أدوات العميل المتوافق مع CLS.

    أدوات العملاء هي لغات تُمكّن المطورين من الوصول إلى كافة الميزات التي توفرها المكتبات المتوافقة مع CLS. قد لا يتمكن المطورون باستخدام هذه اللغات من توسيع المكتبات المتوافقة مع CLS عن طريق إنشاء أنواع جديدة , ولكن يمكنهم استخدام أي نوع مُعرّف من قِبل مكتبة متوافقة مع CLS. هذا المستوى من التوافق يمكن أن يكون مفيداً عندما تريد الوصول إلى مكتبة فئات .NET Framework , و لكن لا تحتاج لكتابة كائنات جديدة ليستهلكها الآخرون , مثلاً عندما تستخدم نماذج ويب على صفحة ASP.NET أو تنشئ واجهة مستخدم نماذج Windows.

  • الأدوات الموسعة للتوافق مع CLS.

    الأدوات الموسِعة هي لغات تسمح للمطورين بكلا من استخدام و توسعه الأنواع المُعرفة في المكتبات المتوافقة مع CLS. يمكن للمطورين استخدام الانواع الموجودة كما يُمكِنهم أيضاً تعريف أنواع جديدة. يجب أن تتبع الأدوات الموسعة كافة القواعد التي يجب أن تتبعها أدوات المستهلك , بالإضافة إلى بعض القواعد الإضافية , الموصُوفة في مواصفات البنية الأساسية للغة العامة, الجزء I - الهندسة , المتوفرة في موقع ويب شبكة مطوري Microsoft (MSDN).

عندما تصمم المكونات الخاصة بك المتوافقة مع CLS ، سيكون من المفيد استخدام أداة متوافقة مع CLS. كتابة مكونات متوافقة مع CLS بدون هذا الدعم أكثر صعوبة لأن بدونها قد لا يكون لديك حق الوصول إلى كافة ميزات CLS التي تريد استخدامها.

بعض المحولات البرمجية للغات المتوافقة مع CLS , مثل المحولات البرمجية لـ C# أو Visual Basic , تمكنك من تحديد أنك تنوي أن تكون التعليمات البرمجية الخاصة بك متوافق مع CLS. هذه المحولات البرمجية يمكنها التحقق من التوافق مع CLS و تخبرك عندما تستخدم التعليمات البرمجية الخاصة بك وظيفة غير مدعومة من قِبل CLS. تمكنك المحولات البرمجية لـ C# و Visual Basic من وضع علامة على عنصر من برنامج كمتوافق مع CLS ، مما سيحدو المحول البرمجي لتوليد خطأ في وقت التحويل البرمجي إذا لم تكن التعليمات البرمجية متوافقة مع CLS. على سبيل المثال، التعليمات البرمجية التالية تولد تحذير المحول البرمجي.

<Assembly: CLSCompliant(True)>

<CLSCompliant(True)> Public Class MyCompliantClass
   Public Sub ChangeValue(value As UInt32)
   End Sub

   Public Shared Sub Main()
      Dim i As Integer = 2
      Console.WriteLine(i)
   End Sub   
End Class
using System;

// Assembly marked as compliant.
[assembly: CLSCompliant(true)]

// Class marked as compliant.
[CLSCompliant(true)]
public class MyCompliantClass {
   // ChangeValue exposes UInt32, which is not in CLS.
   // A compile-time warning results.
   public void ChangeValue(UInt32 value){ }

   public static void Main( ) {
   int i = 2;
   Console.WriteLine(i);
   }
}

تولد هذه التعليمات البرمجية تحذير C# التالي:

warning CS3001: Argument type 'uint' is not CLS-compliant

أو تحذير Visual Basic التالي:

warning BC40028: Type of parameter 'value' is not CLS-compliant.

لإزالة التحذير ، يمكنك الإشارة إلى هذا ChangeValue غير متوافق مع CLS ، كما هو موضح في المثال التالي.

' Assembly marked as compliant.
<Assembly: CLSCompliant(True)>

' Class marked as compliant.
<CLSCompliant(True)> Public Class MyCompliantClass
   ' Method marked as not compliant.
   <CLSCompliant(False)> Public Sub ChangeValue(value As UInt32)
   End Sub

   Public Shared Sub Main()
      Dim i As Integer = 2
      Console.WriteLine(i)
   End Sub   
End Class
using System;

// Assembly marked as compliant.
[assembly: CLSCompliantAttribute(true)]

// Class marked as compliant.
[CLSCompliantAttribute(true)]
public class MyCompliantClass {
   // Method marked as not compliant.
   [CLSCompliantAttribute(false)]
   public void ChangeValue(UInt32 value){ }

   public static void Main( ) {
   int i = 2;
   Console.WriteLine(i);
   }
}

هذه التعليمات البرمجية لا تولد أي تحذير محول برمجي. المخرج هو 2.

للحصول على مزيد من المعلومات حول كيفية تحديد توافق التعليمات البرمجية الخاصة بك مع CLS , راجع وثائق محول اللغة البرمجي الذي تستخدمه.

راجع أيضًا:

المبادئ

إمكانية التشغيل المتداخل لللغات المتعددة