2009-02-20 18 views

Respuesta

153

Marque las clases con el atributo CLSCompliant cuando desee asegurarse de que pueda ser utilizado por cualquier otro lenguaje .NET. Estas son las reglas básicas:

  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

¿Lo harías de forma predeterminada para cada proyecto? –

+2

No necesariamente, principalmente para aquellos que pueden estar expuestos a otros lenguajes .net. –

11

CLS obediente es un subconjunto del espectro completo permitido por el CLR. Lo restringe a subconjuntos que probablemente estén disponibles en la mayoría de los lenguajes que se dirigen al CLR. Esto aumenta, pero no garantiza, que su biblioteca puede ser utilizada por todos los idiomas que se dirigen al CLR.

42

Narra otros consumidores de su código que es CLS compliant, y también hace que el compilador de C# cheque que es compatible con CLS para usted.

El artículo al que se hace referencia contiene muchos más detalles sobre lo que implica el cumplimiento de CLS.

+11

Entonces, si agrego el atributo y luego construyo mi proyecto sin quejas, ¿eso significa que mi proyecto cumple con CLS y todo está bien? – Svish

34

Las otras respuestas son correctas. Permítanme aclarar algunas cosas: CLS significa la especificación de lenguaje común. Es el conjunto mínimo de reglas y características de lenguaje requeridas que un lenguaje .NET debe implementar y comprender. Este conjunto es un subconjunto del common type system, que define cómo se definen los tipos en .NET.

Al ser compatible con CLS significa que puede escribir código que puede ser consumido por cualquier idioma que pueda compilarse y ejecutarse en el CLR. Sin embargo, no se requiere el cumplimiento de CLS, lo que le brinda la flexibilidad en casos donde el cumplimiento de CLS sería difícil o imposible de hacer.

Si desea que su código sea consumido por otros desarrolladores, su API (sus clases y métodos públicos) debe cumplir con CLS. Debe declarar esto agregando CLSCompliantAttribute a sus ensamblajes. Si no está escribiendo para otros, el cumplimiento de CLS no es necesario, aunque FxCop (Framework Cop) no estaría de acuerdo conmigo.

Cuando su conjunto está marcado con el CLSCompliantAttribute, el compilador (debe!) Revisar su código para ver si, cuando se compila, se violará ninguna de las reglas de CLS (algunos de los cuales ocdecio mencionado) e informar violaciónes para arreglarlo

+0

FxCop me trajo aquí. –

6

ya que encaja aquí: Para marcar un proyecto conjunto compatible con CLS añadir esta línea a AssemblyInfo.cs (se puede encontrar en Propiedades en el Explorador de soluciones)

[assembly:CLSCompliant(true)] 

o equivalentemente en VB.NET (AssemblyInfo.vb se oculta debajo de Mi Proyecto)

<Assembly: CLSCompliant(True)> 

Gracias a Making Your Code CLS Compliant.

Cuestiones relacionadas