Sei sulla pagina 1di 17

CAPITULO 1 / MANUAL DE C#

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 soft are 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 programaci"n 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 We . $ara crear aplicaciones para la plataforma .NET! tanto servicios %eb como aplicaciones tradicionales &aplicaciones de consola! aplicaciones de ventanas! servicios de %indo s NT! etc.'! Microsoft ha publicado el denominado (it de desarrollo de soft are conocido como .NET !rame"or# $D%! que incluye las herramientas necesarias tanto para su desarrollo como para su distribuci"n y ejecuci"n y &is'al $t'(io.NET! que permite hacer todo la anterior desde una interfa) visual basada en ventanas. *mbas herramientas puede descargarse gratuitamente desde http+,, .msdn.microsoft.com,net! aunque la ltima s"lo est- disponible para subscriptores M./N 0niversal &los no subscriptores pueden pedirlo desde dicha direcci"n y se les enviargratis por correo ordinario' El concepto de Microsoft.NET tambi1n incluye al conjunto de nuevas aplicaciones que Microsoft y terceros han &o est-n' desarrollando para ser utili)adas en la plataforma .NET. Entre ellas podemos destacar aplicaciones desarrolladas por Microsoft tales como %indo s.NET! 2ailstorm! 3isual .tudio.NET! M.N.NET! 4ffice.NET! y los nuevos servidores para empresas de Microsoft &.56 .erver.NET! E7change.NET! etc.'

Common Language Runtime (CLR)

El Commo) La)*'a*e +')time &CL+' es el ncleo de la plataforma .NET. Es el motor encargado de gestionar la ejecuci"n de las aplicaciones para ella desarrolladas y a las que ofrece numerosos servicios que simplifican su desarrollo y favorecen su fiabilidad y seguridad. 6as principales caractersticas y servicios que ofrece el 869 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 !indo"s# en los $ue a algunos servicios se les accede a travs de llamadas a funciones globales definidas en %LLs y a otros a travs de objetos (objetos C&' en el caso de la familia !indo"s#

Modelo de programacin sencillo: Con el CLR desaparecen muc(os elementos complejos incluidos en los sistemas operativos actuales (registro de !indo"s )*+%s ,RE-*L.- +*n/no"n etc.# El CLR no es $ue abstraiga al programador de estos conceptos sino $ue son conceptos $ue no e0isten en la plataforma .1E.

Eliminacin del infierno de las DLLs : En la plataforma .1E. desaparece el problema conocido como 2infierno de las %LLs3 $ue se da en los sistemas operativos actuales de la familia !indo"s problema $ue consiste en $ue al sustituirse versiones viejas de %LLs compartidas por versiones nuevas puede $ue aplicaciones $ue fueron dise4adas para ser ejecutadas usando las viejas dejen de funcionar si las nuevas no son 5667 compatibles con las anteriores. En la plataforma .1E. las versiones nuevas de las %LLs pueden coe0istir con las viejas de modo $ue las aplicaciones dise4adas para ejecutarse usando las viejas podr8n seguir us8ndolas tras instalacin de las nuevas. Esto obviamente simplifica muc(o la instalacin y desinstalacin de soft"are.

E!ecucin multiplataforma: El CLR act9a como una m8$uina virtual encarg8ndose de ejecutar las aplicaciones dise4adas para la plataforma .1E.. Es decir cual$uier plataforma para la $ue e0ista una versin del CLR podr8 ejecutar cual$uier aplicacin .1E.. 'icrosoft (a desarrollado versiones del CLR para la mayor:a de las versiones de !indo"s: !indo"s ;< !indo"s ;= !indo"s 'E !indo"s 1. >.6 !indo"s ?666 !indo"s @A y !indo"s CE ($ue puede ser usado en CA*s $ue no sean de la familia 0=B# Aor otro lado 'icrosoft (a firmado un acuerdo con Corel para portar el CLR a Linu0 y tambin (ay terceros $ue est8n desarrollando de manera independiente versiones de libre distribucin del CLR para Linu0. As:mismo dado $ue la ar$uitectura del CLR est8 totalmente abierta es posible $ue en el futuro se dise4en versiones del mismo para otros sistemas operativos.

"ntegracin de lengua!es: %esde cual$uier lenguaje para el $ue e0ista un compilador $ue genere cdigo para la plataforma .1E. es posible utiliCar cdigo generado para la misma usando cual$uier otro lenguaje tal y como si de cdigo escrito usando el primero se tratase. 'icrosoft (a desarrollado un compilador de CD $ue genera cdigo de este tipo as: como versiones de sus compiladores de Eisual Fasic (Eisual Fasic.1E.# y CGG (CGG con e0tensiones gestionadas# $ue tambin lo generan y una versin del intrprete de H-cript (H-cript.1E.# $ue puede interpretarlo. La integracin de lenguajes esta $ue es posible escribir una clase en CD $ue (erede de otra escrita en Eisual Fasic.1E. $ue a su veC (erede de otra escrita en CGG con e0tensiones gestionadas.

#estin de memoria: El CLR incluye un recolector de $asura $ue evita $ue el programador tenga $ue tener en cuenta cu8ndo (a de destruir los objetos $ue dejen de serle 9tiles. Este recolector es una aplicacin $ue se activa cuando se $uiere crear alg9n objeto nuevo y se detecta $ue no $ueda memoria libre para (acerlo caso en $ue el recolector recorre la memoria din8mica asociada a la aplicacin detecta $u objetos (ay en ella $ue no puedan ser accedidos por el cdigo de la aplicacin y los elimina para limpiar la memoria de 2objetos basura3 y permitir la creacin de otros nuevos. )racias 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 in9tiles o solicitud de acceso a miembros de objetos ya destruidos.

%eguridad de tipos: El CLR facilita la deteccin de errores de programacin dif:ciles de localiCar comprobando $ue toda conversin de tipos $ue se realice durante la ejecucin de una aplicacin .1E. se (aga de modo $ue los tipos origen y destino sean compatibles.

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

Tratamiento de e'cepciones: En el CLR todo los errores $ue se puedan producir durante la ejecucin de una aplicacin se propagan de igual manera: mediante e0cepciones. Esto es muy diferente a como se ven:a (aciendo en los sistemas !indo"s (asta la aparicin de la plataforma .1E. donde ciertos errores se transmit:an mediante cdigos de error en formato !inI? otros mediante ,RE-*L.s y otros mediante e0cepciones.

El 869 permite que e7cepciones lan)adas desde c"digo para .NET escrito en un cierto lenguaje se puedan capturar en c"digo escrito usando otro lenguaje! e incluye mecanismos de depuraci"n que pueden saltar desde c"digo escrito para .NET en un determinado lenguaje a c"digo escrito en cualquier otro. $or ejemplo! se puede recorrer la pila de llamadas de una e7cepci"n aunque 1sta incluya m1todos definidos en otros m"dulos usando otros lenguajes. $oporte m'lti,ilo- El 869 es capa) de trabajar con aplicaciones divididas en mltiples hilos de ejecuci"n que pueden ir evolucionando por separado en paralelo o intercal-ndose! segn el nmero de procesadores de la m-quina sobre la que se ejecuten. 6as aplicaciones pueden lan)ar nuevos hilos! destruirlos! suspenderlos por un tiempo o hasta que les llegue una notificaci"n! enviarles notificaciones! sincroni)arlos! etc. Distri 'ci.) tra)spare)te- El 869 ofrece la infraestructura necesaria para crear objetos remotos y acceder a ellos de manera completamente transparente a su locali)aci"n real! tal y como si se encontrasen en la m-quina que los utili)a.
%eguridad a(an)ada: El CLR proporciona mecanismos para restringir la ejecucin de ciertos cdigos o los permisos asignados a los mismos seg9n su procedendecia o el usuario $ue los ejecute. Es decir puede no darse el mismo nivel de confianCa a cdigo procedente de +nternet $ue a cdigo instalado localmente o procedente de una red localJ puede no darse los mismos permisos a cdigo procedente de un determinado fabricante $ue a cdigo de otroJ y puede no darse los mismos permisos a un mismo cdigos seg9n el usuario $ue lo est ejecutando o seg9n el rol $ue ste desempe4e. Esto permite asegurar al administrador de un sistema $ue el cdigo $ue se est ejecutando no pueda poner en peligro la integridad de sus arc(ivos la del registro de !indo"s etc.

"nteropera$ilidad con cdigo antiguo: El CLR incorpora los mecanismos necesarios para poder acceder desde cdigo escrito para la plataforma .1E. 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 C&' como el acceso a funciones sueltas de %LLs pree0istentes (como la AA+ !inI?#

8omo se puede deducir de las caractersticas comentadas! el 869 lo que hace es gestionar la ejecuci"n de las aplicaciones diseadas para la plataforma .NET. $or esta ra)"n! al c"digo de estas aplicaciones se le suele llamar c.(i*o *estio)a(o! y al c"digo no escrito para ser ejecutado directamente en la plataforma .NET se le suele llamar c.(i*o )o *estio)a(o.

'icrosoft +ntermediate Language ('-+L#

Todos los compiladores que generan c"digo para la plataforma .NET no generan c"digo m-quina para 8$0s 7:; ni para ningn otro tipo de 8$0 concreta! sino que generan c"digo escrito en el lenguaje intermedio conocido como Microsoft <ntermediate 6enguage &M.<6' El 869 da a las aplicaciones las sensaci"n de que se est-n ejecutando sobre una m-quina virtual! y precisamente M.<6 es el c"digo m-quina de esa m-quina virtual. Es decir! M.<6 es el nico c"digo que es capa) de interpretar el 869! y por tanto cuando se dice que un compilador genera c"digo para la plataforma .NET lo que se est- diciendo es que genera M.<6. M.<6 ha sido creado por Microsoft tras consultar a numerosos especialistas en la escritura de compiladores y lenguajes tanto del mundo acad1mico como empresarial. Es un lenguaje de un nivel de abstracci"n mucho m-s alto que el de la mayora de los c"digos m-quina de las 8$0s e7istentes! e incluye instrucciones que permiten trabajar directamente con objetos &crearlos! destruirlos! iniciali)arlos! llamar a m1todos virtuales! etc.'! tablas y e7cepciones &lan)arlas! capturarlas y tratarlas' =a se coment" que el compilador de 8> compila directamente el c"digo fuente a M.<6! que Microsoft ha desarrollado nuevas versiones de sus lenguajes 3isual ?asic &3isual ?asic.NET' y 8@@ &8@@ con e7tensiones gestionadas' cuyos compiladores generan M.<6! y que ha desarrollado un int1rprete de A.cript &A.cript.NET' que genera c"digo M.<6. $ues bien! tambi1n hay numerosos terceros que han anunciado estar reali)ando versiones para la plataforma .NET de otros lenguajes como *$6! 8*M6! 8obol! Eiffel! Bortran! 2as(ell! Aava! Mercury! M6! Mondrian! 4beron! 4)! $ascal! $erl! $ython! 9$C! .cheme y .malltal(. 6a principal ventaja del M.<6 es que facilita la ejecuci"n multiplataforma y la integraci"n entre lenguajes al ser independiente de la 8$0 y proporcionar un formato comn para el c"digo m-quina generado por todos los compiladores que generen c"digo para .NET. .in embargo! dado que las 8$0s no pueden ejecutar directamente M.<6! antes de ejecutarlo habr- que convertirlo al c"digo nativo de la 8$0 sobre la que se vaya a ejecutar. /e esto se encarga un componente del 869 conocido como compilador A<T &AustD<nDTime' o jitter que va convirtiendo din-micamente el c"digo M.<6 a ejecutar en c"digo nativo segn sea necesario. Este jitter se distribuye en tres versiones+

!itter normal: Es el $ue se suele usar por defecto y slo compila el cdigo '-+L a cdigo nativo a medida $ue va siendo necesario pues as: se a(orra tiempo y memoria al evitarse tener $ue compilar innecesariamente cdigo $ue nunca se ejecute. Aara conseguir esto el cargador de clases del CLR sustituye inicialmente las llamadas a mtodos de las nuevas clases $ue vaya cargando por llamadas a funciones au0iliares (stubs# $ue se encarguen de compilar el verdadero cdigo del mtodo. *na veC compilado la llamada al stub es sustituida por una llamada directa al cdigo ya compilado con lo $ue posteriores llamadas al mismo no necesitar8n compilacin.

!itter econmico: Kunciona de forma similar al jitter normal solo $ue no realiCa ninguna optimiCacin de cdigo al compilar sino $ue traduce cada instruccin '-+L por su e$uivalente en el cdigo m8$uina sobre la $ue se ejecute. Esta especialmente pensado para ser usado en dispositivos empotrados $ue dispongan de poca potencia de CA* y poca memoria pues aun$ue genere cdigo m8s ineficiente es menor el tiempo y memoria $ue necesita para compilar. Es m8s para a(orrar memoria este jitter puede descargar cdigo ya compilado $ue lleve cierto tiempo sin ejecutarse y sustituirlo de nuevo por el stub apropiado. Aor estas raCones este es el jitter usado por defecto en !indo"s CE sistema operativo $ue se suele incluir en los dispositivos empotrados antes mencionados.

4tra utilidad del jitter econ"mico es que facilita la adaptaci"n de la plataforma .NET a nuevos sistemas porque es mucho m-s sencillo de implementar que el normal. /e este modo! gracias a 1l es posible desarrollar r-pidamente una versi"n del 869 que pueda ejecutar aplicaciones gestionadas aunque sea de una forma poco eficiente! y una ve) desarrollada es posible centrarse en desarrollar el jitter normal para optimi)ar la ejecuci"n de las mismas.

pre!itter: -e distribuye como una aplicacin en l:nea de comandos llamada ngen.exe mediante la $ue es posible compilar completamente cual$uier ejecutable o librer:a (cual$uier ensamblado en general aun$ue este concepto se ver8 m8s adelante# $ue contenga cdigo gestionado y convertirlo a cdigo nativo de modo $ue posteriores ejecuciones del mismo se (ar8n usando esta versin ya compilada y no se perder8 tiempo en (acer la compilacin din8mica.

6a actuaci"n de un jitter durante la ejecuci"n de una aplicaci"n gestionada puede dar la sensaci"n de hacer que 1sta se ejecute m-s lentamente debido a que ha de invertirse tiempo en las compilaciones din-micas. Esto es cierto! pero hay que tener en cuenta que es una soluci"n mucho m-s eficiente que la usada en otras plataformas como Aava! ya que en .NET cada c"digo no es interpretado cada ve) que se ejecuta sino que s"lo es compilado la primera ve) que se llama al m1todo al que pertenece. Es m-s! el hecho de que la compilaci"n se realice din-micamente permite que el jitter tenga acceso a mucha m-s informaci"n sobre la m-quina en que se ejecutar- la aplicaci"n del que tendra cualquier compilador tradicional! con lo que puede optimi)ar el c"digo para ella generado &por ejemplo! usando las instrucciones especiales del $entium <<< si la m-quina las admite! usando registros e7tra! incluyendo c"digo inline! etc.' *dem-s! como el recolector de basura de .NET mantiene siempre compactada la memoria din-mica las reservas de memoria se har-n m-s r-pido! sobre todo en aplicaciones que no agoten la memoria y! por tanto! no necesiten de una recolecci"n de basura. $or estas ra)ones! los ingenieros de Microsoft piensan que futuras versiones de sus jitters podr-n incluso conseguir que el c"digo gestionado se ejecute m-s r-pido que el no gestionado.

Metadatos

En la plataforma .NET se distinguen dos tipos de m.('los de c"digo compilado+ e/ec'ta les &e7tensi"n .e0e' y li rer1as (e e)lace (i)2mico &e7tensi"n .(ll generalmente' *mbos son ficheros que contienen definiciones de tipos de datos! y la diferencia entre ellos es que s"lo los primeros disponen de un m1todo especial que sirve de punto de entrada a partir del que es posible ejecutar el c"digo que contienen haciendo una llamada desde la lnea de comandos del sistema operativo. * ambos tipos de m"dulos se les suele llamar e/ec'ta les porta les &$E'! ya que su c"digo puede ejecutarse en cualquiera de los diferentes sistemas operativos de la familia %indo s para los que e7iste alguna versi"n del 869. El contenido de un m"dulo no s"lo M.<6! sino que tambi1n consta de otras dos -reas muy importantes+ la cabecera de 869 y los metadatos+ 6a ca ecera (e CL+ es un pequeo bloque de informaci"n que indica que se trata de un m"dulo gestionado e indica es la versi"n del 869 que necesita! cu-l es su firma digital! cu-l es su punto de entrada &si es un ejecutable'! etc. 6os meta(atos son un conjunto de datos organi)ados en forma de tablas que almacenan informaci"n sobre los tipos definidos en el m"dulo! los miembros de 1stos y sobre cu-les son los tipos e7ternos al m"dulo a los que se les referencia en el m"dulo. 6os metadatos de cada modulo los genera autom-ticamente el compilador al crearlo! y entre sus tablas se incluyen EFEG+ Descripci.)
Ta la

Module/ef

Type/ef

Method/ef

/efine las caractersticas del m"dulo. 8onsta de un nico elemento que almacena un identificador de versi"n de m"dulo &C0</ creado por el compilador' y el nombre de fichero que se dio al m"dulo al compilarlo &as este nombre siempre estar- disponible! aunque se renombre el fichero' /efine las caractersticas de los tipos definidos en el m"dulo. /e 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. /efine las caractersticas de los m1todos definidos en el m"dulo. /e cada m1todo se guarda su nombre! signatura &por cada par-metro se incluye una referencia

al elemento apropiado en la tabla $aram/ef'! modificadores y posici"n del m"dulo donde comien)a el c"digo M.<6 de su cuerpo. $aram/ef /efine las caractersticas de los par-metros definidos en el m"dulo. /e cada par-metro se guarda su nombre y modificadores. Bield/ef /efine las caractersticas de los campos definidos en el m"dulo. /e cada uno se almacena informaci"n sobre cu-l es su nombre! tipo y modificadores. $roperty/ef /efine las caractersticas de las propiedades definidas en el m"dulo. /e cada una se indica su nombre! tipo! modificadores y referencias a los elementos de la tabla Method/ef correspondientes a sus m1todos set,get. Event/ef /efine las caractersticas de los eventos definidos en el m"dulo. /e cada uno se indica su nombre! tipo! modificadores. y referencias a los elementos de la tabla Method/ef correspondientes a sus m1todos add,remove. *ssembly9e <ndica cu-les son los ensamblados e7ternos a los que se f referencia en el m"dulo. /e cada uno se indica cu-l es su nombre de fichero &sin e7tensi"n'! versi"n! idioma y marca de clave pblica. Module9ef <ndica cu-les son los otros m"dulos del mismo ensamblado a los que referencia el m"dulo. /e cada uno se indica cu-l es su nombre de fichero. Type9ef <ndica cu-les son los tipos e7ternos a los que se referencia en el m"dulo. /e cada uno se indica cu-l es su nombre y! segn donde est1n definidos! una referencia a la posici"n adecuada en la tabla *ssembly9ef o en la tabla Module9ef. Member9ef <ndican cu-les son los miembros definidos e7ternamente a los que se referencia en el m"dulo. Estos miembros pueden ser campos! m1todos! propiedades o eventosH y de cada uno de ellos se almacena informaci"n sobre su nombre y signatura! as como una referencia a la posici"n de la tabla Type9ef donde se almacena informaci"n relativa al tipo del que es miembro. Tabla E+ $rincipales tablas de metadatos N"tese que el significado de los metadatos es similar al de otras tecnologas previas a la plataforma .NET como lo son los ficheros </6. .in embargo! los metadatos tienen dos ventajas importantes sobre 1stas+ contiene m-s informaci"n y siempre se almacenan incrustados en el m"dulo al que describen! haciendo imposible la separaci"n entre ambos. *dem-s! como se ver- m-s adelante! es posible tanto consultar los metadatos de cualquier m"dulo a trav1s de las clases del espacio de nombres $3stem.+eflectio) de la ?86 como

aadirles informaci"n adicional mediante atri 'tos &se ver- m-s adelante'

Ensam$lados

0n e)sam la(o es una agrupaci"n l"gica de uno o m-s m"dulos o ficheros de recursos &ficheros .C<B! .2TM6! etc.' que se engloban bajo un nombre comn. 0n programa puede acceder a informaci"n o c"digo almacenados en un ensamblado sin tener porqu1 sabe cu-l es el fichero en concreto donde se encuentran! por lo que los ensamblados nos permiten abstraernos de la ubicaci"n fsica del c"digo que ejecutemos o de los recursos que usemos. $or ejemplo! podemos incluir todos los tipos de una aplicaci"n en un mismo ensamblado pero colocando los m-s frecuentemente usados en un cierto m"dulo y los menos usados en otro! de modo que s"lo se descarguen de <nternet los ltimos si es que se van a usar. Todo ensamblado contiene un ma)ifiesto! que son metadatos con informaci"n sobre las caractersticas del ensamblado. Este manifiesto puede almacenarse cualquiera de los m"dulos que formen el ensamblado o en uno especficamente creado para ello! caso 1ste ltimo necesario cuando es un e)sam la(o sat4lite &s"lo contiene recursos' 6as principales tablas incluidas en los manifiestos son las siguientes+ Ta la *ssembly/ef Descripci.) /efine las caractersticas del ensamblado. 8onsta de un nico elemento que almacena el nombre del ensamblado sin e7tensi"n! versi"n! idioma! clave pblica y tipo de algoritmo de dispersi"n usado para hallar los valores de dispersi"n de la tabla Bile/ef. /efine cu-les son los archivos que forman el ensamblado. /e cada uno se da su nombre y valor de dispersi"n. N"tese que s"lo el m"dulo que contiene el manifiesto sabr- qu1 ficheros que forman el ensamblado! pero el resto de ficheros del mismo no sabr-n si pertenecen o no a un ensamblado &no contienen metadatos que les indique si pertenecen a un ensamblado' /efine las caractersticas de los recursos incluidos en el m"dulo. /e cada uno se indica su nombre y modificadores de acceso. .i es un recurso incrustado se indica d"nde empie)a dentro del $E que lo contiene! y si es un fichero independiente

Bile/ef

Manifest9esource /ef

se indica cu-l es el elemento de la tabla Bile/ef correspondiente a dicho fichero. E7portedTypes/ef <ndica cu-les son los tipos definidos en el ensamblado y accesibles desde fuera del mismo. $ara ahorrar espacio s"lo recogen los que no pertene)can al m"dulo donde se incluye el manifiesto! y de cada uno se indica su nombre! la posici"n en la tabla Bile/ef del fichero donde se ha implementado y la posici"n en la tabla Type/ef correspondiente a su definici"n. *ssembly$rocceso <ndica en qu1 procesadores se puede ejecutar el r/ef ensamblado! lo que puede ser til saberlo si el ensamblado contiene m"dulos con c"digo nativo &podra hacerse usando 8@@ con e7tensiones gestionadas' .uele estar vaca! lo que indica que se puede ejecutar en cualquier procesadorH pero si estuviese llena! cada elemento indicara un tipo de procesador admitido segn el formato de identificadores de procesador del fichero %inNT.h incluido con 3isual .tudio.NET &por ejemplo! I:; J $entium! KKLL J *rquitectura <*;M! etc.' *ssembly4./ef <ndica bajo qu1 sistemas operativos se puede ejecutar el ensamblado! lo que puede ser til si contiene m"dulos con tipos o m1todos disponibles s"lo en ciertos sistemas. .uele estar vaca! lo que indica que se puede ejecutar en cualquier procesadorH pero si estuviese llena! indicara el identificador de cada uno de los sistemas admitidos siguiendo el formato del %inNT.h de 3isual .tudio.NET &por ejemplo! L J familia %indo s NO! E J familia %indo s NT! etc.' y el nmero de la versi"n del mismo a partir de la que se admite.
Ta la 5- $rincipales tablas de un manifiesto

$ara asegurar que no se haya alterado la informaci"n de ningn ensamblado se usa el criptosistema de clave pblica 9.*. 6o que se hace es calcular el c"digo de dispersi"n .2*DE del m"dulo que contenga el manifiesto e incluir tanto este valor cifrado con 9.* &firma (i*ital' como la clave pblica necesaria para descifrarlo en algn lugar del m"dulo que se indicar- en la cabecera de 869. 8ada ve) que se vaya a cargar en memoria el ensamblado se calcular- su valor de dispersi"n de nuevo y se comprobar- que es igual al resultado de descifrar el original usando su clave pblica. .i no fuese as se detectara que se ha adulterado su contenido.

$ara asegurar tambi1n que los contenidos del resto de ficheros que formen un ensamblado no hayan sido alterados lo que se hace es calcular el c"digo de dispersi"n de 1stos antes de cifrar el ensamblado y guardarlo en el elemento correspondiente a cada fichero en la tabla Bile/ef del manifiesto. El algoritmo de cifrado usado por defecto es .2*DE! aunque en este caso tambi1n se da la posibilidad de usar M/I. En ambos casos! cada ve) que se accede al fichero para acceder a un tipo o recurso se calcular- de nuevo su valor de dispersi"n y se comprobar- que coincida con el almacenado en Bile/ef. /ado que las claves pblicas son valores que ocupan muchos bytes &KLM: bits'! lo que se hace para evitar que los metadatos sean e7cesivamente grandes es no incluir en las referencias a ensamblados e7ternos de la tabla *ssembly9ef las claves pblicas de dichos ensamblados! sino s"lo los ;M ltimos bits resultantes de aplicar un algoritmo de dispersi"n a dichas claves. * este valor recortado se le llama marca (e clave p6 lica. 2ay dos tipos de ensamblados+ e)sam la(os priva(os y e)sam la(os comparti(os. 6os privados se almacenan en el mismo directorio que la aplicaci"n que los usa y s"lo puede usarlos 1sta! mientras que los compartidos se almacenan en un cac,4 (e e)sam la(o *lo al &C*8' y pueden usarlos cualquiera que haya sido compilada referenci-ndolos. 6os compartidos han de cifrase con 9.* ya que lo que los identifica es en el C*8 es su nombre &sin e7tensi"n' m-s su clave pblica! lo que permite que en el C*8 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! ra)"n por la que a los ensamblados as cifrados se les llama e)sam la(os (e )om re f'erte. 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 1stas tendr-n distintas claves pblicas. Tambi1n para evitar problemas! en el C*8 se pueden mantener mltiples versiones de un mismo ensamblado. *s! si una aplicaci"n fue compilada usando una cierta versi"n de un determinado ensamblado compartido! cuando se ejecute s"lo podr- hacer uso de esa versi"n del ensamblado y no de alguna otra m-s moderna que se hubiese instalado en el C*8. /e esta forma se soluciona el problema del i)fier)o (e las DLL comentado al principio del tema. En realidad es posible modificar tanto las polticas de bsqueda de ensamblados &por ejemplo! para buscar ensamblados privados fuera del directorio de la aplicaci"n' como la poltica de aceptaci"n de ensamblados compartidos &por ejemplo! para que se haga autom-ticamente uso de las nuevas versiones que se instalen de

/66s compartidas' incluyendo en el directorio de instalaci"n de la aplicaci"n un fichero de configuraci"n en formato OM6 con las nuevas reglas para las mismas. Este fichero ha de llamarse igual que el ejecutable de la aplicaci"n pero ha de tener e7tensi"n .cf*.

Li$rer*a de clase $ase (+CL)

6a 6ibrera de 8lase ?ase &?86' es una librera incluida en el .NET Framework formada por cientos de tipos de datos que permiten acceder a los servicios ofrecidos por el 869 y a las funcionalidades m-s frecuentemente usadas a la hora de escribir programas. *dem-s! a partir de estas clases prefabricadas el programador puede crear nuevas clases que mediante herencia e7tiendan su funcionalidad y se integren a la perfecci"n con el resto de clases de la ?86. $or ejemplo! implementando ciertos interfaces podemos crear nuevos tipos de colecciones que ser-n tratadas e7actamente igual que cualquiera de las colecciones incluidas en la ?86. Esta librera est- escrita en M.<6! por lo que puede usarse desde cualquier lenguaje cuyo compilador genere M.<6. * trav1s de las clases suministradas en ella es posible desarrollar cualquier tipo de aplicaci"n! desde las tradicionales aplicaciones de ventanas! consola o servicio de %indo s NT hasta los novedosos servicios %eb y p-ginas *.$.NET. Es tal la rique)a de servicios que ofrece que puede crearse lenguajes que care)can de librera de clases propia y s"lo usen la ?86 Dcomo 8>. /ado la amplitud de la ?86! ha sido necesario organi)ar las clases en ella incluida en espacios (e )om res que agrupen clases con funcionalidades similares. $or ejemplo! los espacios de nombres m-s usados son+ Espacio (e )om res .ystem Utili(a( (e los tipos co)tie)e (e (atos 7'e

Tipos muy frecuentemente usados! como los los tipos b-sicos! tablas! e7cepciones! fechas! nmeros aleatorios! recolector de basura! entrada,salida en consola! etc. 8olecciones de datos de uso comn como pilas! colas! listas! diccionarios! etc. Manipulaci"n de bases de datos. Borman la denominada arquitectura ADO.NET. Manipulaci"n de ficheros y otros flujos de datos. 9eali)aci"n de comunicaciones en red.

.ystem.8ollections .ystem./ata .ystem.<4 .ystem.Net

.ystem.9eflection

*cceso a los metadatos que acompaan a los m"dulos de c"digo.

.ystem.9untime.9emot *cceso a objetos remotos. ing .ystem..ecurity .ystem.Threading .ystem.%eb.0<.%eb8o ntrols .ystem.%informs *cceso a la poltica de seguridad en que se basa el 869. Manipulaci"n de hilos. 8reaci"n de interfaces de usuario basadas en ventanas para aplicaciones %eb. 8reaci"n de interfaces de usuario basadas en ventanas para aplicaciones est-ndar.

.ystem.OM6 *cceso a datos en formato OM6. Tabla P+ Espacios de nombres de la ?86 m-s usados

Common T,pe %,stem (CT%)

El Commo) T3pe $3stem &8T.' o .istema de Tipo 8omn es el conjunto de reglas que han de seguir las definiciones de tipos de datos para que el 869 las acepte. Es decir! aunque cada lenguaje gestionado disponga de sus propia sinta7is para definir tipos de datos! en el M.<6 resultante de la compilaci"n de sus c"digos fuente se ha de cumplir las reglas del 8T.. *lgunos ejemplos de estas reglas son+

Cada tipo de dato puede constar de cero o m8s miembros. Cada uno de estos miembros puede ser un campo un mtodo una propiedad o un evento.

1o puede (aber (erencia m9ltiple

y todo tipo de dato (a de (eredar directa o indirectamente de

%,stem.-$!ect.

Los modificadores de acceso admitidos son:

C.(i*o (es(e el 7'e es accesi le el Mo(ifica(or miem ro p' lic 8ualquier c"digo private 8"digo del mismo tipo de dato famil3 8"digo del mismo tipo de dato o de hijos de 1ste. assem l3 8"digo del mismo ensamblado famil3 a)( 8"digo del mismo tipo o de hijos de 1ste assem l3 ubicado en el mismo ensamblado famil3 or 8"digo del mismo tipo o de hijos de 1ste! assem l3 o c"digo ubicado en el mismo ensamblado Tabla M+ Modificadores de acceso a miembros admitidos por el 8T.

Common Language %pecification (CL%)

El Commo) La)*'a*e $pecificatio) &86.' o Especificaci"n del 6enguaje 8omn 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. 4bviamente! s"lo es necesario seguir estas reglas en las definiciones de tipos y miembros que sean accesibles e7ternamente! y no la en las de los privados. *dem-s! si no importa la interoperabilidad entre lenguajes tampoco es necesario seguirlas. * continuaci"n se listan algunas de reglas significativas del 86.+
$ool c.ar $,te s.ort int long float dou$le string y o$!ect 1tese pues $ue no todos los lenguajes tienen por$u admitir los tipos b8sicos enteros sin signo o el tipo decimal como lo (ace CD.
Los tipos de datos b8sicos admitidos son

Las tablas (an de tener una o m8s dimensiones y el n9mero de dimensiones de cada tabla (a de ser fijo. Adem8s (an de inde0arse empeCando a contar desde 6.

-e pueden definir tipos abstractos y tipos sellados. Los tipos sellados no pueden tener miembros abstractos.

%,stem.E'ception %,stem.Enum y los tipos por %,stem./alueT,pe.


Las e0cepciones (an de derivar de enumeraciones de

los delegados de valor $ue no

%,stem.Delegate
sean enumeraciones

las de

Los mtodos de acceso a propiedades en $ue se traduCcan las definiciones getLset de stas (an de llamarse de la forma

get01 y set01

respectivamente donde @ es el nombre de la propiedadJ los de acceso a indiCadores (an

de traducirse en mtodos

get0"tem y set"temJ y en el caso de los eventos

sus definiciones addLremove (an

de traducirse en mtodos de add01 y remo(e01.

En las definiciones de atributos slo pueden usarse enumeraciones o datos de los siguientes tipos:

%,stem.T,pe string c.ar $ool $,te s.ort int long float dou$le y o$!ect.

En un mismo 8mbito no se pueden definir varios identificadores cuyos nombres slo difieran en la capitaliCacin usada. %e este modo se evitan problemas al acceder a ellos usando lenguajes no sensibles a may9sculas.

Las enumeraciones no pueden implementar interfaces y todos sus campos (an de ser est8ticos y del mismo tipo. El tipo de los campos de una enumeracin slo puede ser uno de estos cuatro tipos b8sicos:

$,te s.ort int o

long.

Potrebbero piacerti anche