C #: المصفوفات القائمة على غير صفري لا تتوافق مع CLS

StackOverflow https://stackoverflow.com/questions/955732

  •  11-09-2019
  •  | 
  •  

سؤال

أنا أقرأ حاليا البهاريC # 3.0 باختصار وعلى PG. 241، في حين أن يتحدث عن فهرسة الصفيف، يقول هذا:

المصفوفات غير الضرورة غير صفوفة ليست CLS (مواصفات لغة مشتركة)

ماذا يعني بالضبط، للحصول على صفائف غير صفرية cls متوافقة. ب وما هي الآثار التي لديها على الكود الخاص بك؟

تحديث

هنا هو رابط إلى صفحة الكتاب.

هل كانت مفيدة؟

المحلول

تضع CLS (مواصفات اللغة العامة) الأساس لمجموعة مشتركة من قواعد الامتثال التي تضمن أن اللغات الأخرى (vb.net، f #، إلخ) يمكن أن تستخدم التجميعات التي قمت بنيتها مع C #. لا تتوافق مجموعة متنوعة من غير صفيف لأن لغات أخرى تتوقع أن تكون المصفوفات مقرها.

هنا مثال يسهل فهمه:

class Foo
{
    public void Bar() { }
    public void bar() { } 
}

هذا النوع سوف ليس كن متوافقا مع CLS لأنه يحتوي على عضوين يختلف في الاسم فقط حسب النوع. كيف يقوم شخص ما باستخدام VB.NET Disambigg Bar و bar لأن برنامج التحويل البرمجي VB.NET ليس حساسا لحالة الأحرف؟

لذلك أساسا CLS هي مجموعة من القواعد مثل هذا لضمان التشغيل البيني بين اللغات.

نصائح أخرى

يعد الامتثال CLS في الغالب للتأكد من أن الكود الخاص بك متوافق على نطاق واسع مع لغات أخرى قدر الإمكان. ويشمل أشياء مثل عدم تعريض الأعضاء العامين الذين يختلفون إلا عن طريق القضية (والتي من شأنها أن تخلط بين VB، وهي غير حساسة لحالة الأحرف). انظر الى هذا MSDN المادة لمزيد من المعلومات، جنبا إلى جنب مع مواصفات اللغة العامة بحد ذاتها.

أود إضافة إلى ما قيل، توجد صفوفات مقرها غير صفرية فقط لتسهيل الانتقال للحصول على رمز VB6 الحالي (بشكل رئيسي بواسطة أداة الترحيل التلقائي) منذ ذلك الحين في VB6، قد يبدأ فهرسة الصفيف من رقم تعسفي، وليس بالضرورة صفر.

نظرا لقضية الامتثال CLS (وغيرها من الاعتبارات)، لا ينصح باستخدامها من أي وقت مضى في .NET (حتى عند برمجة VB.NET). علاوة على ذلك، فإن استخدامهم مقيد إلى حد ما. من الأسهل فقط القيام بترجمة إزاحة عن طريق تثبيت الصفيف داخل الفصل وكتابة عامل الوصول إلى الفهرس المناسب.

أيضا،

إذا كان تطبيقك المقصود بالعمل مع البرامج الأخرى - كما هو الحال في تكنولوجيا المعلومات، فستكون وحدة تحتوي على مكتبة فئة عامة للأشخاص الآخرين، لا تقلق بشأن ذلك كثيرا.

لكن التعليقات الأخرى هنا صحيحة عند تطوير مكتبة فئة عامة.

من الممارسات الجيدة دائما استخدام [الجمعية: clscompliant (true)]، ولكنها ليست حاسمة في تشغيل التطبيق الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top