Vous êtes sur la page 1sur 4

Qu es Common Language Specification?

.NET Framework 1.1

Para poder interactuar completamente con otros objetos, sea cual sea el lenguaje en que se hayan implementado, los objetos deben exponer a los llamadores slo aquellas caractersticas
que sean comunes para todos los lenguajes con los que deben interoperar. Por este motivo, se ha definido Common Language Specification CLS, que es un conjunto de caractersticas de
lenguaje bsicas requeridas por la mayora de las aplicaciones. Las reglas de CLS definen un subconjunto del sistema de tipos comn, es decir, todas las reglas aplicables al sistema de tipos
comn se aplican a CLS, excepto cuando se definan reglas ms estrictas en CLS. CLS ayuda a mejorar y garantizar la interoperabilidad entre lenguajes mediante la definicin de un conjunto
de caractersticas en las que se pueden basar los programadores y que estn disponibles en una gran variedad de lenguajes. CLS tambin establece los requisitos de compatibilidad con
CLS; estos requisitos permiten determinar si el cdigo administrado cumple la especificacin CLS y hasta qu punto una herramienta dada admite la programacin de cdigo administrado
que utilice las caractersticas de CLS.

Si un componente slo utiliza las caractersticas de CLS en la API que expone a otro cdigo incluidas las clases derivadas, se garantiza que se puede obtener acceso al componente desde
cualquier lenguaje de programacin que admita CLS. Los componentes que cumplen las reglas de CLS y usan slo las caractersticas incluidas en CLS se conocen como componentes
compatibles con CLS.

La mayora de los miembros definidos por los tipos de la biblioteca de clases de .NET Framework son compatibles con CLS. Sin embargo, algunos tipos de la biblioteca de clases tienen uno
o ms miembros que no son compatibles con CLS. Estos miembros permiten el uso de caractersticas de lenguaje que no se encuentran en CLS. Los tipos y miembros que no son
compatibles con CLS se identifican como tales en la documentacin de referencia y, en todos los casos, existe una alternativa compatible con CLS. Para obtener ms informacin acerca de
los tipos de la biblioteca de clases de .NET Framework, vea Referencia de .NET Framework.

CLS se dise de manera que fuese lo suficientemente amplio como para incluir las construcciones de lenguaje que normalmente necesitan los programadores y lo suficientemente
pequeo como para que todos los lenguajes pudieran admitirlo. Adems, se ha excluido de CLS cualquier construccin de lenguaje de la que no se puede verificar rpidamente la
seguridad de tipos del cdigo, de manera que todos los lenguajes compatibles con CLS pueden generar cdigo que es posible comprobar. Para obtener ms informacin sobre la
comprobacin de la seguridad de tipos, vea Compilacin Justintime.

En la tabla siguiente, se resumen las caractersticas que se incluyen en CLS y se indica si cada caracterstica se aplica a programadores y compiladores Todos o slo a compiladores. Se
pretende que sea informativa, pero no detallada. Para obtener informacin detallada, vea la especificacin de Common Language Infrastructure, Partition I, que se encuentra en el
directorio Gua para desarrolladores de herramientas que se instala con Microsoft .NET Framework SDK.

Caracterstica Se aplica a Descripcin

General

Todos Las reglas de CLS se aplican slo a las partes de un tipo que se expongan fuera del ensamblado que realiza
Visibilidad la definicin.

Todos Los campos y mtodos static globales no son compatibles con CLS.
Miembros globales

Nombres

Todos Los compiladores de lenguaje compatibles con CLS deben seguir las reglas del anexo 7 del informe tcnico
Caracteres y maysculas 15 del estndar Unicode 3.0, que controla el conjunto de caracteres que pueden iniciar e incluirse en los
identificadores. Este estndar est disponible en www.unicode.org/unicode/reports/tr15/tr1518.html.
Para que dos identificadores se consideren distintos, deben diferenciarse por algo ms que el uso de
maysculas o minsculas.

Compiladores Los compiladores de lenguajes compatibles con CLS proporcionan un mecanismo para hacer referencia a
Palabras clave identificadores que coinciden con palabras clave. Los compiladores de lenguajes compatibles con CLS
proporcionan un mecanismo para definir y reemplazar los mtodos virtuales por nombres que son palabras
clave en el lenguaje.

Todos Todos los nombres de un mbito compatible con CLS deben ser distintos, incluso cuando los nombres sean
Exclusividad para dos clases de miembros diferentes, excepto cuando los nombres son idnticos y se resuelven
mediante sobrecarga. Por ejemplo, CLS no permite que un tipo nico use el mismo nombre para un
mtodo y un campo.

Todos Todos los tipos devueltos y los tipos de parmetros que aparecen en un prototipo de tipo o miembro
Prototipos deben ser compatibles con CLS.

Tipos

Todos La biblioteca de clases de .NET Framework incluye tipos que se corresponden con los tipos de datos
Tipos primitivos primitivos que usan los compiladores. Entre estos tipos, los siguientes son compatibles con CLS: Byte, Int16,
Int32, Int64, Single, Double, Boolean, Char, Decimal, IntPtr y String. Para obtener ms informacin sobre
estos tipos, vea la tabla de tipos en Biblioteca de clases de .NET Framework.

Todos Los tipos de valor encuadrados tipos de valor que se han convertido en objetos no son parte de CLS. En
Tipos encuadrados su lugar, utilice System.Object, System.ValueType o System.Enum, segn corresponda.

Todos Las declaraciones de tipos y miembros no deben contener tipos que sean menos visibles o accesibles que
Visibilidad el tipo o miembro que se va a declarar.

Compiladores Los compiladores de lenguajes compatibles con CLS deben incluir sintaxis para el caso de que un tipo nico
Mtodos de interfaz implemente dos interfaces y cada una de esas interfaces requiera la definicin de un mtodo con el mismo
nombre y el mismo prototipo. Tales mtodos se deben considerar distintos y no necesitan tener la misma
implementacin.

Todos Los miembros individuales de interfaces y clases abstractas compatibles con CLS deben definirse para ser
Cierre compatibles con CLS.

Todos Para poder tener acceso a datos de instancias heredadas, un constructor debe llamar al constructor de la
Invocacin de constructores clase base.

Todos Las referencias a tipos no son compatibles con CLS. Una referencia a un tipo es una construccin especial
Referencias a tipos que contiene una referencia a un objeto y una referencia a un tipo. Las referencias a tipos permiten que
Common Language Runtime proporcione compatibilidad con los estilos de C++ a los mtodos que tienen
un nmero variable de argumentos.

Miembros de tipos

Todos Se permite la sobrecarga de propiedades indizadas, mtodos y constructores; no se deben sobrecargar


Sobrecarga campos y eventos.
Las propiedades no se deben sobrecargar por tipo es decir, por el tipo devuelto de su mtodo Get, pero
se pueden sobrecargar con nmeros o tipos de ndices diferentes.

Los mtodos se pueden sobrecargar nicamente en funcin del nmero y de los tipos de sus parmetros.

La sobrecarga de operadores no se incluye en CLS. Sin embargo, CLS proporciona directrices sobre cmo
incluir nombres tiles como Add y cmo establecer un bit en los metadatos. Se recomienda que los
compiladores que decidan incluir la sobrecarga de operadores sigan estas directrices, aunque no estn
obligados a ello.

Todos Los campos y los tipos anidados deben distinguirse nicamente por comparacin de identificador. Los
Exclusividad de miembros de mtodos, las propiedades y los eventos que tengan el mismo nombre por comparacin de identificador
sobrecarga deben distinguirse por algo ms que el tipo devuelto.

Todos Si op_Implicit u op_Explicit se sobrecarga sobre el tipo devuelto, se debe incluir una forma alternativa
Operadores de conversin para proporcionar la conversin.

Mtodos

Todos La accesibilidad no se debe cambiar al reemplazar los mtodos heredados, excepto cuando se reemplace
Accesibilidad de los mtodos un mtodo heredado a partir de un ensamblado diferente con accesibilidad FamilyOrAssembly. En este
reemplazados caso, el reemplazo debe tener accesibilidad Family.

Todos La nica convencin de llamada admitida por CLS es la convencin de llamada administrada estndar; no
Listas de argumentos se permiten las listas de argumentos de longitud variable. Use la palabra clave ParamArray de Microsoft
Visual Basic y la palabra clave params de C# para permitir un nmero variable de argumentos.

Propiedades

Compiladores Los mtodos Get y Set que implementan los mtodos de una propiedad se marcan con el identificador
Metadatos de descriptor de mdSpecialName en los metadatos.
acceso

Todos La accesibilidad de la propiedad y la de sus descriptores de acceso debe ser idntica.


Accesibilidad del descriptor
de acceso

Todos La propiedad y sus descriptores de acceso deben ser static, virtual o instance.
Modificadores

Todos Las propiedades deben seguir los patrones de nombres especficos. Para una propiedad denominada
Nombres de descriptores de Name, el mtodo Get, si se define, se denominar get_Name y el mtodo Set, si se define, se denominar
acceso set_Name.

Todos El tipo de la propiedad es el tipo devuelto del mtodo Get y el tipo del ltimo argumento del mtodo Set.
Tipo devuelto y argumentos Los tipos de los parmetros de la propiedad son los tipos de los parmetros del mtodo Get y los tipos de
todos los parmetros del mtodo Set, excepto el ltimo. Todos estos tipos deben ser compatibles con CLS
y no pueden ser punteros administrados; no deben pasarse por referencia.

Eventos

Todos Los mtodos para agregar y quitar un evento deben estar ambos presentes o ausentes.
Mtodos de evento

Compiladores Los mtodos que implementen un evento deben marcarse con el identificador mdSpecialName en los
Metadatos de los mtodos de metadatos.
evento

Todos La accesibilidad de los mtodos para agregar, quitar y provocar un evento debe ser idntica.
Accesibilidad del descriptor
de acceso

Todos Los mtodos para agregar, quitar y provocar un evento deben ser static, virtual o instance.
Modificadores

Todos Los eventos deben seguir los patrones de nombres especficos. Para un evento denominado MyEvent, el
Nombres de los mtodos de mtodo Add, si se define, se denominar add_MyEvent, el mtodo Remove, si se define, se denominar
evento remove_MyEvent y el mtodo Raise se denominar raise_MyEvent.

Todos Los mtodos para agregar y quitar un evento deben tomar un parmetro cuyo tipo defina el tipo del
Argumentos evento, y ese tipo debe derivarse de System.Delegate.

Tipos de puntero

Todos Los tipos de puntero y los tipos de puntero a funcin no son compatibles con CLS.
Punteros

Interfaces

Todos Las interfaces compatibles con CLS no deben requerir la definicin de mtodos no compatibles con CLS
Prototipos de miembros para su implementacin.

Todos Las interfaces compatibles con CLS no pueden definir mtodos estticos ni pueden definir campos. Pueden
Modificadores de miembros definir propiedades, eventos y mtodos virtuales.

Tipos de referencia

Todos Para los tipos de referencia, se llama a los constructores de objetos slo como parte de la creacin de un
Invocacin de constructores objeto, y los objetos se inicializan una sola vez.

Tipos de clase

Todos Una clase compatible con CLS debe heredarse de una clase compatible con CLS System.Object es
Herencia compatible con CLS.

Matrices

Todos Los elementos de matriz deben ser tipos compatibles con CLS.
Tipos de elemento

Todos Las matrices deben tener un nmero fijo de dimensiones, mayores que cero.
Dimensiones

Todos Todas las dimensiones de una matriz deben tener un lmite menor que cero.
Lmites

Enumeraciones

Todos El tipo subyacente de una enumeracin debe ser un tipo entero integrado en CLS Byte, Int16, Int32 o
Tipo subyacente Int64.

Compiladores La presencia del atributo personalizado System.FlagsAttribute en la definicin de una enumeracin indica
FlagsAttribute que la enumeracin debera tratarse como un conjunto de campos de bits indicadores, y la ausencia de
este atributo indica que el tipo debera verse como un grupo de constantes enumeradas. Se recomienda
que en los lenguajes se utilice FlagsAttribute o sintaxis especfica del lenguaje para distinguir estos dos
tipos de enumeraciones.

Todos Los campos static literales de una enumeracin deben ser del mismo tipo que el tipo de la enumeracin.
Miembros de campo

Excepciones

Todos Los objetos iniciados deben ser de tipo System.Exception o heredar de System.Exception.
Herencia

Atributos personalizados
Codificaciones de valores Compiladores Los compiladores compatibles con CLS deben tratar slo un subconjunto de las codificaciones de los
atributos personalizados la representacin de los atributos personalizados en los metadatos. Los nicos
tipos que pueden aparecer en estas codificaciones son: System.Type, System.String, System.Char,
System.Boolean, System.Byte, System.Int16, System.Int32, System.Int64, System.Single, System.Double y
cualquier tipo de enumeracin basado en un tipo entero base compatible con CLS.

Metadatos

Todos Los tipos cuya compatibilidad con CLS sea diferente de la del ensamblado en el que estn definidos deben
Compatibilidad con CLS marcarse de la forma correspondiente mediante System.CLSCompliantAttribute. De manera similar, los
miembros cuya compatibilidad con CLS sea diferente de la de su tipo tambin se deben marcar. Si un
miembro o tipo est marcado como no compatible con CLS, debe proporcionarse una alternativa
compatible con CLS.

Vea tambin
Interoperabilidad entre lenguajes | Informacin general acerca de la interoperabilidad entre lenguajes

2015 Microsoft

Vous aimerez peut-être aussi