Comprendre la conformité CLS et code correct
-
05-09-2019 - |
Question
J'ai essayé de créer un contrôle Abstraite pour gérer certains de l'État dans notre application. Cependant, j'ai couru une faute de quelques problèmes de CLS et espérait que quelqu'un pourrait donner un aperçu.
J'ai une énumération en tant que tel:
<Flags()> _
Public Enum FormState
Read = 1
Edit = 2
Insert = 4
End Enum
Et une classe en tant que telle:
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
Quand je tente de compiler ce code, je suis parti avec un avertissement que le État est pas CLS propriété conforme et ni est le État argument. Comment venir? Et comment puis-je corriger ce problème pour supprimer les avertissements?
- Je suis tenté d'ajouter l'attribut
aux deux éléments sans chance - J'ai essayé de diffuser l'article MSDN non conforme CLS membre « MustOverride » est pas autorisé dans un conforme CLS dans le code sans résultats
- Je l'ai essayé de changer les accesseurs
Friend
au lieu dePublic
- Je l'ai essayé spécifier un type pour le Enum (
Integer
etUInteger
)
La solution
En regardant votre code, le ENUM semble faire partie d'une classe appelée agents recenseurs. La classe ne figure pas dans votre code, mais je suppose que vous avez le plein contrôle sur elle.
La classe doit être marqué avec l'attribut conforme CLS ainsi.
Autres conseils
Pour supprimer les avertissements ajouter les attributs suivants afin que la classe, la méthode et l'apparence des biens comme ceci:
<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
Cela signifie au compilateur que vous voulez que les avertissements supprimés et que vous connaissez votre code n'est pas CLSCompliant.
Il se pourrait que vous ne disposez pas d'un élément avec la valeur 0.