ما هي قواعد أكثر تقدما اللازمة للالتعليمات البرمجية لتصبح CLS-شكوى؟
-
22-07-2019 - |
سؤال
وهنا مثال محدد وهي ليست 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)، ثم تعديل أسئلتك مع النتائج، وسآخذ الذهاب أخرى ...:)