Quais são as regras mais avançados necessários para o seu código para se tornar CLS-queixa?
-
22-07-2019 - |
Pergunta
Aqui está um exemplo específico que não é CLS-denúncia segundo a VS.NET 2005.
Public Interface IDbId
Function GetNativeObject() As Object
Function Equals(ByVal compObj As IDbId) As Boolean
Function CompareTo(ByVal compObj As IDbId) As Integer
Function ToString() As String
End Interface
Esta é uma interface que implementar com classes como DbId32, DbId64, DbIdString, etc. É uma forma de abstrair o banco de dados Tipo de chave primária nativa em um tipo comum .Net.
O que eu não estou mostrando é o método de fábrica que instancia o tipo concreto correto (isto é novo DbId32 para um tipo SQL Server 'int', por exemplo) dado um tipo de banco de dados nativo.
Agora vamos dizer que eu vou usar essa interface assim:
Public MustOverride ReadOnly Property ID() As IDbId
VS agora gera essa mensagem de aviso:
Retorno tipo de função 'ID' não é CLS-denúncia.
eu posso parar esses avisos, adicionando este atributo para minha interface assim:
<CLSCompliant(True)> _
Public Interface IDbId
...
Nenhuma das funções Isto define de interface parecem quebrar as regras documentadas aqui . Então, por que é VS exibir esses avisos?
Solução
Eu acho que é devido ao MustOverride palavra-chave modificador no seu exemplo. Veja isso: não-compatível com CLS membro 'MustOverride' não é permitido em uma classe compatível com CLS
Outras dicas
FXCop e que parece sempre apontar o que é preciso para fazer uma DLL compatível com CLS
Use .net reflector para dar uma olhada no código gerado com e sem o atributo, e ver se há alguma diferença.
Se houver, e não, obviamente, explicar as diferenças (ou seja, se a única diferença é o atributo CLICompliant), em seguida, alterar suas dúvidas com os resultados, e eu vou ter outra chance ...:)