Понимание соответствия CLS и правильного кода - PullRequest
3 голосов
/ 18 февраля 2009

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

Когда я пытаюсь скомпилировать этот код, меня предупреждают, что свойство State не соответствует CLS и не является аргументом state . Как так? И как я могу исправить эту проблему, чтобы удалить предупреждения?

Ответы [ 3 ]

5 голосов
/ 18 февраля 2009

Глядя на ваш код, перечисление кажется частью класса, называемого перечислителями. Класс не указан в вашем коде, но я предполагаю, что вы имеете полный контроль над ним.

Класс также должен быть помечен атрибутом, совместимым с CLS.

1 голос
/ 18 февраля 2009

Чтобы удалить предупреждения, добавьте следующие атрибуты, чтобы класс, метод и свойство выглядели так:

<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

Это указывает компилятору, что вы хотите удалить предупреждения и что вы знаете, что ваш код не соответствует CLSC.

0 голосов
/ 03 июня 2010

Возможно, у вас нет элемента со значением 0.

...