هي الميزة الجديدة من C # 4.0 - "المعلمات الاختيارية" CLS-متوافقة؟
-
12-11-2019 - |
سؤال
هذه الميزة الجديدة مريحة حقا.
مؤخرا قرأت وثيقة "إطار التعليمات البرمجية Microsoft All-in-One"، وتذكر أن "المعلمات الاختيارية" ليست متوافقة CLS.
لذلك قمت باختبارها باستخدام "المعلمات الاختيارية" في API العام، وتحولت إلى FXCOP، ثم تم تجميعها و FXCOP لم يشكو من أي شيء.في المتوسط، في حين أن FXCOP قام بالإبلاغ عن تحذير عندما أضيف واجهة برمجة تطبيقات لها uint كنوع عودتها.
حتى الآن أنا مرتبك، هو "المعلمات الاختيارية" متوافقة مع CLS أم لا؟
وما هي أفضل طريقة لمعرفة ما إذا كانت ميزة لغة جديدة متوافقة مع CLS أم لا؟
المحلول
الحجج الاختيارية هي "نوع" CLS متوافق. الأساليب ذات الوسائط الاختيارية قانونية ويمكن تجميعها بنجاح مع سمة GransoSodicetagCode، ولكن المتصلين من هذه الطرق لا تحتاج بالضرورة إلى مراعاة قيم المعلمات الافتراضية أو السمة الاختيارية. (في هذه الحالة سوف تتصرف هذه الأساليب بنفس الطريقة تماما مثل الأساليب القياسية، تتطلب أن يتم ذكر جميع الوسائط بشكل صريح في موقع المكالمة.)
الأساليب التي تستخدم المعلمات الافتراضية يسمح تحت اللغة المشتركة المواصفات (CLS)؛ ومع ذلك، cls يسمح للمجمعات التحويل البرمجيات بتجاهل القيم التي يتم تعيينها لهذه المعلمات. رمز مكتوب للمجمعات التي تجاهل قيم المعلمة الافتراضية يجب أن توفر صراحة الحجج ل كل المعلمة الافتراضية. للحفاظ على السلوك الذي تريده عبر لغات البرمجة، طرق ذلك استخدام المعلمات الافتراضية يجب أن تكون استبداله مع طريقة الزائدة توفير المعلمات الافتراضية.
(مأخوذة من الوثائق الخاصة ب "CA1026: يجب عدم استخدام المعلمات الافتراضية" . )
نصائح أخرى
أنا أفسر سؤالك لتكون حول حجج اختيارية .
إذا كان الأمر كذلك فأنا أعتقد أنهم متوافقون مع CLS ويمكنك التحقق باستخدام clscompliant السمة: giveacodicetagpre.
هذا يجمع دون تحذيرات.
إلقاء نظرة على cls المواصفات .
من الصفحة 41:
يمكن تضمين قيود Vararg للإشارة إلى أن جميع الحجج الماضي هذه النقطة اختيارية.متي يبدو أن اتفاقية الاتصال هي التي تدعم قوائم الوسيطة المتغيرة.
ولكن الصندوق الصحيح أدناه يقول:
cls toy 15: إنه قيد Vararg ليس جزءا من CLS، واتفاقية الاتصال الوحيدة التي تدعمها CLS هو اتفاقية الاتصال المدارة القياسية