Entendimento compatibilidade com CLS e código correto
-
05-09-2019 - |
Pergunta
Eu tenho tentado criar um controle captada para gerenciar alguns do estado em nossa aplicação. No entanto, eu tenho que correr uma falta de algumas questões CLS e estava esperando que alguém poderia fornecer algum insight.
Eu tenho uma enumeração como tal:
<Flags()> _
Public Enum FormState
Read = 1
Edit = 2
Insert = 4
End Enum
E uma classe 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
Quando tento compilar este código eu fiquei com um aviso de que o Estado propriedade não é compatível com CLS e nem é o Estado argumento. Por quê? E como posso corrigir este problema para remover os avisos?
- Eu tenho tentado adicionar o atributo
para ambos os itens sem sorte - Eu tentei difundir o artigo MSDN não-compatível com CLS membro 'MustOverride' não é permitido em um compatível com CLS no código sem resultados
- Eu tentei mudar os acessores para
Friend
vez dePublic
- Eu tentei especificando um tipo para o Enum (
Integer
eUInteger
)
Solução
Olhando para o seu código, o enum parece ser parte de uma classe chamada recenseadores. A classe não está listado no seu código, mas eu estou supondo que você tem total controle sobre ele.
As necessidades de classe para ser marcado com o CLS atributo compatível também.
Outras dicas
Para remover os avisos adicionar os seguintes atributos de modo que a classe, método e propriedade parecido com este:
<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
Isso significa para o compilador que você quer que os avisos removido e que está ciente de seu código não é CLSCompliant.
Pode ser que você não tem um item com valor 0.