CLS permite que porciones privadas del código en clases no cumplan con CLS. ¿Cómo es esto posible, porque en última instancia, el código debe convertirse a la IL?CLS permite que porciones privadas del código en clases no cumplan con CLS. ¿Cómo es esto posible?
CLS permite que porciones privadas del código en clases no cumplan con CLS. ¿Cómo es esto posible?
Respuesta
CLS significa Common Language Specification. Para simplificar, básicamente son los tipos e identificadores mínimos que todos los lenguajes .NET deben conocer. Por ejemplo, Int32
es CLS-obediente: cualquier lengua de .NET debe poder manejarlo. UInt32
no es. Como su código es privado, otros ensamblados no podrán acceder a él en otros idiomas, por lo que no importa si es compatible con CLS o no.
Consulte this MSDN page para obtener más información sobre el cumplimiento de CLS.
Edit: Creo que malinterpretas qué es el cumplimiento de CLS. No se trata de si el código se puede compilar en IL o no. UInt32 se puede usar en IL. Lo mismo ocurre con un identificador llamado '©'. El cumplimiento de CLS es solo un contrato mínimo para la interoperabilidad del lenguaje. Lo que CLR admite es mucho más amplio que las limitaciones para el cumplimiento de CLS.
Edit2: Sí, tienes razón. Se requiere un lenguaje .NET para admitir Int32, no UInt32, incluso si tiene una asignación directa a IL. Ver punteros, son compatibles con IL y C# pero no cumplen con CLS. VB.NET no implementa un soporte para ellos y aún cumple con CLS.
Lo que entiendo es: si algo es CLS compatible, entonces es porque IL lo admite, porque todo se convertirá en IL cuando se compile. Cuando UInt32 no cumple con CLS, entonces, ¿qué importa si se trata de una implementación privada o pública, porque no hay forma de que se compile en IL? – teenup
Lo siento, creo que estoy haciendo preguntas ridículas, pero si UInt32 es compatible con CTS (es decir, también con IL), ¿por qué no lo han hecho? Es decir, si devuelvo un UInt32 de uno de mis métodos en un idioma, ¿por qué no puede otro idioma llamar a este método y aceptar el valor de retorno? ¿Puede otro idioma no utilizar directamente System.UInt32 y no es necesario que su compilador admita un tipo de datos que se correlacionará con UInt32 de.NET Framework ? – teenup
No - El CLR no necesita saber qué está pasando debajo del capó. Necesita tener solo sus clases públicas y miembros públicos/privados de esas clases públicas para cumplir con CLS, nunca se accederá al código de descanso; seguirá siendo inaccesible para otros idiomas que usan sus clases.
p. las variables son sensibles a las mayúsculas y minúsculas en Visual Basic, y tomo dos variables con diferencias de casos solamente, que no es compatible con cls y las pongo dentro del alcance de una función privada. Ahora cuando ejecuto mi aplicación, se convertirá en IL. Ahora, cuando IL no admite variables con diferencias de casos solamente, estas dos variables de diferencias se tomarán como una sola misma variable. – teenup
CLS dice: El código no debe exponer dos nombres (identificadores) que difieran solo en su caso. Y el compilador de VB.Net no le permite compilar la fuente que dice: '' La variable local ya está declarada en el bloque actual'' –
@Pundeet Creo que quiere decir que VB es un caso ** insensible **. En VB declarar variables que difieren por caso solo en el mismo ámbito, como this._curious_geek señala, dará como resultado un error de compilación. –
El único objetivo real de CLS es garantizar que cualquier lenguaje compatible pueda interactuar con cualquier clase compatible, independientemente del idioma en el que fue escrito, porque la API de esa clase requiere solo cosas que todos los idiomas deben admitir. Por lo tanto, "Especificación de lenguaje común".
Semi obviamente, la API privada es (o al menos, debería ser) invisible fuera de su propio código, por lo que no importa si es compatible con CLS o no.
Si es compatible con CLS que significa cada lenguaje .NET necesidad apoya.
Si es representable en IL eso significa que algunos .NET pueden apoyarlo.
Uno representa un requisito de los lenguajes .NET y el otro representa lo que es posible en los lenguajes .NET.
- 1. ¿Puede un ensamblaje que incluye una referencia que no cumple con CLS ser compatible con CLS?
- 2. "CLS" Equivalente en BASH?
- 3. ¿Por qué mi código no cumple con CLS?
- 4. ¿Por qué debería escribir el código que cumple con CLS?
- 5. El nombre de referencia no es compatible con CLS
- 6. ¿Cuáles son las consecuencias del código que NO cumple con CLS en .NET?
- 7. CLS (claro) una sola línea?
- 8. Desactivar CLS comprobación de cumplimiento en C#
- 9. ¿Por qué mi función no cumple con CLS? Tipo
- 10. Configuración del cumplimiento de CLS para un ensamblado .NET
- 11. El tipo de argumento no cumple con CLS, ¿por qué?
- 12. CIL, CLS y CTS en .NET
- 13. Atributos y parámetros de matriz CLS
- 14. Obteniendo un mensaje extraño de depuración: Aserción fallida: (cls), función getName: ¿qué es esto?
- 15. ¿Por qué los unsigned int no son CLS?
- 16. la limpieza de C CS3016 # aviso del compilador: Las matrices como argumentos atributo no es compatible con CLS
- 17. ¿Por qué este nombre con guión bajo no cumple con CLS?
- 18. ¿Existe alguna herramienta para verificar el cumplimiento de CLS?
- 19. clases públicas Java con clases privadas dependientes
- 20. ¿Para qué se usa la variable 'cls' en las clases de Python?
- 21. ¿Es esto posible en JSON?
- 22. ¿Es esto posible con sql?
- 23. ¿Qué es una convención de nomenclatura correcta para CLS para campos protegidos?
- 24. ¿Es una convención prefijar las clases privadas con guiones bajos?
- 25. 'matrices como argumentos atributo no es compatible con CLS' advertencia, pero no hay información de tipo dado
- 26. ¿Es posible resolver esto?
- 27. clases privadas en Objective C
- 28. Clases privadas anidadas
- 29. ¿Qué es packageContext en Intent # (Context packageContext, Class <?> cls)?
- 30. Java RMI con Scala, ¿es esto posible?
Los miembros privados, por definición, no pueden acceder a ninguna otra clase, incluidas las escritas en otros idiomas, por lo que no es necesario que cumplan con CLS. –