لماذا هذا الاسم مع التغلب عليه غير متوافق CLS؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

لماذا أحصل على تحذير مترجم

Logic.domainObjectBase._isnew "ليس متوافقا متوافقا

للحصول على الكود التالي؟

public abstract class DomainObjectBase
{
    protected bool _isNew;
}
هل كانت مفيدة؟

المحلول

من مواصفات اللغة العامة:

يجب أن تتبع مجمعات اللغة المتوافقة مع CLS قواعد الملحق 7 من التقرير الفني 15 من معيار Unicode Standard 3.0، الذي يحكم مجموعة الشخصيات التي يمكن أن تبدأ وأدرجها في المعرفات. تتوفر هذه المعيار من موقع ويب لاتحاد Unicode.

اذا أنت انظر هذا الأمر:

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

في الأساس، لا يمكنك بدء معرف مع الشرطة السطرية - وهذا ينتهك CLS متوافقا على حقل مرئي (عام / محمي).

نصائح أخرى

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

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

[assembly: CLSCompliant(true)]

يتضمن Visual Studio هذا الخط في ملف AssemblyInfo.cs الذي يمكن العثور عليه تحت الخصائص في معظم المشاريع.

للحصول على هذا الخطأ، يمكنك إما:

  1. إعادة تسمية الممتلكات الخاصة بك (مستحسن):

    protected bool isNew;
    
  2. قم بتعيين التجمع بالكامل لتكون متوافقة مع CLS:

    [assembly: CLSCompliant(false)]
    
  3. أضف سمة فقط إلى الممتلكات الخاصة بك:

    [CLSCompliant(false)]  
    protected bool _isNew;
    
  4. تغيير نطاق العقار، بحيث لا يمكن رؤيته خارج الجمعية.

    private bool _isNew;
    

الرائد إبطال مصاحب مع _isNew كونها مرئية (أي ليست خاصة).

الشرطة السفلية تسبب المشكلة. الممارسة الشائعة هي أن السفلات السطرية محجوزة للحقول الخاصة. يجب أن يتم غسل الأعضاء المحميين / العموميين بشكل صحيح.

علي سبيل المثال:

public abstract class DomainObjectBase{   
   private bool _isNew;
   protected bool IsNew { get { return _isNew; } set { _isNew = value;} }
}

أو، إذا كنت ترغب في استخدام 3.x والتخلص من الحقل الخاص:

public abstract class DomainObjectBase{   
   protected bool IsNew { get; set; }
}

لا ينبغي أن يبدأ معرف متوافق مع CLS مع الشرطة السفلية.

انها الشرطة السفلية. انظر الى هذا مقالة - سلعة.

الرائدة _ غير متوافق مع CLS

مايكروسوفت stylecop. سيقوم بتحليل التعليمات البرمجية الخاصة بك، وتقديم روابط إلى الوثائق ذات الصلة التي توضح سبب عدم توافق CLS.

لأن اسم عضو البيانات، _isNew, ، تبدأ مع الشرطة السفلية.

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