La comprensión de compatibilidad con CLS y el código correcto
-
05-09-2019 - |
Pregunta
He intentado crear un control abstracto para gestionar algunos de estado en nuestra aplicación. Sin embargo, he corrido una falta de algunas cuestiones CLS y tenía la esperanza de que alguien pueda proporcionar alguna información.
Tengo una enumeración como tal:
<Flags()> _
Public Enum FormState
Read = 1
Edit = 2
Insert = 4
End Enum
Y una clase como tal:
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
Cuando intento compilar este código me quedo con una advertencia de que el Estado propiedad no es compatible con CLS y tampoco lo es el Estado argumento. ¿Cómo? ¿Y cómo puedo corregir este problema para eliminar las advertencias?
- He intentado añadir el atributo
a ambos elementos sin suerte - Traté de difundir el artículo de MSDN no compatible con CLS miembro MustOverride 'no está permitido en una compatible con CLS en el código sin resultados
- He intentado cambiar los descriptores de acceso a
Friend
en lugar dePublic
- He intentado especificar un tipo para el Enum (
Integer
yUInteger
)
Solución
En cuanto a su código, la enumeración parece ser parte de una clase llamada enumeradores. La clase no aparece en su código, pero estoy asumiendo que usted tiene control total sobre él.
La clase necesita ser etiquetado con el atributo compatible con CLS también.
Otros consejos
Para eliminar las advertencias añaden los siguientes atributos para que la clase, el método y la propiedad siguiente aspecto:
<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
Esto indica al compilador que desea que las advertencias removidos y que usted es consciente de que su código no es CLSCompliant.
Podría ser que usted no tiene un elemento con valor 0.