Qu'est-ce que l'attribut CLSCompliant
?Qu'est-ce que l'attribut 'CLSCompliant' dans .NET?
Répondre
Vous marquez des classes avec l'attribut CLSCompliant lorsque vous voulez vous assurer qu'il peut être utilisé par n'importe quel autre langage .NET. Ce sont les règles de base:
types non signés ne devraient pas faire partie de l'interface publique de la classe. Cela signifie que les champs publics ne doivent pas avoir des types non signés comme uint ou ulong, les méthodes publiques ne doivent pas renvoyer de types non signés, les paramètres passés à la fonction publique ne doivent pas avoir de types non signés. Cependant, les types non signés peuvent faire partie de membres privés.
Les types non sécurisés tels que les pointeurs ne doivent pas être utilisés avec des membres publics. Cependant, ils peuvent être utilisés avec des membres privés.
Les noms de classe et de membre ne doivent pas différer uniquement en fonction de leur cas. Par exemple, nous ne pouvons pas avoir deux méthodes nommées MyMethod et MYMETHOD.
Seules les propriétés et les méthodes peuvent être surchargées. Les opérateurs ne doivent pas être surchargés.
La conformité CLS est un sous-ensemble du spectre de langage complet autorisé par le CLR. Elle le restreint aux sous-ensembles qui sont probablement disponibles dans la majorité des langages ciblant le CLR. Cela augmente, mais ne garantit pas, que votre bibliothèque peut être utilisée par toutes les langues ciblant le CLR.
Il indique aux autres consommateurs de votre code qu'il est CLS compliant, et rend également le compilateur C# vérifiez qu'il est conforme CLS pour vous.
L'article référencé contient beaucoup plus de détails sur ce que la conformité CLS implique.
Donc, si j'ajoute l'attribut et que je construis mon projet sans problème, cela signifie que mon projet est conforme à CLS et que tout va bien? – Svish
Les autres réponses sont correctes. Laissez-moi clarifier certaines choses - CLS est synonyme de Common Language Specification. C'est l'ensemble minimal de règles et de fonctionnalités linguistiques requises qu'un langage .NET doit implémenter et comprendre. Cet ensemble est un sous-ensemble du common type system, qui définit comment les types sont définis dans .NET. Etre compatible CLS signifie que vous pouvez écrire du code qui peut être consommé par n'importe quel langage qui peut être compilé et exécuté sur le CLR. Mais la conformité CLS n'est pas nécessaire, ce qui vous donne la flexibilité dans les cas où la conformité CLS serait difficile ou impossible à faire.
Si vous souhaitez que votre code soit utilisé par d'autres développeurs, votre API (vos classes et méthodes publiques) doit être compatible CLS. Vous devez le déclarer en ajoutant le CLSCompliantAttribute à vos assemblys. Si vous n'écrivez pas pour d'autres, la conformité CLS n'est pas nécessaire, bien que FxCop (Framework Cop) ne serait pas d'accord avec moi.
Lorsque votre ensemble est marqué avec le CLSCompliantAttribute, le compilateur (doit!) Vérifier votre code pour voir si, lors de la compilation, il violera l'une des règles de CLS (dont certaines ocdecio mentionné) et signaler les violations à vous pour la fixation.
FxCop m'a amené ici. –
Comme il convient ici: Pour marquer un compatible CLS ensemble du projet ajoutez cette ligne à AssemblyInfo.cs
(se trouve sous Propriétés dans l'Explorateur de solutions)
[assembly:CLSCompliant(true)]
ou de manière équivalente dans VB.NET (AssemblyInfo.vb
est caché sous mon Projet)
<Assembly: CLSCompliant(True)>
Grâce à Making Your Code CLS Compliant.
Feriez-vous cela par défaut pour chaque projet? –
Pas nécessairement, surtout pour ceux qui peuvent avoir une exposition à d'autres langues .net. –