194 votes

Qu'est-ce que l'attribut "CLSCompliant" dans .NET ?

Quel est le CLSCompliant attribut ?

207voto

Otávio Décio Points 44200

Vous marquez les classes avec l'attribut CLSCompliant lorsque vous voulez vous assurer qu'il peut être utilisé par tout autre langage .NET.
Ce sont les règles de base :

  1. Les types non signés ne doivent pas faire partie de l'interface publique de la classe. Cela signifie que les champs publics ne doivent pas comporter de types non signés, tels que uint o ulong les méthodes publiques ne doivent pas retourner des types non signés, les paramètres passés à la fonction publique ne doivent pas avoir des types non signés. Cependant, les types non signés peuvent faire partie des membres privés.

  2. Les types non sûrs comme pointeurs ne doit pas être utilisé avec public membres. Cependant, ils peuvent être utilisés avec private membres.

  3. Les noms de classe et les noms de membres ne doivent pas différer uniquement en fonction de leur casse. Par exemple, nous ne pouvons pas avoir deux méthodes nommées MyMethod y MYMETHOD .

  4. Seules les propriétés et les méthodes peuvent être surchargées, les opérateurs ne doivent pas être surchargés.

0 votes

Le feriez-vous par défaut pour chaque projet ?

4 votes

Pas nécessairement, surtout pour ceux qui sont exposés à d'autres langages .net.

6 votes

Une autre restriction est CS3006 : La méthode surchargée 'Foo.Bar(ref Baz)' ne différant que dans ref ou out, ou dans le rang du tableau, n'est pas conforme à CLS

50voto

Jon Skeet Points 692016

Elle indique aux autres consommateurs de votre code qu'il est Conforme aux normes CLS et rend également le compilateur C# vérifier que c'est conforme au CLS pour vous.

L'article cité en référence contient beaucoup plus de détails sur ce qu'implique la conformité aux normes CLS.

16 votes

Donc, si j'ajoute l'attribut et que je construis mon projet sans me plaindre, cela signifie que mon projet est conforme aux normes CLS et que tout va bien ?

2 votes

@Svish, oui c'est le cas. Le compilateur vous fera savoir si vous violez des règles.

50voto

Will Points 76760

Les autres réponses sont correctes. Laissez-moi clarifier certaines choses : CLS signifie Common Language Specification. Il s'agit de l'ensemble minimal de règles et de caractéristiques linguistiques requises qu'un langage .NET doit mettre en œuvre et comprendre. Cet ensemble est un sous-ensemble de la système de type commun qui définit la manière dont les types sont définis dans .NET.

Être conforme au CLS signifie que vous pouvez écrire du code qui peut être consommé par n'importe quel langage pouvant être compilé et exécuté sur le CLR. Mais la conformité CLS n'est pas obligatoire, ce qui vous donne une certaine flexibilité dans les cas où la conformité CLS serait difficile ou impossible à réaliser.

Si vous souhaitez que votre code soit utilisé par d'autres développeurs, votre API (vos classes et méthodes publiques) doit être conforme à CLS. Vous devez le déclarer en ajoutant l'attribut CLSCompliantAttribute à vos assemblages. Si vous n'écrivez pas pour d'autres personnes, la conformité CLS n'est pas nécessaire, bien que l'attribut FxCop ( Cadre de travail Cop) ne serait pas d'accord avec moi.

Lorsque votre assemblage est marqué avec l'attribut CLSCompliantAttribute, le compilateur vérifiera (devrait !) votre code pour voir si, une fois compilé, il violera l'une des règles CLS (certaines d'entre elles ocdecio mentionnés) et vous signalent les violations pour que vous les corrigiez.

0 votes

FxCop m'a amené ici.

1 votes

Malheureusement, la vision d'ensemble du CLR avec de nombreux langages frontaux différents (comme VB.NET - qui meurt à petit feu - et d'autres aujourd'hui disparus, comme MC++, Delphi.NET, Oxygene, J#, JScript.NET, etc.) limite les avantages de la conformité au CLSC étant donné que les autres langages restants qui prennent en charge le CLR n'ont aucun problème à prendre en charge les fonctionnalités non conformes au CLSC, comme les paramètres optionnels et les paramètres de sécurité. out paramètres - je pense donc que Microsoft doit revoir les exigences du CLS et peut-être les assouplir.

0 votes

Oxygene et les autres langages Elements ciblent toujours le CLR.

14voto

JaredPar Points 333733

La conformité CLS est un sous-ensemble de l'éventail complet des langages autorisés par le CLR. Elle le limite aux sous-ensembles qui sont probablement disponibles par la majorité des langues qui ciblent le CLR. Cela augmente, mais ne garantit pas, que votre bibliothèque puisse être utilisée par tous les langages ciblant le CLR.

13voto

Markus Hartmair Points 562

Comme il convient ici : Pour marquer un projet entier conforme au CLS, ajoutez cette ligne à AssemblyInfo.cs (se trouve sous Propriétés dans Solution Explorer)

[assembly:CLSCompliant(true)]

ou de manière équivalente en VB.NET ( AssemblyInfo.vb est caché sous Mon projet)

<Assembly: CLSCompliant(True)>

Merci à Rendre votre code conforme aux normes NSI .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X