Понимание соответствия 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, как и состояние аргумент.Как же так?И как я могу исправить эту проблему, чтобы удалить предупреждения?
- Я попытался добавить атрибут <CLSCompliant(True)> к обоим элементам, но безуспешно
- Я пытался распространить статью MSDN Не совместимый с CLS участник 'MustOverride' не разрешен в CLS-совместимом в код без каких-либо результатов
- Я пробовал менять средства доступа на
Friend
вместо того , чтобыPublic
- Я попытался указать тип для перечисления (
Integer
иUInteger
)
Решение
Глядя на ваш код, кажется, что перечисление является частью класса, называемого enumerators .Класс не указан в вашем коде, но я предполагаю, что у вас есть полный контроль над ним.
Класс также должен быть помечен атрибутом, совместимым с 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.