Quelles sont les règles les plus avancées nécessaires pour que votre code soit conforme à CLS?

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

Question

Voici un exemple spécifique qui n'est pas une réclamation CLS selon 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

C’est une interface que j’implémente avec des classes telles que DbId32, DbId64, DbIdString, etc. C'est un moyen de résumer le type de clé primaire de la base de données native en un type .Net commun.

Ce que je n’affiche pas, c’est la méthode fabrique qui instancie le type concret correct (par exemple, le nouveau DbId32 pour un type SQL Server 'int', par exemple) à partir d’un type de base de données natif.

Maintenant, disons que je vais utiliser cette interface comme suit:

Public MustOverride ReadOnly Property ID() As IDbId

VS affiche maintenant ce message d'avertissement:

  

Le type de fonction "ID" renvoyé n'est pas une réclamation CLS.

Je peux arrêter ces avertissements en ajoutant cet attribut à mon interface, comme suit:

<CLSCompliant(True)> _
  Public Interface IDbId
  ...

Aucune des fonctions définies par cette interface ne semble briser les règles documentées ici . Alors, pourquoi VS affiche-t-il ces avertissements?

Était-ce utile?

La solution

Je pense que cela est dû au modificateur de mot-clé MustOverride dans votre exemple. Regarde ça: Le membre 'MustOverride' non conforme à CLS n'est pas autorisé dans une classe conforme à CLS

Autres conseils

Je lance FXCop , ce qui semble toujours indiquer ce qui il faut faire une dll conforme à CLS

Utilisez le réflecteur .net pour examiner le code généré à la fois avec et sans l'attribut et voir s'il y a une différence.

Si tel est le cas, et que cela n'explique évidemment pas les différences (c'est-à-dire si la seule différence est l'attribut CLICompliant), modifiez ensuite vos questions avec les résultats, et j'aurai un autre essai ...:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top