Pregunta

Estoy leyendo actualmente Albahari 's C # 3.0 en una pocas palabras y en la pág. 241, mientras que hablar acerca de la indización de matriz, que dice lo siguiente:

  

matrices basadas en Nonzero no son   CLS (Common Language Specification) según norma

¿Qué significa exactamente, para las matrices no nulas a no ser compatible con CLS ? Y qué implicaciones tiene en su código?

[Actualización]

Aquí es un enlace a la página del libro.

¿Fue útil?

Solución

Los CLS (Common Language Specification) sienta las bases para un conjunto común de normas de cumplimiento que garantiza que los otros idiomas (VB.NET, C #, etc.) puede utilizar ensamblados que han construido con C #. Una matriz basada en distinto de cero no sería compatible con otros idiomas como matrices esperan a ser de base cero.

Este es un ejemplo de que es más fácil de entender:

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

Este tipo sería no sea compatible con CLS, ya que contiene dos miembros que difieren sólo de nombre según el tipo. ¿Cómo podría alguien usando VB.NET eliminar la ambigüedad entre Bar y bar ya que el compilador de VB.NET no es sensible a mayúsculas?

Así que, básicamente, el CLS es un montón de reglas de este tipo para garantizar la interoperabilidad entre los idiomas.

Otros consejos

compatibilidad con CLS es sobre todo acerca de asegurarse de que su código es tan ampliamente compatible con otros idiomas como sea posible. Incluye cosas como no exponer a miembros del público que se diferencian solamente por caso (que puede confundir VB, que es sensible a las mayúsculas). Ver este MSDN artículo para obtener más información, junto con el especificación del lenguaje común sí mismo.

Además de lo que se ha dicho, distinto de cero-basan existen matrices exclusivamente para facilitar la transición de código de Visual Basic 6 existentes (principalmente por la herramienta de migración automática) ya que en Visual Basic 6, la indexación de matrices podría comenzar a partir de un número arbitrario, no necesariamente cero.

Debido al problema de cumplimiento CLS (y otras consideraciones), no es recomendable utilizar siempre en .NET (incluso cuando la programación VB.NET). Además, su uso es más bien limitado. Es más fácil simplemente hacer una traducción compensado mediante la encapsulación de la matriz dentro de una clase y escribir un operador de acceso índice apropiado.

Además,

Si la aplicación no tiene la intención de trabajar con otros programas -. Como en él es una unidad autónoma que no se va a vender como una biblioteca de clases pública a otras personas, no se preocupe demasiado

Pero los otros comentarios aquí son correctos en el desarrollo de una biblioteca de clase genérica.

Siempre es una buena práctica usar [assembly: CLSCompliant (true)]., Pero no es crítico para conseguir su aplicación en ejecución

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top