ما هي قواعد أكثر تقدما اللازمة للالتعليمات البرمجية لتصبح CLS-شكوى؟

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

سؤال

وهنا مثال محدد وهي ليست CLS-شكوى وفقا لVS.NET 2005.

Public Interface IDbId

    Function GetNativeObject() As Object
    Function Equals(ByVal compObj As IDbId) As Boolean
    Function CompareTo(ByVal compObj As IDbId) As Integer
    Function ToString() As String

End Interface

وهذا هو واجهة I تنفيذ مع فئات مثل DbId32، DbId64، DbIdString، وما إلى ذلك هي وسيلة لمجرد الأصلي قاعدة بيانات نوع المفتاح الأساسي إلى نوع صافي مشترك واحد.

وماذا أنا لست عرض هو الأسلوب المصنع الذي instantiates نوع ملموس الصحيح (أي DbId32 الجديدة لSQL نوع الملقم "كثافة"، على سبيل المثال) نظرا لنوع قاعدة البيانات الأصلية.

والآن دعونا نقول أذهب إلى استخدام هذه الواجهة مثل ذلك:

Public MustOverride ReadOnly Property ID() As IDbId

وVS الآن مخرجات هذه رسالة تحذير:

<اقتباس فقرة>   

ونوع عودة الدالة 'ID' ليس CLS-شكوى.

وأنا يمكن أن تتوقف هذه التحذيرات بإضافة هذه السمة إلى واجهة لي مثل ذلك:

<CLSCompliant(True)> _
  Public Interface IDbId
  ...

وأي من وظائف ويبدو أن هذه الواجهة يعرف لكسر القواعد موثقة <لأ href = "http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/" يختلط = "نوفولو noreferrer"> هنا . ذلك هو السبب في VS عرض هذه التحذيرات؟

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

المحلول

وأعتقد أنه من المقرر أن المعدل الكلمة MustOverride في المثال الخاص بك. تحقق من هذا: لا يسمح غير CLS المتوافقة الأعضاء MustOverride "في فئة CLS متوافقة

نصائح أخرى

FXCop و التي يبدو أنها تشير دائما ما ما يلزم لجعل دلل CLS المتوافقة

استخدم صافي العاكس لنلقي نظرة على الشفرة التي تم إنشاؤها مع وبدون سمة على حد سواء، ومعرفة ما إذا كان هناك أي اختلاف.

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

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