Вопрос

Я попытался создать абстрактный элемент управления для управления некоторыми состояниями в нашем приложении.Тем не менее, я столкнулся с некоторыми проблемами 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top