了解CLS合规性和正确的代码

时间:2009-02-17 22:42:33

标签: vb.net standards-compliance cls-compliant

我试图创建一个抽象控件来管理我们应用程序中的某些状态。但是,我对一些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 个答案:

答案 0 :(得分:5)

查看你的代码,enum似乎是一个名为枚举器的类的一部分。该类未列在您的代码中,但我假设您可以完全控制它。

该类也需要使用符合CLS的属性进行标记。

答案 1 :(得分:1)

要删除警告,请添加以下属性,以使类,方法和属性如下所示:

<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。

答案 2 :(得分:0)

可能是您没有值为0的项目。