فهم CLS الامتثال والرمز الصحيح
-
05-09-2019 - |
سؤال
لقد حاولت إنشاء عنصر تحكم مستخرج لإدارة بعض الحالة في تطبيقنا. ومع ذلك، فقد واجهت خطأ في بعض مشكلات CLS وكانت آمل أن يوفر شخص ما بعض البصيرة.
لدي تعداد على هذا النحو:
<Flags()> _
Public Enum FormState
Read = 1
Edit = 2
Insert = 4
End Enum
وفئة على هذا النحو:
Public MustInherit Class Fields
Inherits System.Web.UI.UserControl
Public Property State() As Enumerators.FormState
Get
Return _State
End Get
Set(ByVal value As Enumerators.FormState)
_State = value
ToggleState(value)
End Set
End Property
Protected MustOverride Sub ToggleState(ByVal state As FormState)
End Class
عندما أحاول تجميع هذا الرمز الذي تركته مع تحذير حالة الممتلكات ليست متوافقة CLS ولا حالة جدال. كيف ذلك؟ وكيف يمكنني تصحيح هذه المشكلة لإزالة التحذيرات؟
- لقد حاولت إضافةu003CCLSCompliant(True)> سمة لكلا العناصر دون حظ
- حاولت نشر مقالة MSDN لا يسمح لعضو "Mondoverride" المتوافق مع CLS بالتوافق مع CLS في الكود بدون نتائج
- لقد حاولت تغيير الملاءمة إلى
Friend
بدلا منPublic
- لقد حاولت تحديد نوع للمنظمة (
Integer
وUInteger
)
المحلول
بالنظر إلى التعليمات البرمجية الخاصة بك، يبدو أن العادة جزءا من فئة تسمى العدادات. لا يتم سرد الفصل في التعليمات البرمجية الخاصة بك، لكنني أفترض أن لديك سيطرة كاملة عليها.
يجب وضع علامة الفئة مع السمة المتوافقة مع CLS أيضا.
نصائح أخرى
لإزالة التحذيرات، أضف السمات التالية بحيث تبدو الفئة والطريقة والممتلكات مثل هذا:
<CLSCompliant(False)> _
Public MustInherit Class Fields
Inherits System.Web.UI.UserControl
<CLSCompliant(False)> _
Public Property State() As Enumerators.FormState
Get
Return _State
End Get
Set(ByVal value As Enumerators.FormState)
_State = value
ToggleState(value)
End Set
End Property
<CLSCompliant(False)> _
Protected MustOverride Sub ToggleState(ByVal state As FormState)
End Class
هذا يدل على التحويل البرمجي الذي تريد إزالته التحذيرات وأنك تدرك الكود الخاص بك ليس clscompliant.
يمكن أن يكون لديك عنصر مع القيمة 0.