2010-08-13 9 views

Respuesta

41

En el archivo AssemblyInfo.cs, usted probablemente tiene una línea que dice

[assembly:CLSCompliant(true)] 

Si, a continuación, se deben cumplir las siguientes reglas. (Copia-Pasta de http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/)

  1. tipos sin signo no deben ser parte de la interfaz pública de la clase. Lo que esto significa es que los campos públicos no deben tener tipos sin firmar como uint o ulong, los métodos públicos no deben devolver tipos sin firmar, los parámetros pasados ​​a la función pública no deben tener tipos sin firmar. Sin embargo, los tipos sin firmar pueden ser parte de miembros privados.

  2. Los tipos inseguros como punteros no se deben usar con miembros públicos. Sin embargo, se pueden usar con miembros privados.

  3. Los nombres de las clases y los miembros no deberían diferir solo en función de su caso. Por ejemplo, no podemos tener dos métodos llamados MyMethod y MYMETHOD.

  4. Solo las propiedades y métodos pueden estar sobrecargados, los operadores no deben estar sobrecargados.

+0

Los tipos sin firmar pueden ser parte de una interfaz pública, si no exponen ninguna funcionalidad cuyo código escrito en un idioma sin tipos sin firmar pueda querer usar pero no pueda hacerlo.Por ejemplo, un método para almacenar un valor sin signo de 32 bits en cuatro bytes consecutivos podría contener legítimamente sobrecargas tanto para 'UInt32' como para' Int64', y una clase podría proporcionar un método para convertir cuatro bytes consecutivos en 'UInt32' si también proporcionado uno que devolvería el mismo valor que un 'Int64'. – supercat

5

Esta es una vieja pregunta, pero pensé que se debía una mejor explicación para futuros investigadores (como yo).

En primer lugar, los enlaces en las otras respuestas proporcionan gran detalle sobre el motivo por el que se da esta advertencia.

Sin embargo, para resumir, el código escrito para Common Language Runtime (como C#) es CLS-obediente si puede interactuar con otros lenguajes diseñados para el CLR. Esto significa que ciertos tipos de datos específicos del idioma que no son comunes a todo el tiempo de ejecución no son compatibles. La solución rápida y fácil para esto en lo que respecta a variables y métodos es darles el modificador de visibilidad internal que especifica que el método, clase, propiedad, etc. no es visible fuera del ensamblaje para el que se está construyendo. Esto solo debe hacerse en aquellos artículos que no necesita o desea que se usen fuera del ensamble; para aquellos que desee que sean visibles, use tipos de datos que cumplan con CLS.

Cuestiones relacionadas