Quais são as regras mais avançados necessários para o seu código para se tornar CLS-queixa?

StackOverflow https://stackoverflow.com/questions/332515

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?

Foi útil?

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 ...:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top