Está en la página 1de 20

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Introduccin a .NET. Qu es .NET?


.Net es la nueva plataforma de desarrollo que ha lanzado al mercado Microsoft, y en la que ha estado trabajado durante los ltimos aos. Sin duda alguna va a ser uno de los entornos de desarrollo que reinen durante los prximos aos. Entonces .NET es un lenguaje de programacin?, No. Es mucho ms que eso, Microsoft .NET es un conjunto de tecnologas de software , compuesto de varios lenguajes de programacin que se ejecutan bajo el .NET Framework. Es adems un entorno completamente orientado a objetos y que es capaz de ejecutarse bajo cualquier plataforma. Vamos por partes. Podramos dividir el entorno .NET en las siguientes partes: .NET Framework, que es el entorno de trabajo de la plataforma .NET y que la engloba completamente. Toda la plataforma .NET forma parte de .NET framework. Lenguajes .NET. Destacan C# y VB.NET,y recientemente J#, aunque existen ms lenguajes y con toda seguridad surgirn nuevos. El Common Runtime Language CRL, que es el motor de ejecucin comn a todos los lenguajes .NET. MSIL, Microsoft Intermedial language, es el lenguaje intermedio al que compilan las aplicaciones (Asemmblies) .NET. Este lenguaje intermedio es interpretado por el CRL en tiempo de ejecucin. CLS, common Language Specification, que engloban las pautas que deben cumplir los lenguajes .NET. Es est caracterstica la que va a permitir a otras compaas producir lenguajes compatibles con .NET. ADO.NET, es la nueva interfaz de bases de datos. No se trata de una evolucin de ADO, sino que se trata de una interfaz completamente nueva. ASP.NET, es la nueva tecnologa para pginas web dinmicas completamente integrada dentro del entorno .NET. Representa una autntica revolucin en el desarrollo Web (Internet e Intranet). Biblioteca de clases .NET, es el conjunto de clases que componen el .NET framework y que nos permiten realizar casi cualquier tarea de una manera fcil y rpida.

.NET FrameWork

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

.NET FrameWork es el corazn de la tecnologa .NET. Es el marco de trabajo y ejecucin comn a toda la tecnologa .NET. Es por lo tanto un elemento indispensable dentro de la tecnologa .NET. Dentro del .NET framework estn integrados los lenguajes .NET, el CRL, el CLS, ADO.NET, ASP.NET ... En el momento de escribir esta pgina .NET soporta los siguientes lenguajes de programacin: C# C++ controlado VB.NET J# Delphi (s, Delphi de Borland). Todos ellos trabajan perfectamente integrados con un motor comn, el .NET framework, siendo C# el lenguaje principal, ya que es el nico que ha sido desarrollado especficamente para .NET. Gran parte de la biblioteca de clases que componen el framework estn escritas en C#. .Net FrameWork es el conjunto de espacios de trabajo y clases que sirven de base a los lenguajes .NET. Es la evolucin de las API de Windows y de la fundacin de clases de Microsoft MFC hacia la completa encapsulacin. Cualquier programa que desarrollemos utilizando la tecnologa .Net, independientemente del lenguaje utilizado, estar basado en .Net FrameWork. La mejor forma de entender esto es un ejemplo. Imaginemos los mens de cualquier aplicacin Windows que nos permiten acceder a las distintas opciones del programa, pues bien, en el mundo de la tecnologa .Net dichos mens son una clase perteneciente al .Net FrameWork. Esta clase es siempre la misma independientemente del lenguaje y entorno en el que nos encontremos, y la forma de trabajar con ella es la misma desde C#, VB.net o cualquier lenguaje .Net. Lo mismo ocurre con los botones, las imgenes, la forma de leer los archivos ... todo, absolutamente todo lo que hagamos en un lenguaje .NET est basado en el .Net FrameWork.

MSIL, CRL y el cdigo controlado.


Cuando escribimos un programa los hacemos en un determinado lenguaje que podramos llamar "humano"(aunque algunos se empeen en decir que los programadores no somos humanos). Es decir, podemos leer y entender un programa (o al menos intentarlo) a travs de un editor de texto, ya que este programa est escrito en lenguaje "humano" (utilizando nuestra letras y esas cosas). El

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

nico problema es que un ordenador no es capaz de entender nuestro programa, as que hay que traducirlo a su idioma. A este proceso se le conoce como compilacin. Como resultado del proceso de compilacin obtenemos el programa ejecutable en cdigo mquina, que entiende el ordenador pero no el "humano"(si alguien lo entiende no es humano, aqu s). Segn la arquitectura del procesador, el sistema operativo, etc.... este cdigo es diferente y un programa que se ejecuta correctamente en un entorno Windows no funciona en Macintosh o UNIX. Es decir el programa slo funciona para la plataforma para la que fue diseado. Este no es el proceso que ocurre en .NET. Cuando compilamos un programa escrito en cualquiera de los lenguajes .Net no se compila hacia cdigo mquina nativo, sino que se hace hacia MSIL (Microsoft Intermediate Language), este MSIL es un lenguaje intermedio y universal. Cuando compilo un programa escrito en C# o en VB.Net ambos generan MSIL, con ciertas diferencias pero MSIL. Este cdigo ser interpretado posteriormente por un intrprete, el CRL. De este modo conseguimos que un programa escrito en .NET funcione en cualquier plataforma existente, incluso en plataformas futuras, slo necesitamos construir el intrprete apropiado. El MSIL es independiente del procesador, de la plataforma de desarrollo y de la plataforma de ejecucin. El MSIL es parte del .Net FrameWork. Llegados a este punto tenemos nuestro programa compilado a MSIL, pero el programa no funciona, ya que el procesador slo entiende su propio cdigo mquina nativo, y MSIL no lo es. Es entonces cuando aparece el CRL (Common Language Runtime), o motor de ejecucin comn, que lo que hace es servir de traductor entre el MSIL y el cdigo mquina nativo. Cuando ejecutamos un programa el CRL se encarga de compilar a cdigo nativo dicho programa y ejecutarlo. A este tipo de compiladores se les conoce como compiladores JIT(Just In Time). Si alguno de vosotros conoce Java abra gritado plagio, esto es el ByteCode!. No exactamente ... cambian ... los nombres. Tericamente el CRL interpreta MSIL mucho mejor de lo que lo hace Java con el ByteCode y existen ciertas diferencias en la arquitectura interna, el CRL nicamente compila a cdigo nativo la parte necesaria en cada momento durante la ejecucin mientras que Java compila el programa completo, pero .... De este modo podemos ejecutar nuestro programa sobre cualquier mquina, siempre y cuando exista una versin del .Net FrameWork y del CRL apropiada. Al cdigo que se ejecuta bajo la batuta del CRL se le conoce como cdigo contralado. Nota tcnica. Los lenguajes .Net no son compilados , ya que no generan cdigo nativo, ni interpretados, ya que compilan cdigo MSIL, son lenguajes evaluados.

Tipos comunes entre lenguajes .NET. CLS y CTS.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Para que todo esto sea posible Microsoft ha introducido ciertas restricciones a la hora de disear los lenguajes de programacin y en la forma de programar. La especificacin comn de lenguajes CLS hace posible que cualquier fabricante de software genere herramientas compatibles con .NET. De esta forma existen versiones .NET de Delphi y otros lenguajes ajenos a Microsoft. Dentro del CLS destaca especialmente el CTS (Common Type System), que es una especificacin que define como el CRL utiliza y administra los tipos de datos. Bsicamente es una relacin entre los distintos tipos de datos que proporciona cada lenguaje. La consecuencia inmediata del CTS es que dentro de un mismo proyecto .NET podemos utilizar varios lenguajes .NET.

Assemblies
Un proyecto .NET no genera un ejecutable tal y como lo conocemos. Un proyecto .NET genera Assemblies. Un assemblie es la unidad ejecutable de cualquier programa .NET, pero no se limita al cdigo compilado sino que tambin incluye lo que se ha dado en llamar el manifiesto. El manifiesto es un listado de las libreras (dll) y los controles (ocx) que son necesarios para que la aplicacin funcione. Este listado contiene el nmero de versin necesario para que la aplicacin funcione correctamente, impidiendo que la instalacin posterior de un programa afecte a nuestro ejecutable. Con esta tcnica Microsoft pretende poner fin al ya maldito infierno de las dll. El tiempo dir si lo consiguen.

Microsoft .NET
Microsoft.NET es el conjunto de nuevas tecnologas en las que Microsoft ha estado trabajando durante los ltimos aos con el objetivo de obtener una plataforma sencilla y potente para distribuir el software en forma de servicios que puedan ser suministrados remotamente y que puedan comunicarse y combinarse unos con otros de manera totalmente independiente de la plataforma, lenguaje de programacin y modelo de componentes con los que hayan sido desarrollados. sta es la llamada plataforma .NET, y a los servicios antes comentados se les denomina servicios Web.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Para crear aplicaciones para la plataforma .NET, tanto servicios Web como aplicaciones tradicionales (aplicaciones de consola, aplicaciones de ventanas, servicios de Windows NT, etc.), Microsoft ha publicado el denominado kit de desarrollo de software conocido como .NET Framework SDK, que incluye las herramientas necesarias tanto para su desarrollo como para su distribucin y ejecucin y Visual Studio.NET, que permite hacer todo la anterior desde una interfaz visual basada en ventanas. Ambas herramientas pueden descargarse gratuitamente desde
http://www.msdn.microsoft.com/net, aunque la ltima slo est disponible para subscriptores MSDN

Universal (los no subscriptores pueden pedirlo desde dicha direccin y se les enviar gratis por correo ordinario) El concepto de Microsoft.NET tambin incluye al conjunto de nuevas aplicaciones que Microsoft y terceros han (o estn) desarrollando para ser utilizadas en la plataforma .NET. Entre ellas podemos destacar aplicaciones desarrolladas por Microsoft tales como Windows.NET, Hailstorm, Visual Studio.NET, MSN.NET, Office.NET, y los nuevos servidores para empresas de Microsoft (SQL Server.NET, Exchange.NET, etc.)

Common Language Runtime (CLR)


El Common Language Runtime (CLR) es el ncleo de la plataforma .NET. Es el motor encargado de gestionar la ejecucin de las aplicaciones para ella desarrolladas y a las que ofrece numerosos servicios que simplifican su desarrollo y favorecen su fiabilidad y seguridad. Las principales caractersticas y servicios que ofrece el CLR son: Modelo de programacin consistente: A todos los servicios y facilidades ofrecidos por el CLR se accede de la misma forma: a travs de un modelo de programacin orientado a objetos. Esto es una diferencia importante respecto al modo de acceso a los servicios ofrecidos por los algunos sistemas operativos actuales (por ejemplo, los de la familia Windows), en los que a algunos servicios se les accede a travs de llamadas a funciones globales definidas en DLLs y a otros a travs de objetos (objetos COM en el caso de la familia Windows) Modelo de programacin sencillo: Con el CLR desaparecen muchos elementos complejos incluidos en los sistemas operativos actuales (registro de Windows, GUIDs, HRESULTS, IUnknown, etc.) El CLR no es que abstraiga al programador de estos conceptos, sino que son conceptos que no existen en la plataforma .NET Eliminacin del infierno de las DLLs: En la plataforma .NET desaparece el problema conocido como infierno de las DLLs que se da en los sistemas operativos actuales de la familia Windows, problema que consiste en que al sustituirse versiones viejas de DLLs compartidas por

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

versiones nuevas puede que aplicaciones que fueron diseadas para ser ejecutadas usando las viejas dejen de funcionar si las nuevas no son 100% compatibles con las anteriores. En la plataforma .NET las versiones nuevas de las DLLs pueden coexistir con las viejas, de modo que las aplicaciones diseadas para ejecutarse usando las viejas podrn seguir usndolas tras instalacin de las nuevas. Esto, obviamente, simplifica mucho la instalacin y desinstalacin de software. Ejecucin multiplataforma: El CLR acta como una mquina virtual, encargndose de ejecutar las aplicaciones diseadas para la plataforma .NET. Es decir, cualquier plataforma para la que exista una versin del CLR podr ejecutar cualquier aplicacin .NET. Microsoft ha desarrollado versiones del CLR para la mayora de las versiones de Windows: Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP y Windows CE (que puede ser usado en CPUs que no sean de la familia x86) Por otro lado Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y tambin hay terceros que estn desarrollando de manera independiente versiones de libre distribucin del CLR para Linux. Asimismo, dado que la arquitectura del CLR est totalmente abierta, es posible que en el futuro se diseen versiones del mismo para otros sistemas operativos. Integracin de lenguajes: Desde cualquier lenguaje para el que exista un compilador que genere cdigo para la plataforma .NET es posible utilizar cdigo generado para la misma usando cualquier otro lenguaje tal y como si de cdigo escrito usando el primero se tratase. Microsoft ha desarrollado un compilador de C# que genera cdigo de este tipo, as como versiones de sus compiladores de Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) que tambin lo generan y una versin del intrprete de JScript (JScript.NET) que puede interpretarlo. La integracin de lenguajes es tal que es posible escribir una clase en C# que herede de otra escrita en Visual Basic.NET que, a su vez, herede de otra escrita en C++ con extensiones gestionadas. Gestin de memoria: El CLR incluye un recolector de basura que evita que el programador tenga que tener en cuenta cundo ha de destruir los objetos que dejen de serle tiles. Este recolector es una aplicacin que se activa cuando se quiere crear algn objeto nuevo y se detecta que no queda memoria libre para hacerlo, caso en que el recolector recorre la memoria dinmica asociada a la aplicacin, detecta qu objetos hay en ella que no puedan ser accedidos por el cdigo de la aplicacin, y los elimina para limpiar la memoria de objetos basura y permitir la creacin de otros nuevos. Gracias a este recolector se evitan errores de programacin muy comunes como intentos de borrado de objetos ya borrados, agotamiento de memoria por olvido de eliminacin de objetos intiles o solicitud de acceso a miembros de objetos ya destruidos.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Seguridad de tipos: El CLR facilita la deteccin de errores de programacin difciles de localizar comprobando que toda conversin de tipos que se realice durante la ejecucin de una aplicacin .NET se haga de modo que los tipos origen y destino sean compatibles.

Aislamiento de procesos: El CLR asegura que desde cdigo perteneciente a un determinado proceso no se pueda acceder a cdigo o datos pertenecientes a otro, lo que evita errores de programacin muy frecuentes e impide que unos procesos puedan atacar a otros. Esto se consigue gracias al sistema de seguridad de tipos antes comentado, pues evita que se pueda convertir un objeto a un tipo de mayor tamao que el suyo propio, ya que al tratarlo como un objeto de mayor tamao podra accederse a espacios en memoria ajenos a l que podran pertenecer a otro proceso. Tambin se consigue gracias a que no se permite acceder a posiciones arbitrarias de memoria.

Tratamiento de excepciones: En el CLR todo los errores que se puedan producir durante la ejecucin de una aplicacin se propagan de igual manera: mediante excepciones. Esto es muy diferente a como se vena haciendo en los sistemas Windows hasta la aparicin de la plataforma .NET, donde ciertos errores se transmitan mediante cdigos de error en formato Win32, otros mediante HRESULTs y otros mediante excepciones. El CLR permite que excepciones lanzadas desde cdigo para .NET escrito en un cierto lenguaje se puedan capturar en cdigo escrito usando otro lenguaje, e incluye mecanismos de depuracin que pueden saltar desde cdigo escrito para .NET en un determinado lenguaje a cdigo escrito en cualquier otro. Por ejemplo, se puede recorrer la pila de llamadas de una excepcin aunque sta incluya mtodos definidos en otros mdulos usando otros lenguajes.

Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en mltiples hilos de ejecucin que pueden ir evolucionando por separado en paralelo o intercalndose, segn el nmero de procesadores de la mquina sobre la que se ejecuten. Las aplicaciones pueden lanzar nuevos hilos, destruirlos, suspenderlos por un tiempo o hasta que les llegue una notificacin, enviarles notificaciones, sincronizarlos, etc.

Distribucin transparente: El CLR ofrece la infraestructura necesaria para crear objetos remotos y acceder a ellos de manera completamente transparente a su localizacin real, tal y como si se encontrasen en la mquina que los utiliza.

Seguridad avanzada: El CLR proporciona mecanismos para restringir la ejecucin de ciertos cdigos o los permisos asignados a los mismos segn su procedencia o el usuario que los ejecute. Es decir, puede no darse el mismo nivel de confianza a cdigo procedente de Internet

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

que a cdigo instalado localmente o procedente de una red local; puede no darse los mismos permisos a cdigo procedente de un determinado fabricante que a cdigo de otro; y puede no darse los mismos permisos a un mismo cdigos segn el usuario que lo est ejecutando o segn el rol que ste desempee. Esto permite asegurar al administrador de un sistema que el cdigo que se est ejecutando no pueda poner en peligro la integridad de sus archivos, la del registro de Windows, etc. Interoperabilidad con cdigo antiguo: El CLR incorpora los mecanismos necesarios para poder acceder desde cdigo escrito para la plataforma .NET a cdigo escrito previamente a la aparicin de la misma y, por tanto, no preparado para ser ejecutando dentro de ella. Estos mecanismos permiten tanto el acceso a objetos COM como el acceso a funciones sueltas de DLLs preexistentes (como la API Win32) El Common Language Runtime (CLR) es el ncleo de la plataforma .NET. Es el motor encargado de gestionar la ejecucin de las aplicaciones para ella desarrolladas y a las que ofrece numerosos servicios que simplifican su desarrollo y favorecen su fiabilidad y seguridad. Las principales caractersticas y servicios que ofrece el CLR son: Modelo de programacin consistente: A todos los servicios y facilidades ofrecidos por el CLR se accede de la misma forma: a travs de un modelo de programacin orientado a objetos. Esto es una diferencia importante respecto al modo de acceso a los servicios ofrecidos por los algunos sistemas operativos actuales (por ejemplo, los de la familia Windows), en los que a algunos servicios se les accede a travs de llamadas a funciones globales definidas en DLLs y a otros a travs de objetos (objetos COM en el caso de la familia Windows) Modelo de programacin sencillo: Con el CLR desaparecen muchos elementos complejos incluidos en los sistemas operativos actuales (registro de Windows, GUIDs, HRESULTS, IUnknown, etc.) El CLR no es que abstraiga al programador de estos conceptos, sino que son conceptos que no existen en la plataforma .NET Eliminacin del infierno de las DLLs: En la plataforma .NET desaparece el problema conocido como infierno de las DLLs que se da en los sistemas operativos actuales de la familia Windows, problema que consiste en que al sustituirse versiones viejas de DLLs compartidas por versiones nuevas puede que aplicaciones que fueron diseadas para ser ejecutadas usando las viejas dejen de funcionar si las nuevas no son 100% compatibles con las anteriores. En la plataforma .NET las versiones nuevas de las DLLs pueden coexistir con las viejas, de modo que las aplicaciones diseadas para ejecutarse usando las viejas podrn seguir usndolas tras

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

instalacin de las nuevas. Esto, obviamente, simplifica mucho la instalacin y desinstalacin de software. Ejecucin multiplataforma: El CLR acta como una mquina virtual, encargndose de ejecutar las aplicaciones diseadas para la plataforma .NET. Es decir, cualquier plataforma para la que exista una versin del CLR podr ejecutar cualquier aplicacin .NET. Microsoft ha desarrollado versiones del CLR para la mayora de las versiones de Windows: Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP y Windows CE (que puede ser usado en CPUs que no sean de la familia x86) Por otro lado Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y tambin hay terceros que estn desarrollando de manera independiente versiones de libre distribucin del CLR para Linux. Asimismo, dado que la arquitectura del CLR est totalmente abierta, es posible que en el futuro se diseen versiones del mismo para otros sistemas operativos. Integracin de lenguajes: Desde cualquier lenguaje para el que exista un compilador que genere cdigo para la plataforma .NET es posible utilizar cdigo generado para la misma usando cualquier otro lenguaje tal y como si de cdigo escrito usando el primero se tratase. Microsoft ha desarrollado un compilador de C# que genera cdigo de este tipo, as como versiones de sus compiladores de Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) que tambin lo generan y una versin del intrprete de JScript (JScript.NET) que puede interpretarlo. La integracin de lenguajes es tal que es posible escribir una clase en C# que herede de otra escrita en Visual Basic.NET que, a su vez, herede de otra escrita en C++ con extensiones gestionadas. Gestin de memoria: El CLR incluye un recolector de basura que evita que el programador tenga que tener en cuenta cundo ha de destruir los objetos que dejen de serle tiles. Este recolector es una aplicacin que se activa cuando se quiere crear algn objeto nuevo y se detecta que no queda memoria libre para hacerlo, caso en que el recolector recorre la memoria dinmica asociada a la aplicacin, detecta qu objetos hay en ella que no puedan ser accedidos por el cdigo de la aplicacin, y los elimina para limpiar la memoria de objetos basura y permitir la creacin de otros nuevos. Gracias a este recolector se evitan errores de programacin muy comunes como intentos de borrado de objetos ya borrados, agotamiento de memoria por olvido de eliminacin de objetos intiles o solicitud de acceso a miembros de objetos ya destruidos. Seguridad de tipos: El CLR facilita la deteccin de errores de programacin difciles de localizar comprobando que toda conversin de tipos que se realice durante la ejecucin de una aplicacin .NET se haga de modo que los tipos origen y destino sean compatibles.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Aislamiento de procesos: El CLR asegura que desde cdigo perteneciente a un determinado proceso no se pueda acceder a cdigo o datos pertenecientes a otro, lo que evita errores de programacin muy frecuentes e impide que unos procesos puedan atacar a otros. Esto se consigue gracias al sistema de seguridad de tipos antes comentado, pues evita que se pueda convertir un objeto a un tipo de mayor tamao que el suyo propio, ya que al tratarlo como un objeto de mayor tamao podra accederse a espacios en memoria ajenos a l que podran pertenecer a otro proceso. Tambin se consigue gracias a que no se permite acceder a posiciones arbitrarias de memoria.

Tratamiento de excepciones: En el CLR todo los errores que se puedan producir durante la ejecucin de una aplicacin se propagan de igual manera: mediante excepciones. Esto es muy diferente a como se vena haciendo en los sistemas Windows hasta la aparicin de la plataforma .NET, donde ciertos errores se transmitan mediante cdigos de error en formato Win32, otros mediante HRESULTs y otros mediante excepciones. El CLR permite que excepciones lanzadas desde cdigo para .NET escrito en un cierto lenguaje se puedan capturar en cdigo escrito usando otro lenguaje, e incluye mecanismos de depuracin que pueden saltar desde cdigo escrito para .NET en un determinado lenguaje a cdigo escrito en cualquier otro. Por ejemplo, se puede recorrer la pila de llamadas de una excepcin aunque sta incluya mtodos definidos en otros mdulos usando otros lenguajes. Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en mltiples hilos

de ejecucin que pueden ir evolucionando por separado en paralelo o intercalndose, segn el nmero de procesadores de la mquina sobre la que se ejecuten. Las aplicaciones pueden lanzar nuevos hilos, destruirlos, suspenderlos por un tiempo o hasta que les llegue una notificacin, enviarles notificaciones, sincronizarlos, etc. Distribucin transparente: El CLR ofrece la infraestructura necesaria para crear objetos

remotos y acceder a ellos de manera completamente transparente a su localizacin real, tal y como si se encontrasen en la mquina que los utiliza. Seguridad avanzada: El CLR proporciona mecanismos para restringir la ejecucin de ciertos cdigos o los permisos asignados a los mismos segn su procedencia o el usuario que los ejecute. Es decir, puede no darse el mismo nivel de confianza a cdigo procedente de Internet que a cdigo instalado localmente o procedente de una red local; puede no darse los mismos permisos a cdigo procedente de un determinado fabricante que a cdigo de otro; y puede no darse los mismos permisos a un mismo cdigos segn el usuario que lo est ejecutando o segn el rol que ste desempee. Esto permite asegurar al administrador de un sistema que el

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

cdigo que se est ejecutando no pueda poner en peligro la integridad de sus archivos, la del registro de Windows, etc. Interoperabilidad con cdigo antiguo: El CLR incorpora los mecanismos necesarios para poder acceder desde cdigo escrito para la plataforma .NET a cdigo escrito previamente a la aparicin de la misma y, por tanto, no preparado para ser ejecutando dentro de ella. Estos mecanismos permiten tanto el acceso a objetos COM como el acceso a funciones sueltas de DLLs preexistentes (como la API Win32) Como se puede deducir de las caractersticas comentadas, el CLR lo que hace es gestionar la ejecucin de las aplicaciones diseadas para la plataforma .NET. Por esta razn, al cdigo de estas aplicaciones se le suele llamar cdigo gestionado, y al cdigo no escrito para ser ejecutado directamente en la plataforma .NET se le suele llamar cdigo no gestionado.

MSIL - Microsoft Intermediate Language


Ninguno de los compiladores que generan cdigo para la plataforma .NET produce cdigo mquina para CPUs x86 ni para ningn otro tipo de CPU concreta, sino que generan cdigo escrito en el lenguaje intermedio conocido como Microsoft Intermediate Lenguage (MSIL) El CLR da a las aplicaciones la sensacin de que se estn ejecutando sobre una mquina virtual, y precisamente MSIL es el cdigo mquina de esa mquina virtual. Es decir, MSIL es el nico cdigo que es capaz de interpretar el CLR, y por tanto cuando se dice que un compilador genera cdigo para la plataforma .NET lo que se est diciendo es que genera MSIL. MSIL ha sido creado por Microsoft tras consultar a numerosos especialistas en la escritura de compiladores y lenguajes tanto del mundo acadmico como empresarial. Es un lenguaje de un nivel de abstraccin mucho ms alto que el de la mayora de los cdigos mquina de las CPUs existentes, e incluye instrucciones que permiten trabajar directamente con objetos (crearlos, destruirlos, inicializarlos, llamar a mtodos virtuales, etc.), tablas y excepciones (lanzarlas, capturarlas y tratarlas) Ya se coment que el compilador de C# compila directamente el cdigo fuente a MSIL, que Microsoft ha desarrollado nuevas versiones de sus lenguajes Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) cuyos compiladores generan MSIL, y que ha desarrollado un intrprete de JScript (JScript.NET) que genera cdigo MSIL. Pues bien, tambin hay numerosos terceros que han anunciado estar realizando versiones para la plataforma .NET de otros lenguajes como APL, CAML, Cobol, Eiffel, Fortran, Haskell, Java (J#), Mercury, ML, Mondrian, Oberon, Oz, Pascal, Perl, Python, RPG, Scheme y Smalltalk.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

La principal ventaja del MSIL es que facilita la ejecucin multiplataforma y la integracin entre lenguajes al ser independiente de la CPU y proporcionar un formato comn para el cdigo mquina generado por todos los compiladores que generen cdigo para .NET. Sin embargo, dado que las CPUs no pueden ejecutar directamente MSIL, antes de ejecutarlo habr que convertirlo al cdigo nativo de la CPU sobre la que se vaya a ejecutar. De esto se encarga un componente del CLR conocido como compilador JIT (Just-In-Time) o jitter que va convirtiendo dinmicamente el cdigo MSIL a ejecutar en cdigo nativo segn sea necesario. Este jitter se distribuye en tres versiones: jitter normal: Es el que se suele usar por defecto, y slo compila el cdigo MSIL a cdigo nativo a medida que va siendo necesario, pues as se ahorra tiempo y memoria al evitarse tener que compilar innecesariamente cdigo que nunca se ejecute. Para conseguir esto, el cargador de clases del CLR sustituye inicialmente las llamadas a mtodos de las nuevas clases que vaya cargando por llamadas a funciones auxiliares (stubs) que se encarguen de compilar el verdadero cdigo del mtodo. Una vez compilado, la llamada al stub es sustituida por una llamada directa al cdigo ya compilado, con lo que posteriores llamadas al mismo no necesitarn compilacin. jitter econmico: Funciona de forma similar al jitter normal solo que no realiza ninguna optimizacin de cdigo al compilar sino que traduce cada instruccin MSIL por su equivalente en el cdigo mquina sobre la que se ejecute. Este especialmente pensado para ser usado en dispositivos empotrados que dispongan de poca potencia de CPU y poca memoria, pues aunque genere cdigo ms ineficiente es menor el tiempo y memoria que necesita para compilar. Es ms, para ahorrar memoria este jitter puede descargar cdigo ya compilado que lleve cierto tiempo sin ejecutarse y sustituirlo de nuevo por el stub apropiado. Por estas razones, este es el jitter usado por defecto en Windows CE, sistema operativo que se suele incluir en los dispositivos empotrados antes mencionados. Otra utilidad del jitter econmico es que facilita la adaptacin de la plataforma .NET a nuevos sistemas porque es mucho ms sencillo de implementar que el normal. De este modo, gracias a l es posible desarrollar rpidamente una versin del CLR que pueda ejecutar aplicaciones gestionadas aunque sea de una forma poco eficiente, y una vez desarrollada es posible centrarse en desarrollar el jitter normal para optimizar la ejecucin de las mismas. prejitter: Se distribuye como una aplicacin en lnea de comandos llamada ngen.exe mediante la que es posible compilar completamente cualquier ejecutable o librera (cualquier ensamblado en general, aunque este concepto se ver ms adelante) que contenga cdigo gestionado y convertirlo a cdigo nativo, de modo que posteriores ejecuciones del mismo se harn usando esta versin ya compilada y no se perder tiempo en hacer la compilacin dinmica.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

La actuacin de un jitter durante la ejecucin de una aplicacin gestionada puede dar la sensacin de hacer que sta se ejecute ms lentamente debido a que ha de invertirse tiempo en las compilaciones dinmicas. Esto es cierto, pero hay que tener en cuenta que es una solucin mucho ms eficiente que la usada en otras plataformas como Java, ya que en .NET cada cdigo no es interpretado cada vez que se ejecuta sino que slo es compilado la primera vez que se llama al mtodo al que pertenece. Es ms, el hecho de que la compilacin se realice dinmicamente permite que el jitter tenga acceso a mucha ms informacin sobre la mquina en que se ejecutar la aplicacin del que tendra cualquier compilador tradicional, con lo que puede optimizar el cdigo para ella generado (por ejemplo, usando las instrucciones especiales del Pentium III si la mquina las admite, usando registros extra, incluyendo cdigo online, etc.) Adems, como el recolector de basura de .NET mantiene siempre compactada la memoria dinmica las reservas de memoria se harn ms rpido, sobre todo en aplicaciones que no agoten la memoria y, por tanto, no necesiten de una recoleccin de basura. Por estas razones, los ingenieros de Microsoft piensan que futuras versiones de sus jitters podrn incluso conseguir que el cdigo gestionado se ejecute ms rpido que el no gestionado.

Metadatos
En la plataforma .NET se distinguen dos tipos de mdulos de cdigo compilado: ejecutables (extensin .exe) y libreras de enlace dinmico (extensin .dll generalmente) Ambos son ficheros que contienen definiciones de tipos de datos, y la diferencia entre ellos es que slo los primeros disponen de un mtodo especial que sirve de punto de entrada a partir del que es posible ejecutar el cdigo que contienen haciendo una llamada desde la lnea de comandos del sistema operativo. A ambos tipos de mdulos se les suele llamar ejecutables portables (PE), ya que su cdigo puede ejecutarse en cualquiera de los diferentes sistemas operativos de la familia Windows para los que existe alguna versin del CLR. El contenido de un mdulo no es slo MSIL, sino que tambin consta de otras dos reas muy importantes: la cabecera de CLR y los metadatos: La cabecera de CLR es un pequeo bloque de informacin que indica que se trata de un mdulo gestionado e indica es la versin del CLR que necesita, cul es su firma digital, cul es su punto de entrada (si es un ejecutable), etc. Los metadatos son un conjunto de datos organizados en forma de tablas que almacenan informacin sobre los tipos definidos en el mdulo, los miembros de stos y sobre cules son los tipos externos al mdulo a los que se les referencia en el mdulo. Los metadatos de cada mdulo los genera automticamente el compilador al crearlo, y entre sus tablas se incluyen[1]:

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Tabla ModuleDef

Descripcin Define las caractersticas del mdulo. Consta de un nico elemento que almacena un identificador de versin de mdulo (GUID creado por el compilador) y el nombre de fichero que se dio al mdulo al compilarlo (as este nombre siempre estar disponible, aunque se renombre el fichero)

TypeDef

Define las caractersticas de los tipos definidos en el mdulo. De cada tipo se almacena su nombre, su tipo padre, sus modificadores de acceso y referencias a los elementos de las tablas de miembros correspondientes a sus miembros.

MethodDef

Define las caractersticas de los mtodos definidos en el mdulo. De cada mtodo se guarda su nombre, signatura (por cada parmetro se incluye una referencia al elemento apropiado en la tabla ParamDef), modificadores y posicin del mdulo donde comienza el cdigo MSIL de su cuerpo.

ParamDef

Define las caractersticas de los parmetros definidos en el mdulo. De cada parmetro se guarda su nombre y modificadores.

FieldDef

Define las caractersticas de los campos definidos en el mdulo. De cada uno se almacena informacin sobre cul es su nombre, tipo y modificadores.

PropertyDef

Define las caractersticas de las propiedades definidas en el mdulo. De cada una se indica su nombre, tipo, modificadores y referencias a los elementos de la tabla MethodDef correspondientes a sus mtodos set/get.

EventDef

Define las caractersticas de los eventos definidos en el mdulo. De cada uno se indica su nombre, tipo, modificadores. y referencias a los elementos de la tabla MethodDef correspondientes a sus mtodos add/remove.

AssemblyRef

Indica cules son los ensamblados externos a los que se referencia en el mdulo. De cada uno se indica cul es su nombre de fichero (sin extensin), versin, idioma y marca de clave pblica.

ModuleRef

Indica cules son los otros mdulos del mismo ensamblado a los que referencia el mdulo. De cada uno se indica cul es su nombre de fichero.

TypeRef

Indica cules son los tipos externos a los que se referencia en el mdulo. De cada uno se indica cul es su nombre y, segn donde estn definidos, una referencia a la posicin adecuada en la tabla AssemblyRef o en la tabla ModuleRef.

MemberRef

Indican cules son los miembros definidos externamente a los que se referencia en el mdulo. Estos miembros pueden ser campos, mtodos, propiedades o eventos; y de cada uno de ellos se almacena informacin sobre

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

su nombre y signatura, as como una referencia a la posicin de la tabla TypeRef donde se almacena informacin relativa al tipo del que es miembro.

Principales tablas de metadatos Ntese que el significado de los metadatos es similar al de otras tecnologas previas a la plataforma .NET como lo son los ficheros IDL. Sin embargo, los metadatos tienen dos ventajas importantes sobre stas: contiene ms informacin y siempre se almacenan incrustados en el mdulo al que describen, haciendo imposible la separacin entre ambos. Adems, como se ver ms adelante, es posible tanto consultar los metadatos de cualquier mdulo a travs de las clases del espacio de nombres System.Reflection de la BCL como aadirles informacin adicional mediante atributos.

Emsamblados - Assemblies.
Un ensamblado es una agrupacin lgica de uno o ms mdulos o ficheros de recursos (ficheros .GIF, .HTML, etc.) que se engloban bajo un nombre comn. Un programa puede acceder a informacin o cdigo almacenados en un ensamblado sin tener que conocer cul es el fichero en concreto donde se encuentran, por lo que los ensamblados nos permiten abstraernos de la ubicacin fsica del cdigo que ejecutemos o de los recursos que usemos. Por ejemplo, podemos incluir todos los tipos de una aplicacin en un mismo ensamblado pero colocando los ms frecuentemente usados en un cierto mdulo y los menos usados en otro, de modo que slo se descarguen de Internet los ltimos si es que se van a usar. Todo ensamblado contiene un manifiesto, que son metadatos con informacin sobre las caractersticas del ensamblado. Este manifiesto puede almacenarse en cualquiera de los mdulos que formen el ensamblado o en uno especficamente creado para ello, siendo lo ltimo necesario cuando slo contiene recursos (ensamblado satlite) Las principales tablas incluidas en los manifiestos son las siguientes: Tabla AssemblyDef Descripcin Define las caractersticas del ensamblado. Consta de un nico elemento que almacena el nombre del ensamblado sin extensin, versin, idioma, clave pblica y tipo de algoritmo de dispersin usado para hallar los valores de dispersin de la tabla FileDef.

UNIVERSIDAD TECNICA DE AMBATO


FileDef

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Define cules son los archivos que forman el ensamblado. De cada uno se da su nombre y valor de dispersin. Ntese que slo el mdulo que contiene el manifiesto sabr qu ficheros que forman el ensamblado, pero el resto de ficheros del mismo no sabrn si pertenecen o no a un ensamblado (no contienen metadatos que les indique si pertenecen a un ensamblado)

ManifestResourceDef

Define las caractersticas de los recursos incluidos en el mdulo. De cada uno se indica su nombre y modificadores de acceso. Si es un recurso incrustado se indica dnde empieza dentro del PE que lo contiene, y si es un fichero independiente se indica cul es el elemento de la tabla FileDef correspondiente a dicho fichero.

ExportedTypesDef

Indica cules son los tipos definidos en el ensamblado y accesibles desde fuera del mismo. Para ahorrar espacio slo recogen los que no pertenezcan al mdulo donde se incluye el manifiesto, y de cada uno se indica su nombre, la posicin en la tabla FileDef del fichero donde se ha implementado y la posicin en la tabla TypeDef correspondiente a su definicin.

AssemblyProccesorDef

Indica en qu procesadores se puede ejecutar el ensamblado, lo que puede ser til saberlo si el ensamblado contiene mdulos con cdigo nativo (podra hacerse usando C++ con extensiones gestionadas) Suele estar vaca, lo que indica que se puede ejecutar en cualquier procesador; pero si estuviese llena, cada elemento indicara un tipo de procesador admitido segn el formato de identificadores de procesador del fichero WinNT.h incluido con Visual Studio.NET (por ejemplo, 586 = Pentium, 2200 = Arquitectura IA64, etc.)

AssemblyOSDef

Indica bajo qu sistemas operativos se puede ejecutar el ensamblado, lo que puede ser til si contiene mdulos con tipos o mtodos disponibles slo en ciertos sistemas. Suele estar vaca, lo que indica que se puede ejecutar en cualquier procesador; pero si estuviese llena, indicara el identificador de cada uno de los sistemas admitidos siguiendo el formato del WinNT.h de Visual Studio.NET (por ejemplo, 0 = familia Windows 9X, 1 = familia Windows NT, etc.) y el nmero de la versin del mismo a partir de la que se admite.

Para asegurar que no se haya alterado la informacin de ningn ensamblado se usa el criptosistema de clave pblica RSA. Lo que se hace es calcular el cdigo de dispersin SHA-1 del mdulo que contenga el manifiesto e incluir tanto este valor cifrado con RSA (firma digital) como

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

la clave pblica necesaria para descifrarlo en algn lugar del mdulo que se indicar en la cabecera de CLR. Cada vez que se vaya a cargar en memoria el ensamblado se calcular su valor de dispersin de nuevo y se comprobar que es igual al resultado de descifrar el original usando su clave pblica. Si no fuese as se detectara que se ha adulterado su contenido. Para asegurar tambin que los contenidos del resto de ficheros que formen un ensamblado no hayan sido alterados lo que se hace es calcular el cdigo de dispersin de stos antes de cifrar el ensamblado y guardarlo en el elemento correspondiente a cada fichero en la tabla FileDef del manifiesto. El algoritmo de cifrado usado por defecto es SHA-1, aunque en este caso tambin se da la posibilidad de usar MD5. En ambos casos, cada vez que se accede al fichero para acceder a un tipo o recurso se calcular de nuevo su valor de dispersin y se comprobar que coincida con el almacenado en FileDef. Dado que las claves pblicas son valores que ocupan muchos bytes (2048 bits), lo que se hace para evitar que los metadatos sean excesivamente grandes es no incluir en las referencias a ensamblados externos de la tabla AssemblyRef las claves pblicas de dichos ensamblados, sino slo los 64 ltimos bits resultantes de aplicar un algoritmo de dispersin a dichas claves. A este valor recortado se le llama marca de clave pblica. Hay dos tipos de ensamblados: ensamblados privados y ensamblados compartidos. Los privados se almacenan en el mismo directorio que la aplicacin que los usa y slo puede usarlos sta, mientras que los compartidos se almacenan en un cach de ensamblado global (GAC) y pueden usarlos cualquiera que haya sido compilada referencindolos. Los compartidos han de cifrase con RSA ya que lo que los identifica es en el GAC es su nombre (sin extensin) ms su clave pblica, lo que permite que en el GAC puedan instalarse varios ensamblados con el mismo nombre y diferentes claves pblicas. Es decir, es como si la clave pblica formase parte del nombre del ensamblado, razn por la que a los ensamblados as cifrados se les llama ensamblados de nombre fuerte. Esta poltica permite resolver los conflictos derivados de que se intente instalar en un mismo equipo varios ensamblados compartidos con el mismo nombre pero procedentes de distintas empresas, pues stas tendrn distintas claves pblicas. Tambin para evitar problemas, en el GAC se pueden mantener mltiples versiones de un mismo ensamblado. As, si una aplicacin fue compilada usando una cierta versin de un determinado ensamblado compartido, cuando se ejecute slo podr hacer uso de esa versin del ensamblado y no de alguna otra ms moderna que se hubiese instalado en el GAC. De esta forma se soluciona el problema del infierno de las DLL comentado al principio del tema.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

En realidad es posible modificar tanto las polticas de bsqueda de ensamblados (por ejemplo, para buscar ensamblados privados fuera del directorio de la aplicacin) como la poltica de aceptacin de ensamblados compartidos (por ejemplo, para que se haga automticamente uso de las nuevas versiones que se instalen de DLLs compartidas) incluyendo en el directorio de instalacin de la aplicacin un fichero de configuracin en formato XML con las nuevas reglas para las mismas. Este fichero ha de llamarse igual que el ejecutable de la aplicacin pero ha de tener extensin .cfg.

La Librera de Clase Base (BCL)


La Librera de Clase Base (BCL) es una librera incluida en el .NET Framework formada por cientos de tipos de datos que permiten acceder a los servicios ofrecidos por el CLR y a las funcionalidades ms frecuentemente usadas a la hora de escribir programas. Adems, a partir de estas clases prefabricadas el programador puede crear nuevas clases que mediante herencia extiendan su funcionalidad y se integren a la perfeccin con el resto de clases de la BCL. Por ejemplo, implementando ciertos interfaces podemos crear nuevos tipos de colecciones que sern tratadas exactamente igual que cualquiera de las colecciones incluidas en la BCL. Esta librera est escrita en MSIL, por lo que puede usarse desde cualquier lenguaje cuyo compilador genere MSIL. A travs de las clases suministradas en ella es posible desarrollar cualquier tipo de aplicacin, desde las tradicionales aplicaciones de ventanas, consola o servicio de Windows NT hasta los novedosos servicios Web y pginas ASP.NET. Es tal la riqueza de servicios que ofrece que incluso es posible crear lenguajes que carezcan de librera de clases propia y slo se basen en la BCL -como C#. Dada la amplitud de la BCL, ha sido necesario organizar las clases en ella incluida en espacios de nombres que agrupen clases con funcionalidades similares. Por ejemplo, los espacios de nombres ms usados son: Espacio de nombres System Utilidad de los tipos de datos que contiene Tipos muy frecuentemente usados, como los tipos bsicos, tablas, excepciones, fechas, nmeros aleatorios, recolector de basura, entrada/salida en consola, etc. System.Collections Colecciones de datos de uso comn como pilas, colas, listas, diccionarios, etc. System.Data Manipulacin de bases de datos. Forman la denominada arquitectura ADO.NET.

UNIVERSIDAD TECNICA DE AMBATO


System.IO System.Net System.Reflection

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Manipulacin de ficheros y otros flujos de datos. Realizacin de comunicaciones en red. Acceso a los metadatos que acompaan a los mdulos de cdigo.

System.Runtime.Remoting System.Security System.Threading System.Web.UI.WebControls

Acceso a objetos remotos. Acceso a la poltica de seguridad en que se basa el CLR. Manipulacin de hilos. Creacin de interfaces de usuario basadas en ventanas para aplicaciones Web.

System.Windows.Forms

Creacin de interfaces de usuario basadas en ventanas para aplicaciones estndar.

System.XML

Acceso a datos en formato XML.

Common Language Specification (CLS)


El Common Language Specification (CLS) o Especificacin del Lenguaje Comn es un conjunto de reglas que han de seguir las definiciones de tipos que se hagan usando un determinado lenguaje gestionado si se desea que sean accesibles desde cualquier otro lenguaje gestionado. Obviamente, slo es necesario seguir estas reglas en las definiciones de tipos y miembros que sean accesibles externamente, y no la en las de los privados. Adems, si no importa la interoperabilidad entre lenguajes tampoco es necesario seguirlas. A continuacin se listan algunas de reglas significativas del CLS: Los tipos de datos bsicos admitidos son bool, char, byte, short, int, long, float, double, string y object Ntese pues que no todos los lenguajes tienen porqu admitir los tipos bsicos enteros sin signo o el tipo decimal como lo hace C#. Las tablas han de tener una o ms dimensiones, y el nmero de dimensiones de cada tabla ha de ser fijo. Adems, han de indexarse empezando a contar desde 0. Se pueden definir tipos abstractos y tipos sellados. Los tipos sellados no pueden tener miembros abstractos. Las excepciones han de derivar de System.Exception, los delegados de System.Delegate, las enumeraciones de System.Enum, y los tipos por valor que no sean enumeraciones de System.ValueType.

UNIVERSIDAD TECNICA DE AMBATO

SEXTO SEMESTRE

LENGUAJE DE PROGRAMACION II

Los mtodos de acceso a propiedades en que se traduzcan las definiciones get/set de stas han de llamarse de la forma get_X y set_X respectivamente, donde X es el nombre de la propiedad; los de acceso a indizadores han de traducirse en mtodos get_Item y set_Item; y en el caso de los eventos, sus definiciones add/remove han de traducirse en mtodos add_X y remove_X.

En las definiciones de atributos slo pueden usarse enumeraciones o datos de los siguientes tipos: System.Type, string, char, bool, byte, short, int, long, float, double y object.

En un mismo mbito no se pueden definir varios identificadores cuyos nombres slo difieran en la capitalizacin usada. De este modo se evitan problemas al acceder a ellos usando lenguajes no sensibles a maysculas.

Las enumeraciones no pueden implementar interfaces, y todos sus campos han de ser estticos y del mismo tipo. El tipo de los campos de una enumeracin slo puede ser uno de estos cuatro tipos bsicos: byte, short, int o long.

También podría gustarte