El Lenguaje de Programacic3b3n c

Embed Size (px)

Citation preview

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    1/261

    El lenguaje de programacin C# ndice

    INTRODUCCIN A LA OBRA ............................................................................................... 5

    REQUISITOSPREVIOSRECOMENDADOS.......................................................................................5ESTRUCTURADELAOBRA............................................................................................................5

    CONVENCIONES DENOTACINUTILIZADAS...............................................................................5

    TEMA 1: INTRODUCCIN A MICROSOFT.NET ............................................................... 8

    MICROSOFT.NET..........................................................................................................................8COMMON LANGUAGERUNTIME(CLR)......................................................................................8MICROSOFTINTERMEDIATELANGUAGE(MSIL).....................................................................11METADATOS.................................................................................................................................13ENSAMBLADOS.............................................................................................................................14LIBRERADECLASEBASE(BCL)...............................................................................................1!COMMONT"PES"STEM(CTS)..................................................................................................18COMMONLANGUAGESPECIFICATION(CLS)............................................................................18

    TEMA #: INTRODUCCIN A C$ ......................................................................................... #%

    ORIGEN"NECESIDADDEUNNUEVOLENGUA&E.......................................................................#%CARACTERSTICASDEC$...........................................................................................................#%ESCRITURADEAPLICACIONES....................................................................................................#5

    TEMA 3: EL PREPROCESADOR ......................................................................................... 34

    CONCEPTODEPREPROCESADOR................................................................................................34DIRECTIVASDEPREPROCESADO.................................................................................................34

    TEMA 4: ASPECTOS L'ICOS ........................................................................................... 4#

    COMENTARIOS.............................................................................................................................4#IDENTIFICADORES........................................................................................................................43PALABRASRESERVADAS..............................................................................................................43LITERALES...................................................................................................................................45OPERADORES...............................................................................................................................4!

    TEMA 5: CLASES ................................................................................................................... 54

    DEFINICINDECLASES...............................................................................................................54CREACINDEOB&ETOS...............................................................................................................5!ERENCIA"M'TODOSVIRTUALES............................................................................................*%LACLASEPRIMEGENIA: S"STEM.OB&ECT.................................................................................**POLIMORFISMO............................................................................................................................*+OCULTACINDEMIEMBROS.......................................................................................................!4MIEMBROSDETIPO.....................................................................................................................8%ENCAPSULACIN..........................................................................................................................8%

    TEMA *: ESPACIOS DE NOMBRES ................................................................................... 84

    Jos Antonio Gonzlez Seco Pgina 1

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    2/261

    El lenguaje de programacin C# ndice

    CONCEPTODEESPACIODENOMBRES........................................................................................84DEFINICINDEESPACIOSDENOMBRES.....................................................................................84IMPORTACINDEESPACIOSDENOMBRES.................................................................................85ESPACIODENOMBRESDISTRIBUIDOS........................................................................................8+

    TEMA !: VARIABLES " TIPOS DE DATOS ...................................................................... +1

    DEFINICINDEVARIABLES.........................................................................................................+1TIPOSDEDATOSB,SICOS...........................................................................................................+#TABLAS.........................................................................................................................................+4CADENASDETETO..................................................................................................................1%%CONSTANTES..............................................................................................................................1%5VARIABLESDESLOLECTURA.................................................................................................1%*ORDENDEINICIALIZACINDEVARIABLES..............................................................................1%!

    TEMA 8: M'TODOS ............................................................................................................ 1%+

    CONCEPTODEM'TODO............................................................................................................1%+DEFINICINDEM'TODOS.........................................................................................................1%+LLAMADAAM'TODOS..............................................................................................................11%TIPOSDEPAR,METROS. SINTAISDEDEFINICIN.................................................................111M'TODOSETERNOS................................................................................................................114CONSTRUCTORES.......................................................................................................................115DESTRUCTORES.........................................................................................................................1#1

    TEMA +: PROPIEDADES .................................................................................................... 1#5

    CONCEPTODEPROPIEDAD........................................................................................................1#5DEFINICINDEPROPIEDADES...................................................................................................1#5ACCESOAPROPIEDADES...........................................................................................................1#*IMPLEMENTACININTERNADEPROPIEDADES........................................................................1#!

    TEMA 1%: INDIZADORES ................................................................................................... 1#+

    CONCEPTODEINDIZADOR........................................................................................................1#+DEFINICINDEINDIZADOR.......................................................................................................1#+ACCESOAINDIZADORES...........................................................................................................13%

    IMPLEMENTACIN

    INTERNA

    DE

    INDIZADORES

    ........................................................................131

    TEMA 11: REDEFINICIN DE OPERADORES .............................................................. 133

    CONCEPTODEREDEFINICINDEOPERADOR..........................................................................133DEFINICINDEREDEFINICIONESDEOPERADORES.................................................................134REDEFINICIONESDEOPERADORESDECONVERSIN...............................................................138

    TEMA 1#: DELEGADOS " EVENTOS .............................................................................. 143

    CONCEPTODEDELEGADO.........................................................................................................143DEFINICINDEDELEGADOS.....................................................................................................143MANIPULACINDEOB&ETOSDELEGADOS...............................................................................145

    Jos Antonio Gonzlez Seco Pgina

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    3/261

    El lenguaje de programacin C# ndice

    LACLASES"STEM.MULTICASTDELEGATE.............................................................................148LLAMADASASNCRONAS...........................................................................................................14+IMPLEMENTACININTERNADELOSDELEGADOS...................................................................15#EVENTOS....................................................................................................................................154

    TEMA 13: ESTRUCTURAS ................................................................................................. 15!

    CONCEPTODEESTRUCTURA.....................................................................................................15!DIFERENCIASENTRECLASES"ESTRUCTURAS........................................................................15!BOING"UNBOING.................................................................................................................158CONSTRUCTORES.......................................................................................................................1*%

    TEMA 14: ENUMERACIONES ........................................................................................... 1*3

    CONCEPTODEENUMERACIN..................................................................................................1*3DEFINICINDEENUMERACIONES.............................................................................................1*3USODEENUMERACIONES..........................................................................................................1*5LACLASE S"STEM.ENUM.........................................................................................................1**

    TEMA 15: INTERFACES ..................................................................................................... 1*!

    CONCEPTODEINTERFAZ..........................................................................................................1*!DEFINICINDEINTERFACES.....................................................................................................1*!IMPLEMENTACINDEINTERFACES..........................................................................................1*+ACCESOAMIEMBROSDEUNAINTERFAZ.................................................................................1!#

    TEMA 1*: INSTRUCCIONES .............................................................................................. 1!5

    CONCEPTODEINSTRUCCIN....................................................................................................1!5INSTRUCCIONESB,SICAS..........................................................................................................1!5INSTRUCCIONESCONDICIONALES.............................................................................................1!*INSTRUCCIONESITERATIVAS....................................................................................................1!+INSTRUCCIONESDEECEPCIONES............................................................................................185INSTRUCCIONESDESALTO........................................................................................................1+3OTRASINSTRUCCIONES.............................................................................................................1+*

    TEMA 1!: ATRIBUTOS ....................................................................................................... #%#

    CONCEPTODEATRIBUTO..........................................................................................................#%#UTILIZACINDEATRIBUTOS....................................................................................................#%#DEFINICINDENUEVOSATRIBUTOS........................................................................................#%4LECTURADEATRIBUTOSENTIEMPODEE&ECUCIN..............................................................#%*ATRIBUTOSDECOMPILACIN..................................................................................................#1%

    TEMA 18: CDIGO INSEGURO ........................................................................................ #1#

    CONCEPTODECDIGOINSEGURO............................................................................................#1#COMPILACINDECDIGOSINSEGUROS..................................................................................#1#MARCACINDECDIGOSINSEGUROS.....................................................................................#13DEFINICINDEPUNTEROS........................................................................................................#14

    Jos Antonio Gonzlez Seco Pgina !

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    4/261

    El lenguaje de programacin C# ndice

    MANIPULACINDEPUNTEROS..................................................................................................#15OPERADORESRELACIONADOSCONCDIGOINSEGURO..........................................................#1+FI&ACINDEVARIABLESAPUNTADAS......................................................................................##1

    TEMA 1+: DOCUMENTACIN ML ................................................................................ ##4

    CONCEPTO"UTILIDADDELADOCUMENTACINML.........................................................##4INTRODUCCINAML............................................................................................................##4COMENTARIOSDEDOCUMENTACINML.............................................................................##*ETIQUETASRECOMENDADASPARADOCUMENTACINML ................................................##8GENERACINDEDOCUMENTACINML...............................................................................#33ESTRUCTURADELADOCUMENTACINML..........................................................................#3*SEPARACINENTREDOCUMENTACINML "CDIGOFUENTE..........................................#38

    TEMA #%: EL COMPILADOR DE C$ DE MICROSOFT ................................................. #4%

    INTRODUCCIN..........................................................................................................................#4%SINTAISGENERALDEUSODELCOMPILADOR........................................................................#4%OPCIONESDECOMPILACIN.....................................................................................................#4#ACCESOALCOMPILADORDESDEVISUALSTUDIO.NET.........................................................#55

    DOCUMENTACIN DE REFERENCIA ............................................................................ #58

    BIBLIOGRAFA............................................................................................................................#58INFORMACINENINTERNETSOBREC$...................................................................................#58PORTALES..................................................................................................................................#5+GRUPOSDENOTICIAS"LISTASDECORREO............................................................................#5+

    Jos Antonio Gonzlez Seco Pgina "

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    5/261

    El lenguaje de programacin C# ntroduccin a la o$ra

    Introduccin a la obra

    Requisitos previos recomendados

    En principio% para entender con &acilidad esta o$ra es recomenda$le estar &amiliarizadocon los conceptos $sicos de programacin orientada a o$jetos% en particular con loslenguajes de programacin C'' o Ja(a de los )ue C# deri(a*

    Sin em$argo% estos no son re)uisitos &undamentales para entenderla +a )ue cada (ez )ueen ella se introduce alg,n elemento del lenguaje se de&inen + e-plican los conceptos

    $sicos )ue permiten entenderlo* A,n as.% sigue siendo recomenda$le disponer de losre)uisitos antes mencionados para poder mo(erse con ma+or soltura por el li$ro +apro(ec/arlo al m-imo*

    Estructura de la obra

    0sicamente el eje central de la o$ra es el lenguaje de programacin C#% del )ue no slose descri$e su sinta-is sino )ue tam$in se intenta e-plicar cules son las razones )ue

    justi&ican las decisiones tomadas en su diseo + cules son los errores ms di&.ciles dedetectar )ue pueden producirse al desarrollar de aplicaciones con l* Sin em$argo% los2 temas utilizados para ello pueden descomponerse en tres grandes $lo)ues3

    B-/0 1: I206672 9 C$ .NET3 Antes de empezar a descri$ir el lenguajees o$ligatorio e-plicar el por)u de su e-istencia% + para ello es necesario antesintroducir la plata&orma *4E5 de 6icroso&t con la )ue est mu+ ligado* Ese es elo$jeti(o de los temas 1 + % donde se e-plican las caracter.sticas + conceptos

    $sicos de C# + *4E5% las no(edosas aportaciones de am$os + se introduce laprogramacin + compilacin de aplicaciones en C# con el t.pico 78ola 6undo9

    B-/0 #: D;67: Este $lo)ue constitu+e el grueso de lao$ra + est &ormado por los temas comprendidos entre el ! + el 1:* En ellos sedescri$en pormenorizadamente los aspectos del lenguaje mostrando ejemplos desu uso% e-plicando su por)u + a(isando de cules son los pro$lemas ms

    di&.ciles de detectar )ue pueden surgir al utilizarlos + cmo e(itarlos*

    B-/0 3: D;67

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    6/261

    El lenguaje de programacin C# ntroduccin a la o$ra

    Para a+udar a resaltar la in&ormacin cla(e se utilizan di&erentes con(enciones respectoa los tipos de letra usados para representar cada tipo de contenido* oman de 1 puntos de tamao% como es el caso de este prra&o*

    ?os &ragmentos de cdigo &uente se /an escrito usando la &uente Arial de 12puntos de tamao tal + como se muestra a continuacin3

    class HolaMundo{

    static void Main(){

    System.Console.WriteLine(Hola Mundo!);

    @

    Esta misma &uente es la )ue se usar desde las e-plicaciones cada (ez )ue se/aga re&erencia a alg,n elemento del cdigo &uente* Si adems dic/o elemento esuna pala$ra reser(ada del lenguaje o (iene prede&inido en la li$rer.a de *4E5% sunom$re se escri$ir en negrita para as. resaltar el carcter especial del mismo

    ?as re&erencias a te-tos de la inter&az del sistema operati(o nom$res de&ic/eros + directorios% te-to de la l.nea de comandos% etc* B se /an escrito usandola &uente Courier 4e= de 12 puntos de tamao* Por ejemplo3

    csc HolaMundo.cs

    Cuando adems este tipo de te-to se utilice para /acer re&erencia a elementosprede&inidos tales como e-tensiones de &ic/eros recomendadas o nom$res deaplicaciones incluidas en el SD% se escri$ir en negrita*

    Al descri$irse la sinta-is de de&inicin de los elementos del lenguaje se usar&uente Arial de 12 puntos de tamao + se representarn en cursi(a los elementosopcionales en la misma% en negrita los )ue de$an escri$irse tal cual% + sinnegrita + entre s.m$olos + F los )ue representen de te-to )ue de$a colocarseen su lugar* Por ejemplo% cuando se dice )ue una clase /a de de&inirse as.3

    class nom"reClase#

    {

    }

    ?o )ue se est diciendo es )ue /a de escri$irse la pala$ra reser(ada class%seguida de te-to )ue represente el nom$re de la clase a de&inir% seguido de unalla(e de apertura B% seguido opcionalmente de te-to )ue se corresponda conde&iniciones de miem$ros + seguido de una lla(e de cierre @B

    Si lo )ue se de&ine es la sinta-is de llamada a alguna aplicacin concreta%

    entonces la notacin )ue se usar es similar a la anterior slo )ue en (ez de&uente Arial se utilizar &uente Courier 4e= de 12 puntos de tamao*

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    7/261

    El lenguaje de programacin C# ntroduccin a la o$ra

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    8/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    TEMA 1: Introduccin a Microsoft.NET

    Microsoft.NET

    6icroso&t*4E5 es el conjunto de nue(as tecnolog.as en las )ue 6icroso&t /a estadotra$ajando durante los ,ltimos aos con el o$jeti(o de o$tener una plata&orma sencilla +

    potente para distri$uir el so&t=are en &orma de ser(icios )ue puedan ser suministradosremotamente + )ue puedan comunicarse + com$inarse unos con otros de maneratotalmente independiente de la plata&orma% lenguaje de programacin + modelo decomponentes con los )ue /a+an sido desarrollados* ESK?5S% KnIno=n% etc*B El C?> no es )ue a$straiga al

    http://www.msdn.microsoft.com/nethttp://www.msdn.microsoft.com/net
  • 8/13/2019 El Lenguaje de Programacic3b3n c

    9/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    programador de estos conceptos% sino )ue son conceptos )ue no e-isten en laplata&orma *4E5

    E-7?729672 - 72@72 -9; DLL;H: En la plata&orma *4E5 desaparece elpro$lema conocido como Nin&ierno de las ??sO )ue se da en los sistemas

    operati(os actuales de la &amilia Hindo=s% pro$lema )ue consiste en )ue alsustituirse (ersiones (iejas de ??s compartidas por (ersiones nue(as puede)ue aplicaciones )ue &ueron diseadas para ser ejecutadas usando las (iejasdejen de &uncionar si las nue(as no son 122 compati$les con las anteriores* Enla plata&orma *4E5 las (ersiones nue(as de las ??s pueden coe-istir con las(iejas% de modo )ue las aplicaciones diseadas para ejecutarse usando las (iejas

    podrn seguir usndolas tras instalacin de las nue(as* Esto% o$(iamente%simpli&ica muc/o la instalacin + desinstalacin de so&t=are*

    E>60672 ?0-7 act,a como una m)uina (irtual%encargndose de ejecutar las aplicaciones diseadas para la plata&orma *4E5* Esdecir% cual)uier plata&orma para la )ue e-ista una (ersin del C?> podrejecutar cual)uier aplicacin *4E5* 6icroso&t /a desarrollado (ersiones delC?> para la ma+or.a de las (ersiones de Hindo=s3 Hindo=s :Q% Hindo=s :R%Hindo=s 6E% Hindo=s 45 "*2% Hindo=s 222% Hindo=s P + Hindo=s CE)ue puede ser usado en CPKs )ue no sean de la &amilia -RTB Por otro lado6icroso&t /a &irmado un acuerdo con Corel para portar el C?> a ?inu- +tam$in /a+ terceros )ue estn desarrollando de manera independiente (ersionesde li$re distri$ucin del C?> para ?inu-* As.mismo% dado )ue la ar)uitecturadel C?> est totalmente a$ierta% es posi$le )ue en el &uturo se diseen (ersionesdel mismo para otros sistemas operati(os*

    I2=9672 -2=09>;: esde cual)uier lenguaje para el )ue e-ista uncompilador )ue genere cdigo para la plata&orma *4E5 es posi$le utilizar cdigogenerado para la misma usando cual)uier otro lenguaje tal + como si de cdigoescrito usando el primero se tratase* 6icroso&t /a desarrollado un compilador deC# )ue genera cdigo de este tipo% as. como (ersiones de sus compiladores de;isual 0asic ;isual 0asic*4E5B + C'' C'' con e-tensiones gestionadasB )uetam$in lo generan + una (ersin del intrprete de JScript JScript*4E5B )ue

    puede interpretarlo* ?a integracin de lenguajes esta )ue es posi$le escri$ir unaclase en C# )ue /erede de otra escrita en ;isual 0asic*4E5 )ue% a su (ez% /eredede otra escrita en C'' con e-tensiones gestionadas*

    G;72 ??79: El C?> inclu+e un 6-6 9;09)ue e(ita )ue elprogramador tenga )ue tener en cuenta cundo /a de destruir los o$jetos )uedejen de serle ,tiles* Este recolector es una aplicacin )ue se acti(a cuando se)uiere crear alg,n o$jeto nue(o + se detecta )ue no )ueda memoria li$re para/acerlo% caso en )ue el recolector recorre la memoria dinmica asociada a laaplicacin% detecta )u o$jetos /a+ en ella )ue no puedan ser accedidos por elcdigo de la aplicacin% + los elimina para limpiar la memoria de No$jetos

    $asuraO + permitir la creacin de otros nue(os* Gracias a este recolector see(itan errores de programacin mu+ comunes como intentos de $orrado deo$jetos +a $orrados% agotamiento de memoria por ol(ido de eliminacin deo$jetos in,tiles o solicitud de acceso a miem$ros de o$jetos +a destruidos*

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    10/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    S=079 7 &acilita la deteccin de errores de programacindi&.ciles de localizar compro$ando )ue toda con(ersin de tipos )ue se realicedurante la ejecucin de una aplicacin *4E5 se /aga de modo )ue los tiposorigen + destino sean compati$les*

    A7;-9?72 asegura )ue desde cdigo perteneciente a undeterminado proceso no se pueda acceder a cdigo o datos pertenecientes a otro%lo )ue e(ita errores de programacin mu+ &recuentes e impide )ue unos procesos

    puedan atacar a otros* Esto se consigue gracias al sistema de seguridad de tiposantes comentado% pues e(ita )ue se pueda con(ertir un o$jeto a un tipo dema+or tamao )ue el su+o propio% +a )ue al tratarlo como un o$jeto de ma+ortamao podr.a accederse a espacios en memoria ajenos a l )ue podr.an

    pertenecer a otro proceso* 5am$in se consigue gracias a )ue no se permiteacceder a posiciones ar$itrarias de memoria*

    T99?72 6 todo los errores )ue se puedanproducir durante la ejecucin de una aplicacin se propagan de igual manera3mediante e-cepciones* Esto es mu+ di&erente a como se (en.a /aciendo en lossistemas Hindo=s /asta la aparicin de la plata&orma *4E5% donde ciertoserrores se transmit.an mediante cdigos de error en &ormato Hin!% otrosmediante 8>ESK?5s + otros mediante e-cepciones*

    El C?> permite )ue e-cepciones lanzadas desde cdigo para *4E5 escrito en uncierto lenguaje se puedan capturar en cdigo escrito usando otro lenguaje% einclu+e mecanismos de depuracin )ue pueden saltar desde cdigo escrito

    para *4E5 en un determinado lenguaje a cdigo escrito en cual)uier otro* Por

    ejemplo% se puede recorrer la pila de llamadas de una e-cepcin aun)ue stainclu+a mtodos de&inidos en otros mdulos usando otros lenguajes*

    S es capaz de tra$ajar con aplicaciones di(ididas enm,ltiples /ilos de ejecucin )ue pueden ir e(olucionando por separado en

    paralelo o intercalndose% seg,n el n,mero de procesadores de la m)uina so$rela )ue se ejecuten* ?as aplicaciones pueden lanzar nue(os /ilos% destruirlos%suspenderlos por un tiempo o /asta )ue les llegue una noti&icacin% en(iarlesnoti&icaciones% sincronizarlos% etc*

    D7;70672 92; o&rece la in&raestructura necesaria para

    crear o$jetos remotos + acceder a ellos de manera completamente transparente asu localizacin real% tal + como si se encontrasen en la m)uina )ue los utiliza*

    S=079 992K99: El C?> proporciona mecanismos para restringir laejecucin de ciertos cdigos o los permisos asignados a los mismos seg,n su

    procedendecia o el usuario )ue los ejecute* Es decir% puede no darse el mismoni(el de con&ianza a cdigo procedente de nternet )ue a cdigo instaladolocalmente o procedente de una red localU puede no darse los mismos permisos acdigo procedente de un determinado &a$ricante )ue a cdigo de otroU + puedeno darse los mismos permisos a un mismo cdigos seg,n el usuario )ue lo est

    ejecutando o seg,n el rol )ue ste desempee* Esto permite asegurar al

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    11/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    administrador de un sistema )ue el cdigo )ue se est ejecutando no puedaponer en peligro la integridad de sus arc/i(os% la del registro de Hindo=s% etc*

    I2 incorpora los mecanismosnecesarios para poder acceder desde cdigo escrito para la plata&orma *4E5 a

    cdigo escrito pre(iamente a la aparicin de la misma +% por tanto% no preparadopara ser ejecutando dentro de ella* Estos mecanismos permiten tanto el acceso ao$jetos CL6 como el acceso a &unciones sueltas de ??s pree-istentes comola AP Hin!B

    Como se puede deducir de las caracter.sticas comentadas% el C?> lo )ue /ace esgestionar la ejecucin de las aplicaciones diseadas para la plata&orma *4E5* Por estarazn% al cdigo de estas aplicaciones se le suele llamar 67==;729% + al cdigono escrito para ser ejecutado directamente en la plata&orma *4E5 se le suele llamar67= 2 =;729*

    Microsoft !ntermediate Language (M"!L

    5odos los compiladores )ue generan cdigo para la plata&orma *4E5 no generan cdigom)uina para CPKs -RT ni para ning,n otro tipo de CPK concreta% sino )ue generancdigo escrito en el lenguaje intermedio conocido como 6icroso&t ntermediate?enguage 6S?B El C?> da a las aplicaciones las sensacin de )ue se estn ejecutandoso$re una m)uina (irtual% + precisamente 6S? es el cdigo m)uina de esa m)uina(irtual* Es decir% 6S? es el ,nico cdigo )ue es capaz de interpretar el C?>% + portanto cuando se dice )ue un compilador genera cdigo para la plata&orma *4E5 lo )ue

    se est diciendo es )ue genera 6S?*

    6S? /a sido creado por 6icroso&t tras consultar a numerosos especialistas en laescritura de compiladores + lenguajes tanto del mundo acadmico como empresarial* Esun lenguaje de un ni(el de a$straccin muc/o ms alto )ue el de la ma+or.a de loscdigos m)uina de las CPKs e-istentes% e inclu+e instrucciones )ue permiten tra$ajardirectamente con o$jetos crearlos% destruirlos% inicializarlos% llamar a mtodos(irtuales% etc*B% ta$las + e-cepciones lanzarlas% capturarlas + tratarlasB

    Va se coment )ue el compilador de C# compila directamente el cdigo &uente a 6S?%)ue 6icroso&t /a desarrollado nue(as (ersiones de sus lenguajes ;isual 0asic ;isual

    0asic*4E5B + C'' C'' con e-tensiones gestionadasB cu+os compiladores generan6S?% + )ue /a desarrollado un intrprete de JScript JScript*4E5B )ue genera cdigo6S?* Pues $ien% tam$in /a+ numerosos terceros )ue /an anunciado estar realizando(ersiones para la plata&orma *4E5 de otros lenguajes como AP?% CA6?% Co$ol% Ei&&el%Wortran% 8asIell% Ja(a% 6ercur+% 6?% 6ondrian% L$eron% Lz% Pascal% Perl% P+t/on%>PG% Sc/eme + SmalltalI*

    ?a principal (entaja del 6S? es )ue &acilita la ejecucin multiplata&orma + laintegracin entre lenguajes al ser independiente de la CPK + proporcionar un &ormatocom,n para el cdigo m)uina generado por todos los compiladores )ue generen cdigo

    para *4E5* Sin em$argo% dado )ue las CPKs no pueden ejecutar directamente 6S?%

    antes de ejecutarlo /a$r )ue con(ertirlo al cdigo nati(o de la CPK so$re la )ue se(a+a a ejecutar* e esto se encarga un componente del C?> conocido como compilador

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    12/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    J5 JustXnX5imeB o jitter )ue (a con(irtiendo dinmicamente el cdigo 6S? aejecutar en cdigo nati(o seg,n sea necesario* Este jitter se distri$u+e en tres (ersiones3

    >7 2?9-: Es el )ue se suele usar por de&ecto% + slo compila el cdigo6S? a cdigo nati(o a medida )ue (a siendo necesario% pues as. se a/orra

    tiempo + memoria al e(itarse tener )ue compilar innecesariamente cdigo )uenunca se ejecute* Para conseguir esto% el cargador de clases del C?> sustitu+einicialmente las llamadas a mtodos de las nue(as clases )ue (a+a cargando porllamadas a &unciones au-iliares stu$sB )ue se encarguen de compilar el(erdadero cdigo del mtodo* Kna (ez compilado% la llamada al stu$ essustituida por una llamada directa al cdigo +a compilado% con lo )ue posterioresllamadas al mismo no necesitarn compilacin*

    >7 62?76:Wunciona de &orma similar al jitter normal solo )ue no realizaninguna optimizacin de cdigo al compilar sino )ue traduce cada instruccin6S? por su e)ui(alente en el cdigo m)uina so$re la )ue se ejecute* Estaespecialmente pensado para ser usado en dispositi(os empotrados )ue dispongande poca potencia de CPK + poca memoria% pues aun)ue genere cdigo msine&iciente es menor el tiempo + memoria )ue necesita para compilar* Es ms%

    para a/orrar memoria este jitter puede descargar cdigo +a compilado )ue lle(ecierto tiempo sin ejecutarse + sustituirlo de nue(o por el stu$ apropiado* Porestas razones% este es el jitter usado por de&ecto en Hindo=s CE% sistemaoperati(o )ue se suele incluir en los dispositi(os empotrados antes mencionados*

    Ltra utilidad del jitter econmico es )ue &acilita la adaptacin de laplata&orma *4E5 a nue(os sistemas por)ue es muc/o ms sencillo de

    implementar )ue el normal* e este modo% gracias a l es posi$le desarrollarrpidamente una (ersin del C?> )ue pueda ejecutar aplicaciones gestionadasaun)ue sea de una &orma poco e&iciente% + una (ez desarrollada es posi$lecentrarse en desarrollar el jitter normal para optimizar la ejecucin de lasmismas*

    7: Se distri$u+e como una aplicacin en l.nea de comandos llamadangen.exe mediante la )ue es posi$le compilar completamente cual)uierejecuta$le o li$rer.a cual)uier ensam$lado en general% aun)ue este concepto se(er ms adelanteB )ue contenga cdigo gestionado + con(ertirlo a cdigonati(o% de modo )ue posteriores ejecuciones del mismo se /arn usando esta

    (ersin +a compilada + no se perder tiempo en /acer la compilacin dinmica*

    ?a actuacin de un jitter durante la ejecucin de una aplicacin gestionada puede dar lasensacin de /acer )ue sta se ejecute ms lentamente de$ido a )ue /a de in(ertirsetiempo en las compilaciones dinmicas* Esto es cierto% pero /a+ )ue tener en cuenta )uees una solucin muc/o ms e&iciente )ue la usada en otras plata&ormas como Ja(a% +a)ue en *4E5 cada cdigo no es interpretado cada (ez )ue se ejecuta sino )ue slo escompilado la primera (ez )ue se llama al mtodo al )ue pertenece* Es ms% el /ec/o de)ue la compilacin se realice dinmicamente permite )ue el jitter tenga acceso a muc/ams in&ormacin so$re la m)uina en )ue se ejecutar la aplicacin del )ue tendr.acual)uier compilador tradicional% con lo )ue puede optimizar el cdigo para ella

    generado por ejemplo% usando las instrucciones especiales del Pentium si lam)uina las admite% usando registros e-tra% inclu+endo cdigo inline% etc*B Adems%

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    13/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    como el recolector de $asura de *4E5 mantiene siempre compactada la memoriadinmica las reser(as de memoria se /arn ms rpido% so$re todo en aplicaciones )ueno agoten la memoria +% por tanto% no necesiten de una recoleccin de $asura* Por estasrazones% los ingenieros de 6icroso&t piensan )ue &uturas (ersiones de sus jitters podrnincluso conseguir )ue el cdigo gestionado se ejecute ms rpido )ue el no gestionado*

    Metadatos

    En la plata&orma *4E5 se distinguen dos tipos de ?0-; de cdigo compilado3>609-; e-tensin .B + -79; 2-96 72?76 e-tensin .--generalmenteB Am$os son &ic/eros )ue contienen de&iniciones de tipos de datos% + ladi&erencia entre ellos es )ue slo los primeros disponen de un mtodo especial )ue sir(ede punto de entrada a partir del )ue es posi$le ejecutar el cdigo )ue contienen /aciendouna llamada desde la l.nea de comandos del sistema operati(o* A am$os tipos demdulos se les suele llamar >609-; *

    El contenido de un mdulo no slo 6S?% sino )ue tam$in consta de otras dos reasmu+ importantes3 la ca$ecera de C?> + los metadatos3

    ?a 6969 CLRes un pe)ueo $lo)ue de in&ormacin )ue indica )ue se tratade un mdulo gestionado e indica es la (ersin del C?> )ue necesita% cul es su&irma digital% cul es su punto de entrada si es un ejecuta$leB% etc*

    ?os ?99; son un conjunto de datos organizados en &orma de ta$las )uealmacenan in&ormacin so$re los tipos de&inidos en el mdulo% los miem$ros destos + so$re cules son los tipos e-ternos al mdulo a los )ue se les re&erencia en elmdulo* ?os metadatos de cada modulo los genera automticamente el compiladoral crearlo% + entre sus ta$las se inclu+en13

    T9-9 D;67

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    14/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    Parame& e&ine las caracter.sticas de los parmetros de&inidos en el mdulo* ecada parmetro se guarda su nom$re + modi&icadores*

    Wielde& e&ine las caracter.sticas de los campos de&inidos en el mdulo* ecada uno se almacena in&ormacin so$re cul es su nom$re% tipo +modi&icadores*

    Propert+e& e&ine las caracter.sticas de las propiedades de&inidas en el mdulo*e cada una se indica su nom$re% tipo% modi&icadores + re&erencias alos elementos de la ta$la 6et/ode& correspondientes a sus mtodossetget*

    E(ente& e&ine las caracter.sticas de los e(entos de&inidos en el mdulo* ecada uno se indica su nom$re% tipo% modi&icadores* + re&erencias a loselementos de la ta$la 6et/ode& correspondientes a sus mtodosaddremo(e*

    Assem$l+>e& ndica cules son los ensam$lados e-ternos a los )ue se re&erencia enel mdulo* e cada uno se indica cul es su nom$re de &ic/ero sine-tensinB% (ersin% idioma + marca de cla(e p,$lica*

    6odule>e& ndica cules son los otros mdulos del mismo ensam$lado a los )uere&erencia el mdulo* e cada uno se indica cul es su nom$re de&ic/ero*

    5+pe>e& ndica cules son los tipos e-ternos a los )ue se re&erencia en elmdulo* e cada uno se indica cul es su nom$re +% seg,n dondeestn de&inidos% una re&erencia a la posicin adecuada en la ta$laAssem$l+>e& o en la ta$la 6odule>e&*

    6em$er>e& ndican cules son los miem$ros de&inidos e-ternamente a los )ue sere&erencia en el mdulo* Estos miem$ros pueden ser campos% mtodos%

    propiedades o e(entosU + de cada uno de ellos se almacena

    in&ormacin so$re su nom$re + signatura% as. como una re&erencia a laposicin de la ta$la 5+pe>e& donde se almacena in&ormacin relati(aal tipo del )ue es miem$ro*

    T9-9 1 : Principales ta$las de metadatos

    4tese )ue el signi&icado de los metadatos es similar al de otras tecnolog.as pre(ias a laplata&orma *4E5 como lo son los &ic/eros ?* Sin em$argo% los metadatos tienen dos(entajas importantes so$re stas3 contiene ms in&ormacin + siempre se almacenanincrustados en el mdulo al )ue descri$en% /aciendo imposi$le la separacin entream$os* Adems% como se (er ms adelante% es posi$le tanto consultar los metadatos de

    cual)uier mdulo a tra(s de las clases del espacio de nom$res S;?.R@-672de la0C? como aadirles in&ormacin adicional mediante 970; se (er ms adelanteB

    Ensamblados

    Kn 2;9?-9 es una agrupacin lgica de uno o ms mdulos o &ic/eros de recursos&ic/eros *GW% *856?% etc*B )ue se englo$an $ajo un nom$re com,n* Kn programa

    puede acceder a in&ormacin o cdigo almacenados en un ensam$lado sin tener por)usa$e cul es el &ic/ero en concreto donde se encuentran% por lo )ue los ensam$lados nos

    permiten a$straernos de la u$icacin &.sica del cdigo )ue ejecutemos o de los recursos

    )ue usemos* Por ejemplo% podemos incluir todos los tipos de una aplicacin en unmismo ensam$lado pero colocando los ms &recuentemente usados en un cierto mdulo

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    15/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    + los menos usados en otro% de modo )ue slo se descarguen de nternet los ,ltimos sies )ue se (an a usar*

    5odo ensam$lado contiene un ?927@7;% )ue son metadatos con in&ormacin so$re lascaracter.sticas del ensam$lado* Este mani&iesto puede almacenarse cual)uiera de los

    mdulos )ue &ormen el ensam$lado o en uno espec.&icamente creado para ello% caso ste,ltimo necesario cuando es un 2;9?-9 ;9-7slo contiene recursosB

    ?as principales ta$las incluidas en los mani&iestos son las siguientes3

    T9-9 D;67esourcee& e&ine las caracter.sticas de los recursos incluidos en elmdulo* e cada uno se indica su nom$re + modi&icadores deacceso* Si es un recurso incrustado se indica dnde empiezadentro del PE )ue lo contiene% + si es un &ic/ero independientese indica cul es el elemento de la ta$la Wilee&correspondiente a dic/o &ic/ero*

    E-ported5+pese& ndica cules son los tipos de&inidos en el ensam$lado +accesi$les desde &uera del mismo* Para a/orrar espacio slorecogen los )ue no pertenezcan al mdulo donde se inclu+e elmani&iesto% + de cada uno se indica su nom$re% la posicin enla ta$la Wilee& del &ic/ero donde se /a implementado + la

    posicin en la ta$la 5+pee& correspondiente a su de&inicin*Assem$l+Proccesore& ndica en )u procesadores se puede ejecutar el ensam$lado% lo

    )ue puede ser ,til sa$erlo si el ensam$lado contiene mduloscon cdigo nati(o podr.a /acerse usando C'' con

    e-tensiones gestionadasB Suele estar (ac.a% lo )ue indica )ue sepuede ejecutar en cual)uier procesadorU pero si estu(iese llena%cada elemento indicar.a un tipo de procesador admitido seg,nel &ormato de identi&icadores de procesador del &ic/eroHin45*/ incluido con ;isual Studio*4E5 por ejemplo% QRT YPentium% 22 Y Ar)uitectura AT"% etc*B

    Assem$l+LSe& ndica $ajo )u sistemas operati(os se puede ejecutar elensam$lado% lo )ue puede ser ,til si contiene mdulos contipos o mtodos disponi$les slo en ciertos sistemas* Sueleestar (ac.a% lo )ue indica )ue se puede ejecutar en cual)uier

    procesadorU pero si estu(iese llena% indicar.a el identi&icador de

    cada uno de los sistemas admitidos siguiendo el &ormato delHin45*/ de ;isual Studio*4E5 por ejemplo% 2 Y &amilia

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    16/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    Hindo=s :% 1 Y &amilia Hindo=s 45% etc*B + el n,mero de la(ersin del mismo a partir de la )ue se admite*T9-9 # : Principales ta$las de un mani&iesto

    Para asegurar )ue no se /a+a alterado la in&ormacin de ning,n ensam$lado se usa el

    criptosistema de cla(e p,$lica >SA* ?o )ue se /ace es calcular el cdigo de dispersinS8AX1 del mdulo )ue contenga el mani&iesto e incluir tanto este (alor ci&rado con>SA @7?9 7=79-B como la cla(e p,$lica necesaria para desci&rarlo en alg,n lugar delmdulo )ue se indicar en la ca$ecera de C?>* Cada (ez )ue se (a+a a cargar enmemoria el ensam$lado se calcular su (alor de dispersin de nue(o + se compro$ar)ue es igual al resultado de desci&rar el original usando su cla(e p,$lica* Si no &uese as.se detectar.a )ue se /a adulterado su contenido*

    Para asegurar tam$in )ue los contenidos del resto de &ic/eros )ue &ormen unensam$lado no /a+an sido alterados lo )ue se /ace es calcular el cdigo de dispersinde stos antes de ci&rar el ensam$lado + guardarlo en el elemento correspondiente a cada

    &ic/ero en la ta$la Wilee& del mani&iesto* El algoritmo de ci&rado usado por de&ecto esS8AX1% aun)ue en este caso tam$in se da la posi$ilidad de usar 6Q* En am$os casos%cada (ez )ue se accede al &ic/ero para acceder a un tipo o recurso se calcular de nue(osu (alor de dispersin + se compro$ar )ue coincida con el almacenado en Wilee&*

    ado )ue las cla(es p,$licas son (alores )ue ocupan muc/os $+tes 2"R $itsB% lo )uese /ace para e(itar )ue los metadatos sean e-cesi(amente grandes es no incluir en lasre&erencias a ensam$lados e-ternos de la ta$la Assem$l+>e& las cla(es p,$licas dedic/os ensam$lados% sino slo los T" ,ltimos $its resultantes de aplicar un algoritmo dedispersin a dic/as cla(es* A este (alor recortado se le llama ?969 6-9

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    17/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    En realidad es posi$le modi&icar tanto las pol.ticas de $,s)ueda de ensam$lados porejemplo% para $uscar ensam$lados pri(ados &uera del directorio de la aplicacinB comola pol.tica de aceptacin de ensam$lados compartidos por ejemplo% para )ue se /agaautomticamente uso de las nue(as (ersiones )ue se instalen de ??s compartidasBinclu+endo en el directorio de instalacin de la aplicacin un &ic/ero de con&iguracin

    en &ormato 6? con las nue(as reglas para las mismas* Este &ic/ero /a de llamarseigual )ue el ejecuta$le de la aplicacin pero /a de tener e-tensin .6@=*

    Librer#a de clase base ($CL

    ?a ?i$rer.a de Clase 0ase 0C?B es una li$rer.a incluida en el .NET Framework&ormada por cientos de tipos de datos )ue permiten acceder a los ser(icios o&recidos porel C?> + a las &uncionalidades ms &recuentemente usadas a la /ora de escri$ir

    programas* Adems% a partir de estas clases pre&a$ricadas el programador puede crearnue(as clases )ue mediante /erencia e-tiendan su &uncionalidad + se integren a la

    per&eccin con el resto de clases de la 0C?* Por ejemplo% implementando ciertosinter&aces podemos crear nue(os tipos de colecciones )ue sern tratadas e-actamenteigual )ue cual)uiera de las colecciones incluidas en la 0C?*

    Esta li$rer.a est escrita en 6S?% por lo )ue puede usarse desde cual)uier lenguajecu+o compilador genere 6S?* A tra(s de las clases suministradas en ella es posi$ledesarrollar cual)uier tipo de aplicacin% desde las tradicionales aplicaciones de(entanas% consola o ser(icio de Hindo=s 45 /asta los no(edosos ser(icios He$ +

    pginas ASP*4E5* Es tal la ri)ueza de ser(icios )ue o&rece )ue puede crearse lenguajes)ue carezcan de li$rer.a de clases propia + slo usen la 0C? Xcomo C#*

    ado la amplitud de la 0C?% /a sido necesario organizar las clases en ella incluida en;untime*>emoting Acceso a o$jetos remotos*S+stem*Securit+ Acceso a la pol.tica de seguridad en )ue se $asa el C?>*S+stem*5/reading 6anipulacin de /ilos*S+stem*He$*K*He$Controls Creacin de inter&aces de usuario $asadas en (entanas

    para aplicaciones He$*S+stem*Hin&orms Creacin de inter&aces de usuario $asadas en (entanas

    para aplicaciones estndar*

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    18/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    S+stem*6? Acceso a datos en &ormato 6?*

    T9-9 3 : Espacios de nom$res de la 0C? ms usados

    Common T%pe "%stem (CT"

    El C??2 T las acepte* Esdecir% aun)ue cada lenguaje gestionado disponga de sus propia sinta-is para de&inirtipos de datos% en el 6S? resultante de la compilacin de sus cdigos &uente se /a decumplir las reglas del C5S* Algunos ejemplos de estas reglas son3

    Cada tipo de dato puede constar de cero o ms miem$ros* Cada uno de estosmiem$ros puede ser un campo% un mtodo una propiedad o un e(ento*

    4o puede /a$er /erencia m,ltiple% + todo tipo de dato /a de /eredar directa oindirectamente de System.Obect*

    ?os modi&icadores de acceso admitidos son3

    M7@769 C7= ; - /0 ; 966;7- - ?7?!ublic Cual)uier cdigo!ri"ate Cdigo del mismo tipo de datofamily Cdigo del mismo tipo de dato o de /ijos de ste*assembly Cdigo del mismo ensam$lado

    family andassembly Cdigo del mismo tipo o de /ijos de ste u$icado enel mismo ensam$ladofamily orassembly

    Cdigo del mismo tipo o de /ijos de ste% o cdigou$icado en el mismo ensam$lado

    T9-9 4 : 6odi&icadores de acceso a miem$ros admitidos por el C5S

    Common Language "pecification (CL"

    El C??2 L92=09= S

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    19/261

    El lenguaje de programacin C# 5ema 13 ntroduccin a 6icroso&t*4E5

    ?as ta$las /an de tener una o ms dimensiones% + el n,mero de dimensiones decada ta$la /a de ser &ijo* Adems% /an de inde-arse empezando a contar desde 2*

    Se pueden de&inir tipos a$stractos + tipos sellados* ?os tipos sellados no puedentener miem$ros a$stractos*

    ?as e-cepciones /an de deri(ar de System.E%ce!tion% los delegados deSystem.&ele$ate% las enumeraciones de System.Enum% + los tipos por (alor )ueno sean enumeraciones de System.'alueTy!e*

    ?os mtodos de acceso a propiedades en )ue se traduzcan las de&inicionesgetset de stas /an de llamarse de la &orma $et() + set() respecti(amente%donde es el nom$re de la propiedadU los de acceso a indizadores /an detraducirse en mtodos $et(Item + setItemU + en el caso de los e(entos% susde&iniciones addremo(e /an de traducirse en mtodos de add()+ remo"e()*

    En las de&iniciones de atri$utos slo pueden usarse enumeraciones o datos de lossiguientes tipos3 System.Ty!e% strin$% c#ar% bool% byte% s#ort% int% lon$% float%double+ obect*

    En un mismo m$ito no se pueden de&inir (arios identi&icadores cu+os nom$resslo di&ieran en la capitalizacin usada* e este modo se e(itan pro$lemas alacceder a ellos usando lenguajes no sensi$les a ma+,sculas*

    ?as enumeraciones no pueden implementar inter&aces% + todos sus campos /ande ser estticos + del mismo tipo* El tipo de los campos de una enumeracin slo

    puede ser uno de estos cuatro tipos $sicos3 byte%s#ort%int olon$*

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    20/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    Tema *: Introduccin a +,

    &rigen % necesidad de un nuevo lengua'e

    C$le.do en ingls NC S/arpO + en espaol NC Almo/adillaOB es el nue(o lenguaje depropsito general diseado por 6icroso&t para su plata&orma *4E5* Sus principalescreadores son Scott Hiltamut/ + Anders 8ejls$erg% ste ,ltimo tam$in conocido por/a$er sido el diseador del lenguaje 5ur$o Pascal + la /erramienta >A elp/i*

    Aun)ue es posi$le escri$ir cdigo para la plata&orma *4E5 en muc/os otros lenguajes%C# es el ,nico )ue /a sido diseado espec.&icamente para ser utilizado en ella% por lo)ue programarla usando C# es muc/o ms sencillo e intuiti(o )ue /acerlo concual)uiera de los otros lenguajes +a )ue C# carece de elementos /eredados innecesarios

    en *4E5* Por esta razn% se suele decir )ue C# es el -2=09> 297 .NET

    ?a sinta-is + estructuracin de C# es mu+ similar a la C''% +a )ue la intencin de6icroso&t con C# es &acilitar la migracin de cdigos escritos en estos lenguajes a C# +&acilitar su aprendizaje a los desarrolladores /a$ituados a ellos* Sin em$argo% susencillez + el alto ni(el de producti(idad son e)uipara$les a los de ;isual 0asic*

    Kn lenguaje )ue /u$iese sido ideal utilizar para estos menesteres es Ja(a% pero de$ido apro$lemas con la empresa creadora del mismo XSunX% 6icroso&t /a tenido )uedesarrollar un nue(o lenguaje )ue aadiese a las +a pro$adas (irtudes de Ja(a lasmodi&icaciones )ue 6icroso&t ten.a pensado aadirle para mejorarlo a,n ms + /acerlo

    un lenguaje orientado al desarrollo de componentes*

    En resumen% C# es un lenguaje de programacin )ue toma las mejores caracter.sticas delenguajes pree-istentes como ;isual 0asic% Ja(a o C'' + las com$ina en uno solo* El/ec/o de ser relati(amente reciente no implica )ue sea inmaduro% pues 6icroso&t /aescrito la ma+or parte de la 0C? usndolo% por lo )ue su compilador es el ms depurado+ optimizado de los incluidos en el .NET Framework SDK

    Caracter#sticas de C

    Con la idea de )ue los programadores ms e-perimentados puedan o$tener una (isingeneral del lenguaje% a continuacin se recoge de manera resumida las principalescaracter.sticas de C# Alguna de las caracter.sticas a)u. sealadas no son e-actamente

    propias del lenguaje sino de la plata&orma *4E5 en general* Sin em$argo% tam$in secomentan a)u. tam$in en tanto )ue tienen repercusin directa en el lenguaje% aun)ue seindicar e-pl.citamente cules son este tipo de caracter.sticas cada (ez )ue se to)uen3

    S267--K:C# elimina muc/os elementos )ue otros lenguajes inclu+en + )ue soninnecesarios en *4E5* Por ejemplo3

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    21/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    o El cdigo escrito en C# es 906227% lo )ue signi&ica )ue nonecesita de &ic/eros adicionales al propio &uente tales como &ic/eros deca$ecera o &ic/eros ?

    o El tamao de los tipos de datos $sicos es &ijo e independiente del

    compilador% sistema operati(o o m)uina para )uienes se compile nocomo en C''B% lo )ue &acilita la porta$ilidad del cdigo*

    o 4o se inclu+en elementos poco ,tiles de lenguajes como C'' tales comomacros% /erencia m,ltiple o la necesidad de un operador di&erente del

    punto .B acceder a miem$ros de espacios de nom$res ::B

    M279: C# incorpora en el propio lenguaje elementos )ue a lo largo delos aos /a ido demostrndose son mu+ ,tiles para el desarrollo de aplicaciones+ )ue en otros lenguajes como Ja(a o C'' /a+ )ue simular% como un tipo $sicodecimal)ue permita realizar operaciones de alta precisin con reales de 1R $itsmu+ ,til en el mundo &inancieroB% la inclusin de una instruccin foreac#)ue

    permita recorrer colecciones con &acilidad + es amplia$le a tipos de&inidos por elusuario% la inclusin de un tipo $sico strin$ para representar cadenas o ladistincin de un tipo boolespec.&ico para representar (alores lgicos*

    O729672 9 >;: Como todo lenguaje de programacin de propsitogeneral actual% C# es un lenguaje orientado a o$jetos% aun)ue eso es ms $ienuna caracter.stica del C5S )ue de C#* Kna di&erencia de este en&o)ue orientado ao$jetos respecto al de otros lenguajes como C'' es )ue el de C# es ms puro entanto )ue no admiten ni &unciones ni (aria$les glo$ales sino )ue todo el cdigo +

    datos /an de de&inirse dentro de de&iniciones de tipos de datos% lo )ue reducepro$lemas por con&lictos de nom$res + &acilita la legi$ilidad del cdigo*

    C# soporta todas las caracter.sticas propias del paradigma de programacinorientada a o$jetos3 269

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    22/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    (irtuales se puedan /acer ms e&icientemente al contri$uir a )ue el tamao dedic/a ta$la se reduzca*

    O729672 9 6?

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    23/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    pueden almacenar re&erencias a (arios mtodos simultneamente% + secomprue$a )ue los mtodos a los )ue apunten tengan parmetros + (alorde retorno del tipo indicado al de&inirlos*

    o Pueden de&inirse mtodos )ue admitan un n,mero inde&inido de

    parmetros de un cierto tipo% + a di&erencia lenguajes como CC''% enC# siempre se comprue$a )ue los (alores )ue se les pasen en cadallamada sean de los tipos apropiados*

    I2;06672; ;=09;: Para e(itar errores mu+ comunes% en C# se /animpuesto una serie de restricciones en el uso de las instrucciones de control mscomunes* Por ejemplo% la guarda de toda condicin /a de ser una e-presincondicional + no aritmtica% con lo )ue se e(itan errores por con&usin deloperador de igualdad --B con el de asignacin -BU + todo caso de un ;76J/ade terminar en un breao $oto)ue indi)ue cul es la siguiente accin a realizar%lo )ue e(ita la ejecucin accidental de casos + &acilita su reordenacin*

    S7;?9 7

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    24/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    de&iniendo operadores simples como /B% el compilador deduce cmo aplicar su(ersin de asignacin compuesta 'YB Adems% para asegurar la consistencia% elcompilador (igila )ue los operadores con opuesto siempre se rede&inan por

    parejas por ejemplo% si se rede&ine --% tam$in /a+ )ue rede&inir -B

    5am$in se da la posi$ilidad% a tra(s del concepto de 727K9% de rede&inir elsigni&icado del operador 23para los tipos de dato de&inidos por el usuario% con lo)ue se consigue )ue se pueda acceder al mismo como si &uese una ta$la* Esto esmu+ ,til para tra$ajar con tipos )ue act,en como colecciones de o$jetos*

    E2;77-79 ?7@769;: C# o&rece% a tra(s del concepto de970;% la posi$ilidad de aadir a los metadatos del mdulo resultante de lacompilacin de cual)uier &uente in&ormacin adicional a la generada por elcompilador )ue luego podr ser consultada en tiempo ejecucin a tra(s de lali$rer.a de re&le-in de *4E5 * Esto% )ue ms $ien es una caracter.stica propia dela plata&orma *4E5 + no de C#% puede usarse como un mecanismo para de&inir

    nue(os modi&icadores*

    V;729-:C# inclu+e una

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    25/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    di&erencia de Ja(a% en C# es posi$le saltarse dic/as restricciones manipulandoo$jetos a tra(s de punteros* Para ello $asta marcar regiones de cdigo comoinseguras modi&icador unsafeB + podrn usarse en ellas punteros de &ormasimilar a cmo se /ace en C''% lo )ue puede resultar (ital para situacionesdonde se necesite una e&iciencia + (elocidad procesamiento mu+ grandes*

    C? tam$in o&rece% a tra(s de los llamados P-9@? I26972 S76;PI2B% la posi$ilidad de acceder a cdigo nati(o escrito como &uncionessueltas no orientadas a o$jetos tales como las ??s de la AP Hin!* 4tese)ue la capacidad de usar punteros en cdigo inseguro permite )ue se puedaacceder con &acilidad a este tipo de &unciones% +a )ue stas muc/as (ecesesperan reci$ir o de(uel(en punteros*

    5am$in es posi$le acceder desde cdigo escrito en C# a o$jetos CL6* Para&acilitar esto% el .NET Framework SDK inclu+e una /erramientas llamadastlbimp + regasmmediante las )ue es posi$le generar automticamente clases

    pro-+ )ue permitan% respecti(amente% usar o$jetos CL6 desde *4E5 como si deo$jetos *4E5 se tratase + registrar o$jetos *4E5 para su uso desde CL6*

    Winalmente% tam$in se da la posi$ilidad de usar controles Acti(e desde cdigo*4E5 + (ice(ersa* Para lo primero se utiliza la utilidad aximp% mientras )ue paralo segundo se usa la +a mencionada regasm*

    Escritura de aplicaciones

    A!licacin b5sica 67ola Mundo

    0sicamente una aplicacin en C# puede (erse como un conjunto de uno o ms&ic/eros de cdigo &uente con las instrucciones necesarias para )ue la aplicacin&uncione como se desea + )ue son pasados al compilador para )ue genere un ejecuta$le*Cada uno de estos &ic/eros no es ms )ue un &ic/ero de te-to plano escrito usandocaracteres Knicode + siguiendo la sinta-is propia de C#*

    Como primer contacto con el lenguaje% nada mejor )ue el t.pico programa de iniciacinN78ola 6undo9O )ue lo ,nico )ue /ace al ejecutarse es mostrar por pantalla el mensajeHola Mundo!Su cdigo es3

    $% class HolaMundo&% {'% static void Main()% {% System.Console.WriteLine(Hola Mundo!);*% +%

    ?os n,meros de l.nea no &orman parte del cdigo sino )ue slo se inclu+en para &acilitar su posteriore-plicacin*

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    26/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    5odo el cdigo escrito en C# se /a de escri$ir dentro de una de&inicin de clase% + lo)ue en la l.nea 1:se dice es )ue se (a a de&inir una clase 6-9;;B de nom$re HolaMundo$cu+a de&inicin estar comprendida entre la lla(e de apertura de la l.nea #: + sucorrespondiente lla(e de cierre en la l.nea l.nea !:

    entro de la de&inicin de la clase l.nea 3:B se de&ine un mtodo de nom$re Main cu+ocdigo es el indicado entre la lla(e de apertura de la l.nea 4:+ su respecti(a lla(e decierre l.nea *:B Kn mtodo no es ms )ue un conjunto de instrucciones a las )ue se lesasocia un nom$re% de modo )ue para posteriormente ejecutarlas $aste re&erenciarlas porsu nom$re en (ez de tener )ue reescri$irlas*

    ?a part.cula )ue antecede al nom$re del mtodo indica cul es el tipo de (alor )ue sede(uel(e tras la ejecucin del mtodo% + en este caso es 7)ue signi&ica )ue no sede(uel(e nada* Por su parte% los parntesis )ue se colocado tras el nom$re del mtodoindican cules son los parmetros ste toma% + como en este caso estn (ac.os ellosigni&ica )ue el mtodo no toma parmetros* ?os parmetros de un mtodo permiten

    (ariar el resultado de su ejecucin seg,n los (alores )ue se les d en cada llamada*

    ?a pala$ra ;976 )ue antecede a la declaracin del tipo de (alor de(uelto es un?7@769 del signi&icado de la declaracin de mtodo )ue indica )ue el mtodo estasociado a la clase dentro de la )ue se de&ine + no a los o$jetos )ue se creen a partir deella* Main()es lo )ue es denomina el

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    27/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    nom$res System no e-iste ninguna clase con dic/os nom$res* En este sentido% ca$esealar )ue un error com,n entre programadores acostum$rados a Ja(a es llamar al

    punto de entrada main en (ez de Main% lo )ue pro(oca un error al compilar ejecuta$les entanto )ue el compilador no detectar ninguna de&inicin de punto de entrada*

    =untos de entrada

    Va se /a dic/o )ue el

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    28/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    5ras la compilacin se o$tendr.a un ejecuta$le llamado HolaMundo.e$ecu+a ejecucinproducir.a la siguiente salida por la (entana de consola3

    Hola Mundo!

    Si la aplicacin )ue se (a+a a compilar no utilizase la (entana de consola para mostrarsu salida sino una inter&az gr&ica de (entanas% entonces /a$r.a )ue compilarla pasandoal compilador la opcin /t con el (alorwinexe antes del nom$re del &ic/ero acompilar* Si no se /iciese as. se a$r.r.a la (entana de consola cada (ez )ue ejecutase laaplicacin de (entanas% lo )ue suele ser indesea$le en este tipo de aplicaciones* As.%

    para compilar )entanas.cscomo ejecuta$le de (entanas ser.a con(eniente escri$ir3

    csc *t+,ine$e )entanas.cs

    4tese )ue aun)ue el nom$rewinexe d la sensacin de )ue este (alor para la opcin/t slo permite generar ejecuta$les de (entanas% en realidad lo )ue permite es generarejecuta$les sin (entana de consola asociada* Por tanto% tam$in puede usarse paragenerar ejecuta$les )ue no tengan ninguna inter&az asociada% ni de consola ni gr&ica*Si en lugar de un ejecuta$le X+a sea de consola o de (entanasX se desea o$tener unali$rer.a% entonces al compilar /a+ )ue pasar al compilador la opcin /t con el (alorlibrary* Por ejemplo% siguiendo con el ejemplo inicial /a$r.a )ue escri$ir3

    csc *t+li-rary HolaMundo.cs

    En este caso se generar.a un &ic/ero HolaMundo.dll cu+os tipos de datos podr.anutilizarse desde otros &uentes pasando al compilador una re&erencia a los mismosmediante la opcin /r* Por ejemplo% para compilar como ejecuta$le un &uente .cs )ue

    use la clase HolaMundo de la li$rer.a HolaMundo.dll se escri$ir.a3

    csc *r+HolaMundo.dll .cs

    En general /r permite re&erenciar a tipos de&inidos en cual)uier ensam$lado% por lo )ueel (alor )ue se le indi)ue tam$in puede ser el nom$re de un ejecuta$le* Adems% encada compilacin es posi$le re&erenciar m,ltiples ensam$lados +a sea inclui+endo laopcin /r una (ez por cada uno o inclui+endo m,ltiples re&erencias en una ,nicaopcin /r usando comas o puntos + comas como separadores* Por ejemplo% lassiguientes tres llamadas al compilador son e)ui(alentes3

    csc *r+HolaMundo.dll&/tro.dll&/troM0s.e$e .cscsc *r+HolaMundo.dll#/tro.dll#/troM0s.e$e .cs

    csc *t+HolaMundo.dll *r+/tro.dll *r+/troM0s.e$e .cs

    8a+ )ue sealar )ue aun)ue no se indi)ue nada% en toda compilacin siempre sere&erencia por de&ecto a la li$rer.amscorlib.dllde la 0C?% )ue inclu+e los tipos deuso ms &recuente* Si se usan tipos de la 0C? no incluidos en ella /a$r )ue incluir alcompilar re&erencias a las li$rer.as donde estn de&inidos en la documentacin del SDso$re cada tipo de la 0C? puede encontrar in&ormacin so$re donde se de&iniB

    5anto las li$rer.as como los ejecuta$les son ensam$lados* Para generar un mdulo decdigo )ue no &orme parte de ning,n ensam$lado sino )ue contenga de&iniciones detipos )ue puedan aadirse a ensam$lados )ue se compilen posteriormente% el (alor )ue/a de darse al compilar a la opcin /tesmodule* Por ejemplo3

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    29/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    csc *t+module HolaMundo.cs

    Con la instruccin anterior se generar.a un mdulo llamado HolaMundo.netmodule)ue podr.a ser aadido a compilaciones de ensam$lados inclu+ndolo como (alor de laopcin /addmodule* Por ejemplo% para aadir el mdulo anterior a la compilacin del&uente li$rer.a Li-.cscomo li$rer.a se escri$ir.a3

    csc *t+li-rary *addmodule+HolaMundo.netmodule Li-.cs

    Aun)ue /asta a/ora todas las compilaciones de ejemplo se /an realizado utilizando un,nico &ic/ero de cdigo &uente% en realidad nada impide )ue se puedan utilizar ms* Porejemplo% para compilar los &ic/eros .cs+ 1.csen una li$rer.a .dllse ejecutar.a3

    csc *t+li-rary .cs 1.cs

    4tese )ue el nom$re )ue por de&ecto se d al ejecuta$le generado siempre es igual al

    del primer &uente especi&icado pero con la e-tensin propia del tipo de compilacinrealizada .exe para ejecuta$les% .dll para li$rer.as + .netmodule para mdulosB Sinem$argo% puede especi&icrse como (alor en la opcin /out del compilador cual)uierotro tal + como muestra el siguiente ejemplo )ue compila el &ic/ero .cs como unali$rer.a de nom$re Li-.e$e3

    csc *t+li-rary *out+Li-.e$e .cs

    ;ase )ue aun)ue se /a+a dado un nom$re terminado en .exe al &ic/ero resultante%ste sigue siendo una li$rer.a + no un ejecuta$le e intentar ejecutarlo producir.a unmensaje de error* L$(iamente no tiene muc/o sentido darle esa e-tensin% + slo se le/a dado en este ejemplo para demostrar )ue% aun)ue recomenda$le% la e-tensin del&ic/ero no tiene por)u corresponderse realmente con el tipo de &ic/ero del )ue se trate*

    A la /ora de especi&icar &ic/eros a compilar tam$in es pueden utilizar los caracteres decomod.n t.picos del sistema operati(o* Por ejemplo% para compilar todos los &ic/eroscon e-tensin .cs del directorio actual en una li$rer.a llamada )arios.dllse /ar.a3

    csc *t+li-rary *out+2arios.dll 3.cs

    Con lo )ue /a+ )ue tener cuidado% + en especial al compilar (arios &uentes% es con )ueno se compilen a la (ez ms de un tipo de dato con punto de entrada% pues entonces elcompilador no sa$r.a cul usar como inicio de la aplicacin* Para orientarlo% puede

    especi&icarse como (alor de la opcin /main el nom$re del tipo )ue contenga el Main()/a usar como punto de entrada* As.% para compilar los &ic/eros .cs + 1.cs en unejecuta$le cu+o punto de entrada sea el de&inido en el tipo 1rinci2al% /a$r.a )ue escri$ir3

    csc *main+4rincial .cs 1.cs

    L$(iamente% para )ue esto &uncione .cs o 1.cstiene )ue contener alguna de&inicinde alg,n tipo llamado 1rinci2al con un ,nico mtodo (lido como punto de entrada*o$(iamente si contiene (arias se (ol(er.a a tener el pro$lema de no sa$er cul usarB

    +om!ilacin con 'isual Studio.NET

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    30/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    Para compilar una aplicacin en ;isual Studio*4E5 primero /a+ )ue incluirla dentro dealg,n pro+ecto* Para ello $asta pulsar el $otnNew Project en la pgina de inicio )uese muestra nada ms arrancar dic/a /erramienta% tras lo )ue se o$tendr una pantallacon el aspecto mostrado en la lustracin 1*

    En el recuadro de la (entana mostrada eti)uetado como Project Types se /a deseleccionar el tipo de pro+ecto a crear* L$(iamente% si se (a a tra$ajar en C# la opcin)ue /a$r )ue escoger en la misma ser siempre )isual C6 4ro7ects*

    En el recuadro T?

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    31/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    I-0;9672 #:Plantilla para aplicaciones de consola generada por ;isual Studio*4E5

    A partir de esta plantilla% escri$ir el cdigo de la aplicacin de ejemplo es tan sencillocon simplemente teclear System.Console.WriteLine(Hola Mundo!)dentro de la de&inicindel mtodo Main()creada por ;isual Studio*4E5* Claro est% otra posi$ilidad es $orrartoda la plantilla + sustituirla por el cdigo para HolaMundo mostrado anteriormente*

    Sea /aga como se /aga% para compilar + ejecutar tras ello la aplicacin slo /a+ )uepulsar CTRL!" o seleccionar #ebug $tart %ithout #ebugging en el men,principal de ;isual Studio*4E5* Para slo compilar el pro+ecto% entonces /a+ )ueseleccionar Build Rebuild &ll* e todas &ormas% en am$os casos el ejecuta$legenerado se almacenar en el su$directorio 1in89e-ug del directorio del pro+ecto*

    En el e-tremo derec/o de la (entana principal de ;isual Studio*4E5 puede encontrar eldenominado $olution 'xplorer si no lo encuentra% seleccione(iew $olutionE

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    32/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

    I-0;9672 3: 8oja de propiedades del pro+ecto en ;isual Studio*4E5

    Esta (entana permite con&igurar de manera (isual la ma+or.a de opciones con las )ue sellamar al compilador en l.nea de comandos* Por ejemplo% para cam$iar el nom$re del&ic/ero de salida opcin /outB se indica su nue(o nom$re en el cuadro de te-to CommonProperties )eneral &ssembly NameU para cam$iar el tipo de pro+ecto agenerar opcin /tB se utiliza Common Properties )eneral *utput Type

    como (er si intenta cam$iarlo% no es posi$le generar mdulos desde ;isualStudio*4E5BU + el tipo )ue contiene el punto de entrada a utilizar opcin /mainB seindica en Common Properties )eneral $tartup *bject

    Winalemente% para aadir al pro+ecto re&erencias a ensam$lados e-ternos opcin /rB$asta seleccionar Project &dd Re+erenceen el men, principal de ;S*4E5*

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    33/261

    El lenguaje de programacin C# 5ema 3 ntroduccin a C#

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    34/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    TEMA ?: E =@E=@O+ESA&O@

    Concepto de preprocesador

    El

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    35/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    Pero este otro no% pues aun)ue ocupa una l.nea tiene la sinta-is de los comentarios )uepueden ocupar (arias l.neas3

    3de4ine 5/S5 8: Ha 6a"ido al09n error durante el 2re2rocesado :8

    &efinicin de identificadores de !re!rocesado

    Como +a se /a comentado% la principal utilidad del preprocesador en C# es la depermitir determinar cules regiones de cdigo de un &ic/ero &uente se /an de compilar*Para ello% lo )ue se /ace es encerrar las secciones de cdigo opcionales dentro dedirecti(as de compilacin condicional% de modo )ue slo se compilarn si determinadosidenti&icadores de preprocesado estn de&inidos* Para de&inir un identi&icador de estetipo la directi(a )ue se usa sigue esta sinta-is3

    ,definenom"redenti4icador#

    Esta directi(a de&ine un identi&icador de preprocesado :nom-re;denti?@1se /ar.a3

    3de4ine 1?

    Por con(enio se da a estos identi&icadores nom$res en los )ue todas las letras se

    escri$en en ma+,sculas% como en el ejemplo anterior* Aun)ue es slo un con(enio +nada o$liga a usarlo% sta ser la nomenclatura )ue usaremos en el presente documento%)ue es la usada por 6icroso&t en sus cdigos de ejemplo* Con(iene &amiliarizarse conella por)ue por un lado /a+ muc/o cdigo escrito )ue la usa + por otro usarla &acilita lalectura de nuestro cdigo a los dems al ser la notacin )ue esperarn encontrar*

    Es importante sealar )ue cual)uier de&inicin de identi&icador /a de preceder acual)uier aparicin de cdigo en el &ic/ero &uente* Por ejemplo% el siguiente cdigo noes (lido% pues antes del ,define se /a incluido cdigo &uente el class B3

    class ?

    3de4ine 1?{

    Sin em$argo% aun)ue no pueda /a$er cdigo antes de un 6de

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    36/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    compilador son e)ui(alentes + de&inen identi&icadores de preprocesado de nom$res4>?@1+ T>Adurante la compilacin de un &ic/ero &uente de nom$re e7emlo.cs3

    csc *d+4>?@1 *d+T>A e7emlo.cs

    csc *d+4>?@1#T>A e7emlo.cs

    csc *d+4>?@1&T>A e7emlo.cs

    4tese en el ejemplo )ue si )ueremos de&inir ms de un identi&icador usando estatcnica tenemos dos alternati(as3 incluir (arias opciones /den la llamada al compiladoro de&inir (arios de estos identi&icadores en una misma opcin /dseparndolos mediantecaracteres de coma BB o punto + coma CB

    Si se tra$aja con ;isual Studio*4E5 en lugar de directamente con el compilador enl.nea de comandos% entonces puede conseguir mismo e&ecto a tra(s de(iewProperty Pages Con+iguration *ptions Build Conditional

    Compilation Constants% donde nue(amente usado el punto + coma CB o la coma BB

    como separadores% puede de&inir (arias constantes* Para )ue todo &uncione $ien% antesde seleccionar (iew/a de seleccionar en el Solution E%!lorerse a$re con(iew$olution 'xplorerB el pro+ecto al )ue aplicar la de&inicin de las constantes*

    Winalmente% respecto al uso de ,defineslo )ueda comentar )ue es posi$le de&inir (arias(eces una misma directi(a sin )ue ello pro(o)ue ning,n tipo de error en el compilador%lo )ue permite )ue podamos pasar tantos (alores a la opcin /ddel compilador como)ueramos sin temor a )ue entren en con&licto con identi&icadores de preprocesado +aincluidos en los &uentes a compilar*

    Eliminacin de identificadores de !re!rocesado

    el mismo modo )ue es posi$le de&inir identi&icadores de preprocesado% tam$in esposi$le eliminar de&iniciones de este tipo de identi&icadores pre(iamente realizadas*Para ello la directi(a )ue se usa tiene la siguiente sinta-is3

    ,undef nom"redenti4icador#

    En caso de )ue se intente eliminar con esta directi(a un identi&icador )ue no /a+a sidode&inido o cu+a de&inicin +a /a+a sido eliminada no se producir error alguna% sino )uesimplemente la directi(a de eliminacin ser ignorada* El siguiente ejemplo muestra un

    ejemplo de esto en el )ue el segundo ,undefes ignorado3

    3de4ine @/

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    37/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    Como se /a repetido (arias (eces a lo largo del tema% la principal utilidad delpreprocesador en C# es la de permitir la compilacin de cdigo condicional% lo )ueconsiste en slo permitir )ue se compile determinadas regiones de cdigo &uente si las(aria$les de preprocesado de&inidas cumplen alguna condicin determinada* Paraconseguir esto se utiliza el siguiente juego de directi(as3

    ,ifcondiciAn$#cAdi0o$#

    elif

    ...else

    ,endif

    El signi&icado de una estructura como esta es )ue si se cumple :condiciBn= entoncesse pasa al compilador el :cBdigo=% si no ocurre esto pero se cumple :condiciBnD=

    entonces lo )ue se pasar.a al compilador ser.a :cBdigoD=% + as. continuamente /asta)ue se llegue a una rama ,elifcu+a condicin se cumpla* Si no se cumple ninguna pero/a+ una rama ,else se pasar al compilador el cAdi0o/lse#% pero si dic/a rama noe-istiese entonces no se le pasar.a cdigo alguno + se continuar.a preprocesando elcdigo siguiente al ,endifen el &uente original*

    Aun)ue las ramas ,else + ,endifson opcionales% /a+ )ue tener cuidado + no mezclarlas+a )ue la rama ,elseslo puede aparecer como ,ltima rama del $lo)ue ,if***,endif*

    Es posi$le anidar (arias estructuras ,if...,endif% como muestra el siguiente cdigo3

    3de4ine 1?

    usin0 System;

    class ?{

    2u"lic static void Main(){

    3i4 1?Console.Write (/sto es una 2rue"a);3i4 5

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    38/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    encuentre de&inido el identi&icador de preprocesado T>Ase /an de pasar al compiladorlas instrucciones a continuacin indicadas o sea% el Console.Write(sin traEa"%&B

    El cdigo &uente )ue el preprocesador pasar al compilador en caso de )ue compilemossin especi&icar ninguna opcin /den la llamada al compilador ser3

    usin0 System;

    class ?{

    2u"lic static void Main(){

    Console.Write(/sto es una 2rue"a);Console.Write( sin traa);

    4tese como en el cdigo )ue se pasa al compilador +a no aparece ninguna directi(a depreprocesado% pues lo )ue el preprocesador le pasa es el cdigo resultante de aplicar aloriginal las directi(as de preprocesado )ue contu(iese*

    Asimismo% si compilsemos el cdigo &uente original llamando al compilador con*d+T>A% lo )ue el preprocesador pasar.a al compilador ser.a3

    usin0 System;

    class ?{

    2u"lic static void Main()

    { Console.Write (/sto es una 2rue"a);Console.Write( sin traa);

    8asta a/ora solo /emos (isto )ue la condicin de un ,if o ,elif puede ser unidenti&icador de preprocesado% + )ue este (aldr true o

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    39/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    Es &cil (er )ue la causa de la restriccin antes comentada de )ue no es (lido dar uncomo nom$re true o falsea un identi&icador de preprocesado se de$e al signi&icadoespecial )ue estos tienen en las condiciones de los ,if+ ,elif

    Feneracin de a"isos y errores

    El preprocesador de C# tam$in o&rece directi(as )ue permiten generar a(isos + erroresdurante el proceso de preprocesado en caso de )ue ser interpretadas por el

    preprocesador* Estas directi(as tienen la siguiente sinta-is3

    ,4arnin$mensaEe?viso#,errormensaEe/rror#

    ?a directi(a ,4arnin$ lo )ue /ace al ser procesada es pro(ocar )ue el compilador

    produzca un mensaje de a(iso )ue siga el &ormato estndar usado por ste para ello +cu+o te-to descripti(o tenga el contenido indicado en :mensa7e2iso=U + ,error/ace lomismo pero pro(ocando un mensaje de error en (ez de uno de a(iso*

    Ksando directi(as de compilacin condicional se puede controlar cuando se /an deproducir estos mensajes% cuando se /an de procesar estas directi(as* e /ec/o laprincipal utilidad de estas directi(as es permitir controlar errores de asignacin de(alores a los di&erentes identi&icadores de preprocesado de un cdigo% + un ejemplo deello es el siguiente3

    3Jarnin0 CAdi0o aun no revisado

    3de4ine 1?3i4 1? K?L

    3error =n cAdi0o no 2uede ser simultGneamente de 2rue"a y versiAn 4inal3endi4class ?{

    En este cdigo siempre se producir el mensaje de a(iso% pero el ,ifindica )ue slo seproducir el mensaje de error si se /an de&inido simultneamente los identi&icadores depreprocesado 1?+ K?L

    Como puede deducirse del ejemplo% el preprocesador de C# considera )ue los mensajes

    asociados a directi(as ,4arnin$ o ,error son todo el te-to )ue se encuentra tras elnom$re de dic/as directi(as + /asta el &inal de la l.nea donde stas aparecen* Por tanto%todo comentario )ue se inclu+a en una l.nea de este tipo ser considerado como partedel mensaje a mostrar% + no como comentario como tal* Por ejemplo% ante la directi(a3

    3error La com2ilaciAn 6a 4allado 88 /rror

    ?o )ue se mostrar en pantalla es un mensaje de la siguiente &orma3

    Kic6ero.cs(')% error CS$&N% La com2ilaciAn 6a 4allado 88 /rror

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    40/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    +ambios en la numeracin de l>neas

    Por de&ecto el compilador enumera las l.neas de cada &ic/ero &uente seg,n el ordennormal en )ue estas aparecen en el mismo% + este orden es el )ue sigue a la /ora dein&ormar de errores o de a(isos durante la compilacin* Sin em$argo% /a+ situaciones en

    las )ue interesa cam$iar esta numeracin% + para ello se o&rece una directi(a con lasiguiente sinta-is3

    ,linen9mero# *+

    Esta directi(a indica al preprocesador )ue /a de considerar )ue la siguiente l.nea del&ic/ero &uente en )ue aparece es la l.nea cu+o n,mero se le indica% independientementedel (alor )ue tu(iese seg,n la numeracin usada en ese momento* El (alor indicado enes opcional% + en caso de aparecer indica el nom$re )ue se /a deconsiderar )ue tiene el &ic/ero a la /ora de dar mensajes de error* Kn ejemplo3

    3line $&+ csmace.cs

    Este uso de ,lineindica )ue el compilador /a de considerar )ue la l.nea siguiente es lal.nea 1[ del &ic/ero csmace.cs* A partir de ella se seguir usando el sistema denumeracin normal la siguiente a esa ser la 1R de csmace.cs% la pr-ima la DF%etc*B sal(o )ue ms adelante se (uel(a a cam$iar la numeracin con otra directi(a ,line*

    Aun)ue en principio puede parecer )ue esta directi(a es de escasa utilidad% lo cierto es)ue suele (enir $astante $ien para la escritura de compiladores + otras /erramientas )uegeneren cdigo en C# a partir de cdigo escrito en otros lenguajes*

    Marcacin de re$iones de cdi$o

    Es posi$le marcar regiones de cdigo + asociarles un nom$re usando el juego dedirecti(as ,re$ion+ ,endre$ion* Estas directi(as se usan as.3

    ,re$ionnom"reegiBn=* 5ras ello% el \X] se con(ertir en un \'] + si (ol(emos a pulsarlo elcdigo contra.do se e-pandir + recuperar su aspecto original* A continuacin semuestra un ejemplo de cada caso3

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    41/261

    El lenguaje de programacin C# 5ema !3 El Preprocesador

    I-0;9672 4: Cdigo de regin e-pandido

    I-0;9672 5: Cdigo de regin contra.do

    8a+ )ue tener cuidado al anidar regiones con directi(as de compilacin condicional% +a)ue todo $lo)ue ,if...,endif)ue comience dentro de una regin /a de terminar tam$indentro de ella* Por tanto% el siguiente uso de la directi(a ,re$ionno es (alido +a )ue>egiBn@rrBneatermina estando el $lo)ue,if...,endifa$ierto3

    3re0ion

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    42/261

    El lenguaje de programacin C# 5ema "3 Aspectos l-icos

    TEMA G: AS=E+TOS H)I+OS

    Comentarios

    Kn 6?297es te-to )ue incluido en el cdigo &uente de un programa con la idea de&acilitar su legi$ilidad a los programadores + cu+o contenido es% por de&ecto%completamente ignorado por el compilador* Suelen usarse para incluir in&ormacinso$re el autor del cdigo% para aclarar el signi&icado o el por)u de determinadassecciones de cdigo% para descri$ir el &uncionamiento de los mtodos de las clases% etc*

    En C# /a+ dos &ormas de escri$ir comentarios* ?a primera consiste en encerrar todo elte-to )ue se desee comentar entre caracteres+ siguiendo la siguiente sinta-is3

    te,to#

    Estos comentarios pueden a$arcar tantas l.neas como sea necesario* Po ejemplo3

    8: /sto es un comentario Fue eEem2li4ica cAmo se escri"e comentarios Fue ocu2en varias lOneas :8

    A/ora $ien% /a+ )ue tener cuidado con el /ec/o de )ue no es posi$le anidar comentariosde este tipo* Es decir% no (ale escri$ir comentarios como el siguiente3

    8: Comentario contenedor 8: Comentario contenido :8 :8

    Esto se de$e a )ue como el compilador ignora todo el te-to contenido en un comentario+ slo $usca la secuencia )ue marca su &inal% ignorar el segundo+ cuando llegue al

    primer considerar )ue /a aca$ado el comentario a$ierto con el primer no ela$ierto con el segundoB + pasar a $uscar cdigo* Como el slo lo admite si /adetectado antes alg,n comentario a$ierto + a,n no cerrado no mientras $usca cdigoB%cuando llegue al segundo considerar )ue /a /a$ido un error +a )ue encontrar el ,/donde espera$a encontrar cdigo

    ado )ue muc/as (eces los comentarios )ue se escri$en son mu+ cortos + no suelenocupar ms de una l.nea% C# o&rece una sinta-is alternati(a ms compacta para la

    escritura este tipo de comentarios en las )ue se considera como indicador del comienzodel comentario la pareja de caracteres + como indicador de su &inal el &in de l.nea* Portanto% la sinta-is )ue siguen estos comentarios es3

    88 te,to#

    V un ejemplo de su uso es3

    88 /ste comentario eEem2li4ica como escri"ir comentarios a"reviados de una sola lOnea

    Estos comentarios de una sola l.nea s. )ue pueden anidarse sin ning,n pro$lema* Por

    ejemplo% el siguiente comentario es per&ectamente (lido388 Comentario contenedor 88 Comentario contenido

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    43/261

    El lenguaje de programacin C# 5ema "3 Aspectos l-icos

    !dentificadores

    Al igual )ue en cual)uier lenguaje de programacin% en C# un 727@769no es ms

    )ue% como su propio nom$re indica% un nom$re con el )ue identi&icaremos alg,nelemento de nuestro cdigo% +a sea una clase% una (aria$le% un mtodo% etc*

    5.picamente el nom$re de un identi&icador ser una secuencia de cual)uier n,mero decaracteres al&anumricos Zincluidas (ocales acentuadas + eesX tales )ue el primero deellos no sea un n,mero* Por ejemplo% identi&icadores (lidos ser.an3?rri"a%caPa%C'1%GQR% etcU pero no lo ser.an 'com%$&+% etc*

    Sin em$argo% + aun)ue por moti(os de legi$ilidad del cdigo no se recomienda% C#tam$in permite incluir dentro de un identi&icador caracteres especiales imprimi$lestales como s.m$olos de diresis% su$ra+ados% etc* siempre + cuando estos no tengan unsigni&icado especial dentro del lenguaje* Por ejemplo% tam$in ser.an identi&icadores(lidos%T"arco_%cUV+?>U pero no C3,indica inicio de directi(a de preprocesadoB o a!"indica operacin lgica NnotOBWinalmente% C# da la posi$ilidad de poder escri$ir identi&icadores )ue inclu+ancaracteres Knicode )ue no se puedan imprimir usando el teclado de la m)uina del

    programador o )ue no sean directamente (lidos de$ido a )ue tengan un signi&icadoespecial en el lenguaje* Para ello% lo )ue permite es escri$ir estos caracteres usando;602679; ;69

  • 8/13/2019 El Lenguaje de Programacic3b3n c

    44/261

    El lenguaje de programacin C# 5ema "3 Aspectos l-icos

    Aparte de estas pala$ras reser(adas% si en &uturas implementaciones del lenguaje sedecidiese incluir nue(as pala$ras reser(adas% 6icroso&t dice )ue dic/as pala$ras /a$r.ande incluir al menos dos s.m$olos de su$ra+ado consecuti(os TTB Por tanto% para e(itar

    posi$les con&lictos &uturos no se recomienda dar a nuestros identi&icadores nom$res )ue

    contengan dic/a secuencia de s.m$olos*

    Aun)ue directamente no podemos dar estos nom$res a nuestros identi&icadores% C#proporciona un mecanismo para /acerlo indirectamente + de una &orma muc/o mslegi$le )ue usando secuencias de escape* Este mecanismo consiste en usar el carcter -

    para pre&ijar el nom$re coincidente con el de una pala$ra reser(ada )ue )ueramos dar anuestra (aria$le* Por ejemplo% el siguiente cdigo es (lido3

    class Yclass { static void Ystatic("ool Y"ool) {

    i4 (Y"ool) Console.WriteLine(ZciertoZ); else Conso