Capire la conformità CLS e codice corretto
-
05-09-2019 - |
Domanda
Ho cercato di creare un controllo astratto a gestire alcuni dello stato nella nostra applicazione. Tuttavia, ho eseguito un fallo di alcuni problemi di CLS e speravo che qualcuno potesse fornire qualche informazione.
Ho un'enumerazione in quanto tale:
<Flags()> _
Public Enum FormState
Read = 1
Edit = 2
Insert = 4
End Enum
E una classe come ad esempio:
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
Quando si tenta di compilare il codice mi sono lasciato con un avviso che il Stato di proprietà non è compatibile con CLS e nessuno dei due è il Stato argomento. Come mai? E come posso risolvere il problema di rimuovere le avvertenze?
- ho tentato di aggiungere il
attributo entrambe le voci senza fortuna - Ho cercato di diffondere l'articolo di MSDN non-CLS-compliant membro 'MustOverride' non è consentito in un CLS-compliant nel codice senza risultati
- Ho provato a cambiare i metodi di accesso alla
Friend
invece diPublic
- Ho provato specificando un tipo per l'Enum (
Integer
eUInteger
)
Soluzione
Guardando il codice, l'enumerazione sembra essere parte di una classe denominata enumeratori. La classe non è elencato nel codice, ma sto supponendo che si ha il pieno controllo su di esso.
La classe deve essere etichettato con l'attributo compatibile CLS pure.
Altri suggerimenti
Per rimuovere le avvertenze aggiungono i seguenti attributi in modo che la classe, il metodo e la proprietà simile a questa:
<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
Questo significa al compilatore che si desidera gli avvertimenti rimossi e che siete a conoscenza il codice non è CLSCompliant.
E 'possibile che non si dispone di un elemento con il valore 0.