Question

Je lis actuellement Albahari 's C # 3.0 dans un Nutshell et p. 241, tout en parlant de l'indexation Array, il dit ceci:

  

tableaux à base Nonzero-ne sont pas   CLS (Common Language Specification) compatibles avec la norme

Qu'est-ce que cela signifie exactement, pour les tableaux non nuls pour ne pas être conforme CLS ? Et quelles implications at-il sur votre code?

[Mise à jour]

est un lien vers la page du livre.

Était-ce utile?

La solution

Les CLS (Common Language Specification) jette les bases d'un ensemble commun de règles de conformité qui garantit que d'autres langues (VB.NET, F #, etc.) peuvent utiliser des ensembles que vous avez construit avec C #. Un tableau de base non nul ne serait pas conforme à d'autres langues attendent des tableaux comme base zéro.

Voici un exemple qui est plus facile à comprendre:

class Foo
{
    public void Bar() { }
    public void bar() { } 
}

Ce type serait pas être conforme CLS, car il contient deux membres qui diffèrent par le nom que par type. Comment quelqu'un en utilisant VB.NET entre Bar et désambiguïser bar depuis le compilateur VB.NET n'est pas sensible à la casse?

Donc, fondamentalement, la CLS est un tas de règles comme celle-ci pour garantir l'interopérabilité entre les langues.

Autres conseils

CLS conformité est surtout de faire en sorte que votre code est aussi largement compatible avec d'autres langues que possible. Il inclut des choses comme ne pas exposer les membres du public qui ne diffèrent que par le cas (ce qui serait source de confusion VB, qui est insensible à la casse). Voir cette MSDN article pour plus d'informations, ainsi que le spécification de langage commun lui-même.

plus I à ce qui a été dit, des tableaux basés sur-non nulle existent uniquement pour faciliter la transition pour le code VB6 existant (principalement par l'outil de migration automatique) puisque dans VB6, l'indexation de tableau pourrait commencer à partir d'un nombre arbitraire, pas nécessairement zéro.

En raison de la question de la conformité de CLS (et d'autres considérations), il est recommandé de ne pas jamais les utiliser dans .NET (même lors de la programmation VB.NET). De plus, leur utilisation est plutôt limitée. Il est plus facile de faire une traduction de décalage en encapsulant le tableau dans une classe et d'écrire un opérateur d'accès à l'index approprié.

En outre,

Si votre application ne vise pas à travailler avec d'autres programmes -. Comme il est une unité autonome que vous ne vendrez pas comme une bibliothèque de classes publiques à d'autres personnes, ne vous inquiétez pas trop

Mais les autres commentaires ici sont corrects lors de l'élaboration d'une bibliothèque de classe générique.

Il est toujours bon d'utiliser [assemblage: CLSCompliant (true)]., Mais il est essentiel pour obtenir le fonctionnement de votre application

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