2009-12-01 14 views
50

He encontrado muchas páginas sobre el cumplimiento de CLS.¿Por qué debería escribir el código que cumple con CLS?

he entendido que el cumplimiento CLS:

Muchos peolple escriben que "si se escribe código, debería escribirlo compatible con CLS." Pero hasta donde puedo leer, no hay ninguna razón para usar el cumplimiento de CLS en un software genérico.

¿Tengo razón o me perdí algo?

+0

relacionados https://stackoverflow.com/questions/570452/what-is-the-clscompliant-attribute-in-net –

Respuesta

41

Si escribe una biblioteca o un marco, tiene sentido asegurarse de que su biblioteca se pueda utilizar desde cualquier lenguaje CLR.

+0

CIL (Common Intermediate Language) no es suficiente? – Luca

+4

afaik no, porque CIL puede contener funciones que no se pueden usar en ciertos lenguajes de CLR. P.ej. tiene un método que toma el parámetro UInt32, el código CIL está bien, pero el método no puede invocarse desde un idioma que no tiene un concepto de unsigned. –

+0

¿Qué sucede si el idioma está "traducido" en CIL (teniendo el código fuente, por supuesto)? En este escenario, parece que el cumplimiento de CLS solo se requiere con ensamblajes heredados, ¿verdad? – Luca

11

Puede que no haya una específica razón tener su código sea compatible con CLS, pero la gente se refiere a que es una "mejor práctica" - algo que se debe hacer porque es un buen hábito, en lugar de ser mensurable mejor para un escenario particular.

En otras palabras, que es una buena idea para hacer su CLS compatible con el código a menos que tenga una razón no a.

10

La respuesta es permitir la máxima compatibilidad con los lenguajes .NET. CLS es la lingua franca que permite que los ensamblajes de C# funcionen con F #, Iron Python, C++/CLI, VB.NET, Boo y todos los demás lenguajes .NET. Salga de ese límite y su conjunto puede funcionar correctamente, pero no necesariamente.

32

El cumplimiento de CLS es particularmente importante si está distribuyendo bibliotecas, específicamente, al escribir garantías conforme a CLS de que sus bibliotecas podrán ser utilizadas por todos los lenguajes que cumplen con CLS.

Por ejemplo, Visual Basic no distingue entre mayúsculas y minúsculas, mientras que C# sí lo es. Uno de los requisitos del cumplimiento de CLS es que los nombres de los miembros públicos (y protegidos) no deben diferir solo por caso, garantizando así que sus bibliotecas se puedan usar de forma segura mediante el código de Visual Basic o cualquier otro lenguaje .NET que no diferencie basado en caso.

+0

También hay una regla de que no puede iniciar miembros con guiones bajos. Lo que me deja preguntándome cómo nombrar una variable protegida envuelta por una propiedad pública ... No puedo usar una versión en minúscula, no puedo usar un guión bajo ... ¿cuál es la siguiente alternativa fea? –

+0

Probablemente prefijando con una p. No es bonito, pero funcional. Si bien prefiero las Propiedades C# sobre los captadores y ejecutores del estilo Java, al menos en Java la convención de nomenclatura es más fácil. – Dathan

+0

De alguna manera, cuando todo está dicho y hecho, Java termina siendo más conciso. Creo que probablemente sean más las bibliotecas que el idioma. –

Cuestiones relacionadas