Está en la página 1de 217

LENGUAJE DE PROGRAMACIN

1 de 217

ndice de contenido
1 Introduccin......................................................................................................................................5 1.1 Prerrequisitos...........................................................................................................................5 1.2 Crear una base de datos...........................................................................................................6 1.3 Definicin de un proyecto asp.net.........................................................................................10 2 C#...................................................................................................................................................18 2.1 ain!"....................................................................................................................................18 2.2 Crear un proyecto de conso#a.................................................................................................1$ 2.3 na%espace..............................................................................................................................20 2.& 'ipos de (ariab#es .................................................................................................................20 2.5 )#ias.......................................................................................................................................21 2.6 'ipos* (ariab#es y (a#ores.......................................................................................................21 2.6.1 'ipos inte+rados..............................................................................................................22 2.6.2 ,et'ype...........................................................................................................................23 2.6.3 typeof .............................................................................................................................23 2.6.& 'ipos persona#i-ados.......................................................................................................23 2.. Con(ersin bo/in+ y unbo/in+..............................................................................................23 2...1 0o/in+.............................................................................................................................2& 2...2 1nbo/in+.........................................................................................................................25 2.8 Con(ert...................................................................................................................................26 2.8.1 'o0oo#ean.......................................................................................................................26 2.8.2 IsD02u##.........................................................................................................................26 2.8.3 Cdi+os ascii...................................................................................................................2. 2.8.& 'oC3ar.............................................................................................................................2. 2.8.5 'oDate'i%e!"..................................................................................................................28 2.8.6 'oDeci%a#!"* 'oDoub#e!"* 'o4in+#e!".............................................................................28 2.8.. 'oInt16!"* 'oInt32!"* 'oInt6&!".......................................................................................28 3 5todos..........................................................................................................................................30 3.1 Pasar par6%etros....................................................................................................................30 3.2 7a#ores de(ue#tos...................................................................................................................31 3.3 ie%bros static .....................................................................................................................32 3.& Constantes..............................................................................................................................32 3.&.1 const................................................................................................................................33 3.&.2 readon#y...........................................................................................................................33 3.5 out .........................................................................................................................................33 3.6 ref...........................................................................................................................................33 3.. )rre+#os..................................................................................................................................3& & )rre+#os..........................................................................................................................................35 &.1 foreac3...................................................................................................................................35 &.2 atrices unidi%ensiona#es....................................................................................................36 &.3 atrices unidi%ensiona#es....................................................................................................36 &.& Cantidad de fi#as y co#u%nas.................................................................................................3. &.5 Pasar %atrices co%o ar+u%entos...........................................................................................3. &.6 para%s....................................................................................................................................3$ 5 8unciones........................................................................................................................................&1 5.1 strin+......................................................................................................................................&1 5.1.1 99* :qua#s.......................................................................................................................&1 5.2 8unciones 4trin+....................................................................................................................&1 5.3 In%utabi#idad y #a c#ase 4trin+0ui#der..................................................................................&3
2 de 217

5.& 4trin+0ui#der .........................................................................................................................&& 5.5 8unciones 8ec3a;<ora...........................................................................................................&& 5.6 8unciones at3......................................................................................................................&. 6 struct ; enu%...................................................................................................................................&$ 6.1 :=e%p#os................................................................................................................................50 6.2 enu% ......................................................................................................................................51 . C#ases..............................................................................................................................................56 ..1 c#ass........................................................................................................................................5. ..2 pri(ate....................................................................................................................................58 ..3 pub#ic.....................................................................................................................................5$ ..& Constructores.........................................................................................................................5$ ..5 Constructores predeter%inados..............................................................................................61 ..6 Constructores pri(ados..........................................................................................................61 ... Destructores ..........................................................................................................................62 ..8 C#ases static............................................................................................................................63 8 <erencia..........................................................................................................................................6& 8.1 Propiedades............................................................................................................................6& 8.1.1 )cceso +et.......................................................................................................................65 8.1.2 utador set.....................................................................................................................66 8.2 <erencia.................................................................................................................................68 8.3 (irtua#.....................................................................................................................................68 8.& o(erride..................................................................................................................................6$ 8.5 protected..................................................................................................................................2 8.6 base.........................................................................................................................................2 8.. sea#ed......................................................................................................................................& 8.8 C#ases abstractas.....................................................................................................................5 $ ,rid7ie>........................................................................................................................................81 $.1.1 8or%atear ,rid7ie>.......................................................................................................86 $.1.2 8or%ateos especia#es.......................................................................................................$8 $.1.3 8i#trar datos...................................................................................................................102 10 ?b=etos........................................................................................................................................112 10.1.1 0utton..........................................................................................................................112 10.1.2 C3ec@0o/....................................................................................................................112 10.1.3 C3ec@edAist0o/..........................................................................................................113 10.1.& Co%bo0o/..................................................................................................................113 10.1.5 Date'i%erPic@er.........................................................................................................113 10.1.6 Aabe#............................................................................................................................113 10.1.. Ain@Aabe#....................................................................................................................113 10.1.8 Aist0o/........................................................................................................................113 10.1.$ ont3Ca#endar............................................................................................................113 10.1.10 Badio0utton..............................................................................................................113 10.1.11 'e/t0o/.....................................................................................................................113 10.1.12 ,roup0o/..................................................................................................................11& 10.1.13 Pane#..........................................................................................................................11& 10.1.1& 'abContro#.................................................................................................................11& 11 Insertar datos...............................................................................................................................115 12 :#i%inar datos.............................................................................................................................12$ 13 )ctua#i-ar datos..........................................................................................................................1&0 1& 7a#idaciones................................................................................................................................155 1&.1 Bequired8ie#d7a#idator......................................................................................................156 1&.2 Ban+e7a#idator...................................................................................................................158
3 de 217

1&.3 Be+u#ar:/pression7a#idator..............................................................................................163 1&.& Co%pare7a#idator..............................................................................................................166 1&.5 Custo%7a#idator................................................................................................................1.3 15 aster Pa+e ; enCs..................................................................................................................1.6 16 )utentificacin...........................................................................................................................1$6 16.1 Aas c#ases de for%as de autenticacin...............................................................................1$6 16.2 8or%s)ut3entication.........................................................................................................1$6 16.3 <as3Pass>ord8or4torin+InConfi+8i#e..............................................................................202 1. ane=o de 4ession......................................................................................................................20$ 1..1 Infor%acin +enera# acerca de# estado de sesin...............................................................20$ 1..2 7ariab#es de sesin.............................................................................................................20$ 1..3 Identificadores de sesin....................................................................................................20$ 18 1so de fotos................................................................................................................................213 18.1 8i#e1p#oad.........................................................................................................................213 18.2 4a(e)s...............................................................................................................................213 18.3 <as8i#e...............................................................................................................................21& 18.& <ttpPosted8i#e...................................................................................................................21& 18.5 Posted8i#e...........................................................................................................................21& 18.6 )#%acenar arc3i(o en una carpeta.....................................................................................21& 1$ >eb.confi+..................................................................................................................................216 1$.1 3ttpBunti%e ......................................................................................................................216

4 de 217

Introduccin

ASP.NET es un framework para aplicaciones web desarrollado y comerciali ado por !icrosof". Es usado por pro#ramadores para cons"ruir si"ios web din$micos% aplicaciones web y ser&icios web '!(. Apareci) en enero de 2**2 con la &ersi)n 1.* del .NET +ramework% y es la "ecnolo#,a sucesora de la "ecnolo#,a Ac"i&e Ser&er Pa#es -ASP.. ASP.NET es"a cons"ruido sobre el /ommon (an#ua#e 0un"ime% permi"iendo a los pro#ramadores escribir c)di#o ASP.NET usando cual1uier len#ua2e admi"ido por el .NET +ramework.

1.1

Prerrequisitos

1. +orma"ear compu"adora 2. 3ns"alar 4indows 'P Professional 3. 3ns"alar 33S5 Panel de con"rol% A#re#ar o 1ui"ar pro#ramas% A#re#ar o 1ui"ar componen"es de 4indows.

4. 6a2ar "odas las ac"uali aciones. 7bser&ar 1ue no 8emos ins"alado An"i&irus. 9. 3ns"alar :isual S"udio 2**9.

9 de 217

;. 6a2ar "odas las ac"uali aciones. <ebe &erificar las &ersiones de .Ne" +ramework 2.* ins"aladas.

7. 3ns"alar S1l Se&er 2**9. =. 6a2ar "odas las ac"uali aciones. >. 3ns"alar An"i&irus 7bser&aci)n5 El 33S no es compa"ible con al#unos ser&idores web? o sea% no pueden funcionar ambos al mismo "iempo. En es"e caso% se recomienda de2ar por arriba el ser&icio el 33S y los dem$s aba2o.

1.2

Crear una base de datos

3n#resar a la consola de adminis"raci)n de S1l Ser&er 2**9.

3ndicar los par$me"ros de cone@i)n.

; de 217

Acceder a la opci)n indicada.

Poner un nombre a la base. En es"e caso Aunderoa"8B y 8acer clic en Acep"ar.

7 de 217

/rear una "abla.

Par"e 1

Par"e 25 /rear la PC.

= de 217

Especificar 1ue la PC es au"ocorrela"i&o.

Par"e 35 3ndicar al campo es"a"ura 2 decimales.

Drabar.

> de 217

3n#resar los si#uien"es da"os5

7bser&ar 1ue EombreFfalse y !u2erF"rue. Adem$s% las cifras decimales en la confi#uraci)n re#ional de mi e1uipo se separan con coma.

1.3

Definicin de un proyecto asp.net

/rear un nue&o proyec"o.

1* de 217

Si el 33S no funciona en su e1uipo puede "raba2ar para el desarrollo de pruebas con un ser&idor 1ue pro&ee :isual S"udio. En es"e caso la elecci)n ser,a.

Eacer clic en E@aminar... y seleccionar una carpe"a.

11 de 217

(ue#o 8acer clic en Acep"ar.

Se consi#ue.

12 de 217

Se debe 8acer una prueba para comprobar el funcionamien"o correc"o. Seleccionar la opci)n por defec"o.

13 de 217

Para el caso de una aplicaci)n 1ue corre con 33S se "iene. /rear un nue&o proyec"o.

Eacer clic en e@aminar... y lue#o en Nue&o Si"io 4eb...

14 de 217

Eace clic en el icono A/rear nue&o direc"orio &ir"ualB

3ndicar un alias y una carpe"a en donde se almacenar$ el proyec"o. El alias es el nombre median"e el cual se accede a la aplicaci)n.

19 de 217

Podemos obser&ar 1ue se 8a a#re#ado el alias al 33S. Eacer clic en Abrir.

Eacer clic en Acep"ar.

1; de 217

Se "iene lo si#uien"e. Se debe e2ecu"ar el proyec"o para comprobar 1ue "enemos ser&icio.

Es"amos 7C.

17 de 217

2 C#
/G -pronunciado si s8arp en in#lHs. es un len#ua2e de pro#ramaci)n orien"ado a ob2e"os desarrollado y es"andari ado por !icrosof" como par"e de su pla"aforma .NET% 1ue despuHs fue aprobado como un es"$ndar por la E/!A -E/!AI334. e 3S7 -3S7J3E/ 2327*..

2.1

Main()
En un pro#rama de /G% s)lo puede 8aber un pun"o de en"rada. Si "iene m$s de una clase con un mH"odo !ain% en"onces debe compilar el pro#rama con la opci)n del compiladorJmain para especificar 1uH mH"odo !ain se &a a u"ili ar como pun"o de en"rada.

El mH"odo !ain es el pun"o de en"rada de una aplicaci)n de consola de /G o una aplicaci)n para 4indows. /uando se inicia la aplicaci)n% el mH"odo !ain es el primer mH"odo 1ue se in&oca.

c ass !estC ass " static #oid Main(strin$%& ar$s) " '.... ( ( 7bser&aciones5 El mH"odo !ain es el pun"o de en"rada de un pro#rama .e@e% donde se inicia y finali a el con"rol del pro#rama. !ain se declara den"ro de una clase o un s"ruc". !ain debe ser de "ipo es"$"ico% no public. -En el e2emplo an"erior% recibe el acceso prede"erminado de pri&a"e.. No es necesario 1ue el s"ruc" o la clase 1ue con"iene al mH"odo !ain sean de "ipo es"$"ico. !ain puede "ener un "ipo de &alor de&uel"o &oid o in". As,% son &$lidos5 static #oid Main() " ... ( static int Main() " ... return )* ( A diferencia de / y /KK% el nombre del pro#rama no se "ra"a como el primer ar#umen"o de la l,nea de comandos. /omo !ain es s"a"ic% en"onces "odos las llamadas a elemen"os e@"ernos deben ser "ambiHn s"a"ic. Por e2emplo% &ariables y mH"odos. c ass + " pub ic #oid ,() " Conso e.-rite.ine(/+.,/)* ( ( c ass Pro$ra0 " + 1 2 ne3 +()* static #oid Main(strin$%& ar$s) " 1.,()* 445rror e ob6eto 1 debe ser static Conso e.7ead.ine()* ( ( Para solucionar el problema5 c ass + " pub ic #oid ,() " Conso e.-rite.ine(/+.,/)* ( ( c ass Pro$ra0 "
1= de 217

static + 1 2 ne3 +()* static #oid Main(strin$%& ar$s) " 1.,()* Conso e.7ead.ine()* ( ( 7bser&ar 1ue "ambiHn es &alido5 c ass + " pub ic #oid ,() " Conso e.-rite.ine(/+.,/)* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " + 1 2 ne3 +()* 1.,()* Conso e.7ead.ine()* ( (

2.2

Crear un proyecto de conso a

1> de 217

Al e2ecu"ar se "iene5

2.3

na0espace
class% in"erfa % s"ruc"% enum% dele#a"e -Produce un pun"ero a un mH"odo% lo cual es"$ fuera de los ob2e"i&os de es"e curso. Adem$s% son la base para el uso de e&en"os.. (os espacios de nombres -namespace. disponen impl,ci"amen"e de un acceso pLblico 1ue no puede modificarse.

(a palabra cla&e namespace se u"ili a para declarar un $mbi"o. <en"ro de un espacio de nombres% se pueden declarar uno o &arios de los si#uien"es "ipos5

7bser&aciones5

2.8
C# !ipo sby"e s8or" in" lon# by"e us8or" uin" ulon# floa" double

!ipos de #ariab es
.9et ,ra0e3or: Sys"em.Sby"e Sys"em.3n"1; Sys"em.3n"32 Sys"em.3n";4 Sys"em.6y"e Sys"em.Min"1; Sys"em.M3n"32 Sys"em.Min";4 Sys"em.Sin#le Sys"em.<ouble 7an$o I12= a 127 I327;= a 327;7 I21474=3;4= a 21474=3;47 I>223372*3;=94779=*= a >223372*3;=94779=*7 * a 299 * a ;9939 * a 42>4>;72>9 * a 1=44;744*737*>991;19 N1.9 @ 1*I49 a N3.4 @ 1*3= con 7 decimales N9.* @ 1*I324 a N1.7 @ 1*3*= con 19 o 1; decimales
2* de 217

decimal c8ar bool

Sys"em.<ecimal Sys"em./8ar Sys"em.6oolean

N1.* @ 1*I2= a N7.> @ 1*2= con 2= o 2> decimales -N7 pierde precisi)n en los deciameles. /ual1uier carac"er Mnicode "rue o false

2.;

< ias

/G permi"e in&ocar por medio de un alias a al#unos "ipos de da"os. Por e2mplo Sys"em.3n"32 se in&oca median"e el alias in".

2.=

!ipos> #ariab es y #a ores

/G es un len#ua2e con es"ablecimien"o infle@ible de "ipos. Todas las &ariables y cons"an"es "ienen un "ipo% al i#ual 1ue "oda e@presi)n 1ue da como resul"ado un &alor. /ada firma de mH"odo especifica un "ipo para cada par$me"ro de en"rada y para el &alor de&uel"o. (a biblio"eca de clases .NET +ramework define un con2un"o de "ipos numHricos in"e#rados y "ipos m$s comple2os 1ue represen"an una amplia &ariedad de cons"rucciones l)#icas% como el sis"ema de arc8i&os% cone@iones de red% colecciones y ma"rices de ob2e"os y fec8as. Mn pro#rama ",pico de /G usa los "ipos de la biblio"eca de clases% as, como "ipos definidos por el usuario 1ue modelan los concep"os espec,ficos del dominio problem$"ico del pro#rama. El compilador u"ili a informaci)n de "ipos para ase#urarse de 1ue "odas las operaciones 1ue se reali an en el c)di#o cumplen la se#uridad de "ipos. Por e2emplo% si declara una &ariable de "ipo in"% el compilador permi"e u"ili ar la &ariable en operaciones de suma y res"a. Si in"en"a reali ar esas mismas operaciones con una &ariable de "ipo bool% el compilador #enera un error% como se mues"ra en el e2emplo si#uien"e5 int a 2 ;* int b 2 a ? 2* 44@A boo test 2 true* 44 5rror. @perator B?B no puede ser ap icado a untipo BintB y Bboo B. int c 2 a ? test* Al declarar una &ariable o una cons"an"e en un pro#rama% debe especificar su "ipo o u"ili ar la palabra cla&e &ar para permi"ir 1ue el compilador infiera el "ipo. En el e2emplo si#uien"e se mues"ran al#unas declaraciones de &ariables 1ue u"ili an "ipos numHricos in"e#rados y "ipos comple2os definidos por el
21 de 217

usuario5 44 C o dec aracionesD f oat te0perature* strin$ na0e* MyC ass 0yC ass* 44 Dec araciones con #a ores inicia es cEar first.etter 2 BCB* #ar i0it 2 3* int%& source 2 " )> 1> 2> 3> 8> ; (* #ar query 2 fro0 ite0 in source 3Eere ite0 F2 i0it se ect ite0* (os "ipos de los par$me"ros de mH"odo y de los &alores de&uel"os se especifican en la firma del mH"odo. (a firma si#uien"e mues"ra un mH"odo 1ue re1uiere in" como ar#umen"o de en"rada y de&uel&e una cadena5 pri#ate strin$%& na0es 2 " /Cpencer/> /Ca y/> /Dou$/ (* pub ic strin$ Get9a0e(int ID) " if (ID F na0es..en$tE) return na0es%ID&* e se return Ctrin$.50pty* 447etorna un #a or #acHo ( Mna &e declarada una &ariable% Hs"a no se puede &ol&er a declarar con un nue&o "ipo y "ampoco se le puede asi#nar un &alor 1ue no sea compa"ible con su "ipo declarado. Por e2emplo% no puede declarar in" y% a con"inuaci)n% asi#narle un &alor booleano de "rue. Sin embar#o% los &alores pueden con&er"irse en o"ros "ipos% por e2emplo% cuando se asi#nan a &ariables nue&as o se pasan como ar#umen"os de mH"odo.

2.=.1 !ipos inte$rados


(a si#uien"e "abla mues"ra las palabras cla&e para los "ipos in"e#rados de /G% las cuales son alias de "ipos predefinidos en el espacio de nombres Sys"em.

22 de 217

(as palabras cla&e de "ipos de /G y sus alias son in"ercambiables. Por e2emplo% se puede declarar una &ariable en"era de cual1uiera de es"as dos formas5 int 1 2 123* Cyste0.Int32 1 2 123*

2.=.2 Get!ype
Para mos"rar el "ipo real de cual1uier "ipo de /G% u"ilice el mH"odo del sis"ema De"Type-.. Por e2emplo% la si#uien"e ins"rucci)n mues"ra el alias de sis"ema 1ue represen"a el "ipo de my:ariable5 c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " int i 2 )* Conso e.-rite.ine(i.Get!ype())* * Conso e.7ead.ine()* ( (

2.=.3 typeof
Para ob"ener el "ipo de una e@presi)n en "iempo de e2ecuci)n% puede u"ili ar el mH"odo De"Type de .NET +ramework de la manera si#uien"e. na0espace Metodos " c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(typeof(strin$))* Conso e.-rite.ine(typeof(Pro$ra0))* Conso e.7ead.ine()* ( ( (

2.=.8 !ipos persona iIados


(as cons"rucciones s"ruc"% class% in"erface y enum se u"ili an para crear sus propios "ipos personali ados. (a biblio"eca de clases de .NET +ramework en s, es una colecci)n de "ipos personali ados proporcionada por !icrosof" 1ue puede u"ili ar en sus propias aplicaciones.

2.J

Con#ersin bo1in$ y unbo1in$

(a con&ersi)n bo@in# es el proceso de con&er"ir "ipos de &alores en el "ipo ob2ec" o en cual1uier "ipo de in"erfa implemen"ado por es"e "ipo de &alor. /uando /(0 aplica la con&ersi)n bo@in# a un "ipo de &alor% a2us"a el &alor den"ro de un elemen"o Sys"em.7b2ec" y lo almacena en el mon")n adminis"rado. Aplicar la con&ersi)n bo@in# es impl,ci"o? aplicar la con&ersi)n unbo@in# es e@pl,ci"o.

(a con&ersi)n unbo@in# e@"rae el "ipo de &alor del ob2e"o. En el e2emplo% se aplica la con&ersi)n bo@in# a la &ariable de "ipo en"ero i y es"a se asi#na al ob2ec" o. int i 2 123* ob6ect o 2 i* 44bo1in$ A con"inuaci)n% se puede aplicar la con&ersi)n unbo@in# al ob2e"o o y asi#narlo a la &ariable de en"ero i5 o 2 123* i 2 (int)o* 44unbo1in$ /on relaci)n a las asi#naciones simples% las con&ersiones bo@in# y unbo@in# son procesos 1ue consumen muc8os recursos. /uando se aplica la con&ersi)n bo@in# a un "ipo de &alor% se debe asi#nar y cons"ruir un
23 de 217

ob2e"o comple"amen"e nue&o. En menor #rado% la con&ersi)n de "ipos re1uerida para aplicar la con&ersi)n unbo@in# "ambiHn es cos"osa.

2.J.1 Ko1in$
(a con&ersi)n bo@in# se u"ili a para almacenar "ipos de &alor en el mon")n de recolecci)n de elemen"os no u"ili ados. 6o@in# es una con&ersi)n impl,ci"a de Tipos de &alores -0eferencia de /G. al "ipo ob2ec" o a cual1uier "ipo de in"erfa implemen"ado por es"e "ipo de &alor. Al aplicar la con&ersi)n bo@in# a un "ipo de &alor se asi#na una ins"ancia de ob2e"o en el mon")n y copia el &alor en el nue&o ob2e"o. /onsidere la si#uien"e declaraci)n de una &ariable de "ipo de &alor5 int i 2 123* (a si#uien"e ins"rucci)n aplica impl,ci"amen"e la operaci)n de bo@in# sobre la &ariable i5 ob6ect o 2 i* El resul"ado de es"a ins"rucci)n es crear una referencia de ob2e"o o en la pila 1ue 8ace referencia a un &alor del "ipo in" en el mon")n. Es"e &alor es una copia del &alor del "ipo de &alor asi#nado a la &ariable i. (a diferencia en"re las dos &ariables% i y o% se mues"ra en la si#uien"e ilus"raci)n.

TambiHn es posible reali ar la con&ersi)n bo@in# de manera e@pl,ci"a% "al como se mues"ra en el e2emplo si#uien"e% pero Hs"a nunca es necesaria5 int i 2 123* ob6ect o 2 (ob6ect)i* 44 e1p icit bo1in$ Es"e e2emplo con&ier"e una &ariable de en"ero i en un ob2e"o o median"e la con&ersi)n bo@in#. A con"inuaci)n% el &alor almacenado en la &ariable i se cambia de 123 a 49;. El e2emplo mues"ra 1ue el "ipo de &alor ori#inal y el ob2e"o empa1ue"ado usan ubicaciones de memoria independien"es y% por consi#uien"e% pueden almacenar &alores diferen"es. c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " int i 2 123* 44 Ko1in$ copies tEe #a ue of i into ob6ect o. ob6ect o 2 i* 44 CEan$e tEe #a ue of i. i 2 8;=* 44 !Ee cEan$e in i does not effect tEe #a ue stored in o. Cyste0.Conso e.-rite.ine(/!Ee #a ueLtype #a ue 2 ")(/> i)* Cyste0.Conso e.-rite.ine(/!Ee ob6ectLtype #a ue 2 ")(/> o)* Conso e.7eadAey()* ( ( El e2emplo si#uien"e mues"ra un caso de con&ersi)n unbo@in# no &$lida y la e@cepci)n 3n&alid/as"E@cep"ionresul"an"e. Si se u"ili a "ry y ca"c8% se mues"ra un mensa2e de error cuando se produce el error.

24 de 217

c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " int i 2 123* ob6ect o 2 i* 44 i0p icit bo1in$ try " int 6 2 (sEort)o* 44 5rror Cyste0.Conso e.-rite.ine(/Mnbo1in$ @A./)* ( catcE (Cyste0.In#a idCast51ception e) " Cyste0.Conso e.-rite.ine(/")( 5rrorD Incorrect unbo1in$./> e.Messa$e)* ( Conso e.7ead.ine()* ( ( Si cambia la ins"rucci)n5 int 6 2 (sEort) o* a5 int 6 2 (int) o* la con&ersi)n se reali ar$. /onsiderar 1ue para &alores numHricos de menor ran#o -como s8or". el error en es "iempo de e2ecuci)n y para &alores numHricos de mayor ran#o -como double. el error es en "iempo de compilaci)n.

2.J.2 Mnbo1in$
Mnbo@in# es una con&ersi)n e@pl,ci"a del "ipo ob2ec" a un "ipo de &alor o de un "ipo de in"erfa a un "ipo de &alor 1ue implemen"a la in"erfa . Mna operaci)n de unbo@in# consis"e en5 /omprobar la ins"ancia de ob2e"o para ase#urar 1ue se "ra"a de un &alor de con&ersi)n bo@in# del "ipo de &alor dado. /opiar el &alor de la ins"ancia en la &ariable de "ipo de &alor.

(as si#uien"es ins"rucciones mues"ran las operaciones de bo@in# y unbo@in#5 int i 2 123* 44 a #a ue type ob6ect o 2 i* 44 bo1in$ int 6 2 (int)o* 44 unbo1in$ En la ilus"raci)n si#uien"e se mues"ra el resul"ado de las ins"rucciones an"eriores.

Para 1ue la con&ersi)n Mnbo@in# de "ipos de &alores sea correc"a en "iempo de e2ecuci)n% el elemen"o al 1ue se aplica debe ser una referencia a un ob2e"o creado pre&iamen"e median"e la con&ersi)n 6o@in# de una ins"ancia de dic8o "ipo de &alor. 3n"en"ar aplicar la con&ersi)n unbo@in# null produce un Null0eferenceE@cep"ion. Si se in"en"a aplicar la con&ersi)n unbo@in# a una referencia de "ipo de &alor incompa"ible% se producir$ una e@cepci)n 3n&alid/as"E@cep"ion.

29 de 217

2.N

Con#ert

/on&ier"e un "ipo de da"os base en o"ro "ipo de da"os base.

2.N.1 !oKoo ean


/on&ier"e un &alor en boolean. To6oolean-&alue.5 /on&ier"e el &alor del nLmero decimal especificado en un &alor booleano e1ui&alen"e. Para los ar#umen"os numHricos es "rue si &alue es dis"in"o de cero? en caso con"rario% es false. To6oolean-S"rin# &alue.5 El &alor es "rue si &alue es i#ual a TrueS"rin#% o false si &alue es i#ual a +alseS"rin# o null.

c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(Con#ert.!oKoo ean(nu ))* 44Ctrin$.50ptyD 7epresenta a cadena #acHa 2 OP 44 Conso e.-rite.ine(Con#ert.!oKoo ean(Ctrin$.50pty))* 449@ se puede usar Conso e.-rite.ine(Con#ert.!oKoo ean(/true/))* Conso e.-rite.ine(Con#ert.!oKoo ean(Koo ean.!rueCtrin$))* Conso e.-rite.ine(Con#ert.!oKoo ean(/!rue/))* Conso e.-rite.ine(Con#ert.!oKoo ean(/ true /))* Conso e.-rite.ine(Con#ert.!oKoo ean(L1))* Conso e.-rite.ine(Con#ert.!oKoo ean()))* 44 Conso e.-rite.ine(Con#ert.!oKoo ean(/abc/))* 445rror no se puede usar Conso e.7ead.ine()* ( ( 7bser&aci)n5 No se pueden usar los "ipos5 /8ar% <a"eTime.

2.N.2 IsDK9u
<e&uel&e una indicaci)n en la 1ue se precisa si el ob2e"o especificado es de "ipo <6Null. < a 2 ne3 <()* if (Con#ert.IsDK9u (a)) Conso e.-rite.ine(/Qes nu /)* e se Conso e.-rite.ine(/9ot nu /)*

2; de 217

2.N.3 Cdi$os ascii

2.N.8 !oCEar
c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " 44 Conso e.-rite.ine(Con#ert.!oCEar(nu ))* 9@ se puede usar 44 Conso e.-rite.ine(Con#ert.!oCEar(Ctrin$.50pty))* 9@ se puede usar 44 Conso e.-rite.ine(Con#ert.!oCEar(/true/))* 44 Conso e.-rite.ine(Con#ert.!oCEar(Koo ean.!rueCtrin$))* Conso e.-rite.ine(Con#ert.!oCEar(/2/))* Conso e.-rite.ine(Con#ert.!oCEar(/(/))* 44 Conso e.-rite.ine(Con#ert.!oCEar(/aa/))* 9@ se puede usar Conso e.-rite.ine(Con#ert.!oCEar(12)))* Conso e.7ead.ine()* ( ( 7bser&aci)n5 No se pueden usar los "ipos5 <a"eTime% <ecimal% <ouble% Sin#le.
27 de 217

2.N.; !oDate!i0e()
/on&ier"e la represen"aci)n de cadena especificada de una fec8a y 8ora en un &alor de fec8a y 8ora e1ui&alen"e. strin$ dateCtrin$ 2 nu * Con#ert.!oDate!i0e(dateCtrin$)* 44 Con#ert a nu strin$. 44 Con#ert an e0pty strin$. dateCtrin$ 2 Ctrin$.50pty* Con#ert.!oDate!i0e(dateCtrin$)* 44 Con#ert a nonLdate strin$. dateCtrin$ 2 /not a date/* Con#ert.!oDate!i0e(dateCtrin$)* dateCtrin$ 2 /);4)141RR=/* Con#ert.!oDate!i0e(dateCtrin$)* dateCtrin$ 2 /!ue <pr 2N> 2))R/* Con#ert.!oDate!i0e(dateCtrin$)* dateCtrin$ 2 /-ed <pr 2N> 2))R/* Con#ert.!oDate!i0e(dateCtrin$)* dateCtrin$ 2 /)= Su y 2))N JD32D8J <M/* Con#ert.!oDate!i0e(dateCtrin$)* dateCtrin$ 2 /1JD32D8J.))3/* Con#ert.!oDate!i0e(dateCtrin$)* 7bser&aci)n5 S)lo se pueden usar el "ipo5 S"rin#.

2.N.= !oDeci0a ()> !oDoub e()> !oCin$ e()


:eamos el mH"odo To<ouble-S"rin# &alue.. /on&ier"e la represen"aci)n de cadena especificada de un nLmero en un nLmero de pun"o flo"an"e de precisi)n doble e1ui&alen"e. c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(Con#ert.!oDoub e(/212/))* Conso e.-rite.ine(Con#ert.!oDoub e(/2.12/))* 44 Conso e.-rite.ine(Con#ert.!oDoub e(/aa/))* 9@ se puede usar Conso e.-rite.ine(Con#ert.!oDoub e(/2>12/))* Conso e.7ead.ine()* ( ( 7bser&aci)n5 No se pueden usar los "ipos5 /8ar y <a"eTime.

2.N.J !oInt1=()> !oInt32()> !oInt=8()


:eamos el mH"odo To3n";4-S"rin# &alue.. /on&ier"e la represen"aci)n de cadena especificada de un nLmero en un en"ero de ;4 bi"s con si#no e1ui&alen"e. &alue represen"a un nLmero menor 1ue 3n";4.!in:alue -I >.223.372.*3;.=94.779.=*=. o mayor 1ue 3n";4.!a@:alue ->.223.372.*3;.=94.779.=*7 .. c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(Con#ert.!oInt=8(/212/))* 44 Conso e.-rite.ine(Con#ert.!oInt=8(/2.12/))* 9@ se puede usar 44 Conso e.-rite.ine(Con#ert.!oInt=8(/aa/))* 9@ se puede usar
2= de 217

44 Conso e.-rite.ine(Con#ert.!oInt=8(/2>12/))* 9@ se puede usar Conso e.-rite.ine(Con#ert.!oInt=8(/R2233J2)3=N;8JJ;N)J/))* 44 Conso e.-rite.ine(Con#ert.!oInt=8(/R2233J2)3=N;8JJ;N)N/))* 9@ se puede usar Conso e.7ead.ine()* ( (

7bser&aci)n5 No se pueden usar el "ipo5 <a"eTime.

2> de 217

3 MTtodos
(os mH"odos son un blo1ue de c)di#o 1ue con"iene una serie de ins"rucciones. En /G% cada ins"rucci)n se e2ecu"a en el con"e@"o de un mH"odo.

(os mH"odos se declaran en una clase o es"ruc"ura especificando el ni&el de acceso% el &alor de&uel"o% el nombre del mH"odo y los par$me"ros de mH"odo. (os par$me"ros de mH"odo se incluyen en"re parHn"esis y separados por comas. (os parHn"esis &ac,os indican 1ue el mH"odo no re1uiere nin#Ln par$me"ro.

Es"a clase con"iene "res mH"odos5 c ass Motorcyc e " pub ic #oid Ctart5n$ine() " ( pub ic #oid <ddGas(int $a ons) " ( pub ic int Dri#e(int 0i es> int speed) " return )* ( ( (lamar a un mH"odo en un ob2e"o es similar a "ener acceso a un campo. <espuHs del nombre de ob2e"o% a#re#ue un pun"o% el nombre del mH"odo y parHn"esis. (os ar#umen"os se enumeran en"re parHn"esis y separados por comas. Por "an"o% se puede llamar a los mH"odos de la clase !o"orcycle del modo si#uien"e5 Motorcyc e 0oto 2 ne3 Motorcyc e()* 44Ce crea un ob6eto de a c ase 44Ce a0a a os 0Ttodos 0oto.Ctart5n$ine()* 0oto.<ddGas(1;)* 0oto.Dri#e(;> 2))*

3.1

Pasar parU0etros

Mna &ariable de tipo de #a or con"iene direc"amen"e los da"os% a diferencia de una &ariable de tipo de referencia% 1ue con"iene una referencia a los da"os. Por lo "an"o% pasar una &ariable de "ipo de &alor a un mH"odo si#nifica pasar una copia de la &ariable al mH"odo. /ual1uier cambio en el par$me"ro 1ue se produ ca den"ro del mH"odo no afec"ar$ a los da"os ori#inales almacenados en la &ariable. Si se desea 1ue el mH"odo llamado pueda cambiar el &alor del par$me"ro% deber$ pasarlo por referencia% u"ili ando la palabra cla&e ref. El si#uien"e e2emplo ilus"ra el paso de par$me"ros de "ipo de &alor por &alor. (a &ariable n se pasa por &alor al mH"odo S1uare3". /ual1uier cambio 1ue se produ ca den"ro del mH"odo no afec"ar$ al &alor ori#inal de la &ariable. c ass Pro$ra0 " static #oid CquareIt(int 1) " 445 parU0etro 1 es pasado por #a or. 9@ afecta e #a or ori$ina de 1. 1 V2 1* Cyste0.Conso e.-rite.ine(/!Ee #a ue inside tEe 0etEodD ")(/> 1)* ( static #oid Main(strin$%& ar$s) " int n 2 ;* Cyste0.Conso e.-rite.ine(/!Ee #a ue before ca in$ tEe 0etEodD ")(/> n)* CquareIt(n)* 44Pasa a #ariab e por #a or Cyste0.Conso e.-rite.ine(/!Ee #a ue after ca in$ tEe 0etEodD ")(/> n)* Conso e.7ead.ine()* ( (

3* de 217

El si#uien"e e2emplo es i#ual 1ue el e2emplo an"erior% e@cep"o 1ue el par$me"ro se pasa median"e la palabra cla&e ref. El &alor del par$me"ro cambia despuHs de llamar al mH"odo. c ass Pro$ra0 " static #oid CquareIt(ref int 1) " 445 parU0etro 1 es pasado por referencia. 44CI afecta e #a or ori$ina de 1. 1 V2 1* Cyste0.Conso e.-rite.ine(/!Ee #a ue inside tEe 0etEodD ")(/> 1)* ( static #oid Main(strin$%& ar$s) " int n 2 ;* Cyste0.Conso e.-rite.ine(/!Ee #a ue before ca in$ tEe 0etEodD ")(/> n)* CquareIt(ref n)* 44Pasa a #ariab e por referencia Cyste0.Conso e.-rite.ine(/!Ee #a ue after ca in$ tEe 0etEodD ")(/> n)* Conso e.7ead.ine()* ( (

Mn e2emplo 8abi"ual de cambio de &alores de los par$me"ros pasados es el mH"odo Swap% en el 1ue se pasan dos &ariables% @ e y% y el mH"odo in"ercambia su con"enido. (os par$me"ros se deben pasar al mH"odo Swap por referencia? de o"ro modo% se es"ar$n u"ili ando copias locales de los par$me"ros den"ro del mH"odo. El si#uien"e es un e2emplo del mH"odo Swap 1ue u"ili a par$me"ros por referencia5 static #oid C3apKy7ef(ref int 1> ref int y) " int te0p 2 1* 1 2 y* y 2 te0p* ( /uando se in&oca es"e mH"odo% se debe u"ili ar la palabra cla&e ref en la llamada% como se mues"ra a con"inuaci)n5 static #oid Main() " int i 2 2> 6 2 3* Cyste0.Conso e.-rite.ine(/i 2 ")( 6 2 "1(/ > i> 6)* C3apKy7ef (ref i> ref 6)* Cyste0.Conso e.-rite.ine(/i 2 ")( 6 2 "1(/ > i> 6)* (

3.2

Wa ores de#ue tos

(os mH"odos pueden de&ol&er un &alor al llamador. Si el "ipo de &alor de&uel"o -el 1ue aparece an"es del nombre de mH"odo. no es &oid% el mH"odo puede de&ol&er el &alor median"e la palabra cla&e re"urn. Mna ins"rucci)n con la palabra cla&e re"urn% se#uida de un &alor 1ue coincida con el "ipo de &alor de&uel"o% de&ol&er$ ese &alor al llamador del mH"odo. (a palabra cla&e re"urn "ambiHn de"iene la e2ecuci)n del mH"odo. Si el "ipo de &alor de&uel"o es &oid% una ins"rucci)n re"urn sin nin#Ln &alor si#ue siendo L"il para de"ener la e2ecuci)n del mH"odo. Sin la palabra cla&e re"urn% el mH"odo de"endr$ la e2ecuci)n cuando lle#ue al fin del blo1ue de c)di#o. Es necesario 1ue los mH"odos con un "ipo de &alor de&uel"o no nulo u"ilicen la palabra cla&e re"urn para de&ol&er un &alor. Por e2emplo% es"os dos mH"odos u"ili an la palabra cla&e re"urn para de&ol&er en"eros5

31 de 217

c ass Ci0p eMatE " pub ic int <dd!3o9u0bers(int nu0ber1> int nu0ber2) " return nu0ber1 ? nu0ber2* ( pub ic int Cquare<9u0ber(int nu0ber) " return nu0ber V nu0ber* ( ( En el si#uien"e e2emplo% el mH"odo /alculaArea-. de&uel&e la &ariable area como un &alor de "ipo double. c ass Pro$ra0 " static doub e Ca cu ate<rea(int r) " doub e area 2 r V r V MatE.PI* return area* ( static #oid Main(strin$%& ar$s) " int radius 2 ;* Conso e.-rite.ine(/!Ee area is ")D).))(/> Ca cu ate<rea(radius))* Conso e.7ead.ine()* ( (

3.3

Mie0bros static
Si se crea al#una ins"ancia de la clase% en"onces no puede u"ili arse para "ener acceso al miembro es"$"ico. S)lo e@is"e una copia de los campos y e&en"os es"$"icos. (os mH"odos y propiedades es"$"icos s)lo pueden "ener acceso a campos y e&en"os es"$"icos. (as &ariables s"a"ic no pueden ser definidas en un mH"odo. (os miembros es"$"icos suelen u"ili arse para represen"ar da"os o c$lculos 1ue no cambian se#Ln el es"ado del ob2e"o.

Se puede llamar a mH"odos% campos% propiedades o e&en"os es"$"icos de una clase aun1ue no se 8aya creado nin#una ins"ancia de la misma.

A1u, &emos c)mo la &ariable @ conser&a sus &alores en"re llamadas sucesi&as. Sin embar#o% la &ariable y reinicia su &alor con"ra llamadas de diferen"es ob2e"os. pub ic c ass < " pub ic static int 1 2 )* pub ic int y 2 )* ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " < o1 2 ne3 <()* < o2 2 ne3 <()* Conso e.-rite.ine(??<.1)* Conso e.-rite.ine(??<.1)* Conso e.-rite.ine(??o1.y)* Conso e.-rite.ine(??o2.y)* Conso e.7ead.ine()* ( (

3.8

Constantes

(as cons"an"es son &alores inmu"ables% y por "an"o no se pueden cambiar.

32 de 217

3.8.1 const
/uando se declara una cons"an"e con la palabra cla&e cons"% "ambiHn se debe asi#nar el &alor. Tras es"o% la cons"an"e 1ueda blo1ueada y no se puede cambiar. Son impl,ci"amen"e es"$"icas -s"a"ic.. const doub e PI 2 3.181;*

3.8.2 readon y
A diferencia de cons"% no re1uiere 1ue se asi#ne el &alor al mismo "iempo 1ue se declara. Pueden ser miembros de la ins"ancia o miembros es"$"icos de la clase -s"a"ic.. readon y doub e 5* 5 2 2.J1N2N*

3.;

out

(a palabra cla&e ou" produce ar#umen"os 1ue se &an a pasar por referencia. Es"o es similar a la palabra cla&e ref% e@cep"o en 1ue ref re1uiere 1ue se inicialice la &ariable an"es de pasarla. M"ili ar un par$me"ro ou"% la definici)n de mH"odo y el mH"odo de llamada deben u"ili ar e@pl,ci"amen"e la palabra cla&e ou". Por e2emplo5 c ass @ut51a0p e " static #oid MetEod(out int i) " i 2 88* ( static #oid Main() " int #a or9oInicia iIado* 449@ es ao i$acin inicia iIar a #ariab e MetEod(out #a or9oInicia iIado)* 445 #a or es 88 ( ( 7bser&aciones Aun1ue las &ariables pasadas como ar#umen"os ou" no "ienen 1ue iniciali arse an"es de pasarlas% el mH"odo de llamada es necesario para asi#nar un &alor an"es de 1ue el mH"odo de&uel&a un &alor. (as palabras cla&e ref y ou" se "ra"an de manera diferen"e en "iempo de e2ecuci)n% pero se "ra"an del mismo modo en "iempo de compilaci)n. Por consi#uien"e no se pueden sobrecar#ar los mH"odos si un mH"odo "oma un ar#umen"o ref y el o"ro "oma un ar#umen"o ou". Por e2emplo% es"os dos mH"odos son idHn"icos en lo referen"e a la compilaci)n% por lo 1ue es"e c)di#o no se compilar$5 c ass CC)==3X51a0p e " 44 co0pi er error CC)==3D /cannot define o#er oaded 44 0etEods tEat differ on y on ref and out/ pub ic #oid Ca0p eMetEod(out int i) " ( pub ic #oid Ca0p eMetEod(ref int i) " ( ( Sin embar#o% se puede reali ar la sobrecar#a si un mH"odo "oma un ar#umen"o ref u ou" y el o"ro no u"ili a nin#uno de los dos% de la manera si#uien"e5 c ass 7ef@ut@#er oad51a0p e " pub ic #oid Ca0p eMetEod(int i) " ( pub ic #oid Ca0p eMetEod(out int i) " ( ( (as propiedades no son &ariables y% por consi#uien"e% no se pueden pasar como par$me"ros ou".

3.=

ref

(a palabra cla&e ref produce ar#umen"os 1ue se &an a pasar por referencia. El efec"o es 1ue cual1uier cambio 1ue se realice en el par$me"ro den"ro del mH"odo se refle2ar$ en esa &ariable cuando se de&uel&a el con"rol al mH"odo 1ue reali ) la llamada. Para u"ili ar un par$me"ro ref% la definici)n de mH"odo y el mH"odo de llamada deben u"ili ar e@pl,ci"amen"e la palabra cla&e ref. Por e2emplo5 c ass @ut51a0p e " static #oid MetEod(out int i) " i 2 88*
33 de 217

( static #oid Main() " int #a or9oInicia iIado 2 )* 44@b i$acin inicia iIar a #ariab e MetEod(out #a or9oInicia iIado)* 445 #a or es 88 ( (

3.J

<rre$ os

34 de 217

8 <rre$ os
Mna ma"ri es una es"ruc"ura de da"os 1ue con"iene &arias &ariables del mismo "ipo. Mna ma"ri se declara con un "ipo5 type%& array9a0e* (os e2emplos si#uien"es crean ma"rices unidimensionales% mul"idimensionales y escalonadas5 c ass !est<rraysC ass " static #oid Main() " 44 Dec are a sin$ eLdi0ensiona array. 5n este caso os #a ores se inicia iIan en ) int%& array1 2 ne3 int%;&* 44 Dec are and set array e e0ent #a ues int%& array2 2 ne3 int%& " 1> 3> ;> J> R (* 44 < ternati#e synta1 int%& array3 2 " 1> 2> 3> 8> ;> = (* 44 Dec are a t3o di0ensiona array int%>& 0u tiDi0ensiona <rray1 2 ne3 int%2> 3&* 44 Dec are and set array e e0ent #a ues int%>& 0u tiDi0ensiona <rray2 2 " " 1> 2> 3 (> " 8> ;> = ( (* ( ( 7bser&aciones5 Mna ma"ri puede ser unidimensional% mul"idimensional o escalonada. El &alor prede"erminado de los elemen"os numHricos de ma"ri se es"ablece en cero y el de los elemen"os de referencia se es"ablece en null. Mna ma"ri escalonada es una ma"ri de ma"rices y por consi#uien"e sus elemen"os son "ipos de referencia y se iniciali an en null. (as ma"rices se indi an basadas en cero5 una ma"ri con n elemen"os se indi a desde * 8as"a nI1. (os elemen"os de una ma"ri pueden ser de cual1uier "ipo% incluido el "ipo ma"ri .

8.1

foreacE

/G dispone de la ins"rucci)n foreac8. Es"a ins"rucci)n proporciona un modo simple y limpio de recorrer en i"eraci)n los elemen"os de una ma"ri . Por e2emplo% el si#uien"e c)di#o crea una ma"ri denominada numbers y la recorre median"e la ins"rucci)n foreac85 c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " int%& nu0bers 2 " 8> ;> => 1> 2> 3> L2> L1> ) (* foreacE (int i in nu0bers) " Cyste0.Conso e.-rite(/")( /> i)* ( Conso e.7ead.ine()* ( (

39 de 217

/on ma"rices mul"idimensionales% se puede u"ili ar el mismo mH"odo para recorrer los elemen"os% por e2emplo5 c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " int%>& nu0bers2D 2 ne3 int%3> 2& " " R> RR (> " 3> 33 (> " ;> ;; ( (* 447ecorre a 0atriI por fi as foreacE (int i in nu0bers2D) " Cyste0.Conso e.-rite(/")( /> i)* ( Conso e.7ead.ine()* ( (

8.2

Matrices unidi0ensiona es

Puede declarar como se mues"ra una ma"ri unidimensional de cinco en"eros en el si#uien"e e2emplo. /onsiderar 1ue es"a ma"ri con"iene elemen"os desde arrayO*P 8as"a arrayO4P. El operador new se u"ili a para crear la ma"ri e iniciali ar sus elemen"os con &alores prede"erminados. En es"e e2emplo% "odos los elemen"os de la ma"ri se iniciali an con cero. int%& array 2 ne3 int%;&* Mna ma"ri 1ue almacena elemen"os de cadena se puede declarar del mismo modo. Por e2emplo5 strin$%& strin$<rray 2 ne3 strin$%=&* Es posible iniciali ar una ma"ri en el momen"o de su declaraci)n% en cuyo caso% no es necesario el especificador de ran#o ya 1ue Hs"e &iene dado por el nLmero de elemen"os de la lis"a de iniciali aci)n. Por e2emplo5 int%& array1 2 ne3 int%& " 1> 3> ;> J> R (* Mna ma"ri de cadena se puede iniciali ar del mismo modo. A con"inuaci)n% se mues"ra una declaraci)n de una ma"ri de cadena en la 1ue cada elemen"o de la ma"ri se iniciali a con el nombre de un d,a de la semana5 strin$%& 3ee:Days 2 " /Cun/> /Mon/> /!ue/> /-ed/> /!Eu/> /,ri/> /Cat/ (* Es posible declarar una &ariable de ma"ri sin iniciali arla% pero se debe u"ili ar el operador new al asi#nar una ma"ri a es"a &ariable. Por e2emplo5 int%& array3* array3 2 ne3 int%& " 1> 3> ;> J> R (* 44 @A 44array3 2 "1> 3> ;> J> R(* 44 5rror El resul"ado de la ins"rucci)n si#uien"e depende de si SomeType es un "ipo de &alor o un "ipo de referencia. Si es un "ipo de &alor% la ins"rucci)n crea una ma"ri de 1* elemen"os% cada uno de los cuales "iene el "ipo SomeType. Si SomeType es un "ipo de referencia% la ins"rucci)n crea una ma"ri de 1* elemen"os% cada uno de los cuales se iniciali a con una referencia nula. Co0e!ype%& array8 2 ne3 Co0e!ype%1)&*

8.3

Matrices unidi0ensiona es

(as ma"rices pueden "ener &arias dimensiones. Por e2emplo% la si#uien"e declaraci)n crea una ma"ri bidimensional de cua"ro filas y dos columnas. int%>& array 2 ne3 int%8> 2&* (a si#uien"e declaraci)n crea una ma"ri de "res dimensiones% 4% 2 y 3. int%> >& array1 2 ne3 int%8> 2> 3&*

3; de 217

Puede iniciali ar la ma"ri en la declaraci)n% como se mues"ra en el si#uien"e e2emplo. 44 !3oLdi0ensiona array. int%>& array2D 2 ne3 int%>& " " 1> 2 (> " 3> 8 (> " ;> = (> " J> N ( (* 44 !Ee sa0e array 3itE di0ensions specified. int%>& array2Da 2 ne3 int%8> 2& " " 1> 2 (> " 3> 8 (> " ;> = (> " J> N ( (* 44 < si0i ar array 3itE strin$ e e0ents. strin$%>& array2Db 2 ne3 strin$%3> 2& " " /one/> /t3o/ (> " /tEree/> /four/ (> " /fi#e/> /si1/ ( (* 44 !EreeLdi0ensiona array. int%> >& array3D 2 ne3 int%>>& " " " 1> 2> 3 (> " 8> ;> = ( (> " " J> N> R (> " 1)> 11> 12 ( ( (* 44 !Ee sa0e array 3itE di0ensions specified. int%> >& array3Da 2 ne3 int%2> 2> 3& " " " 1> 2> 3 (> " 8> ;> = ( (> " " J> N> R (> " 1)> 11> 12 ( ( (* TambiHn puede iniciali ar la ma"ri sin especificar el ran#o. int%>& array8 2 " " 1> 2 (> " 3> 8 (> " ;> = (> " J> N ( (* En el si#uien"e e2emplo se asi#na un &alor a un elemen"o de ma"ri de"erminado. <rray;%2> 1& 2 2;*

8.8

Cantidad de fi as y co u0nas

0at2ne3 int%3>8&* Conso e.-rite.ine(/Cantidad de fi as de a 0atriID/ ? 0at.Get.en$tE()))* Conso e.-rite.ine(/Cantidad de co u0nas de a 0atriID/ ? 0at.Get.en$tE(1))*

8.;

Pasar 0atrices co0o ar$u0entos

(as ma"rices se pueden pasar como ar#umen"os a los par$me"ros de mH"odo. <ado 1ue las ma"rices son "ipos de referencia% el mH"odo puede cambiar el &alor de los elemen"os. Mna ma"ri unidimensional iniciali ada se puede pasar a un mH"odo. Por e2emplo% la si#uien"e ins"rucci)n en&,a una ma"ri a un mH"odo de impresi)n. int%& tEe<rray 2 " 1> 3> ;> J> R (* Print<rray(tEe<rray)* El c)di#o si#uien"e mues"ra una implemen"aci)n parcial del mH"odo de impresi)n. #oid Print<rray(int%& arr) " 44 MetEod code. ( Puede iniciali ar y pasar una nue&a ma"ri en un solo paso% como se mues"ra en el si#uien"e e2emplo. Print<rray(ne3 int%& " 1> 3> ;> J> R ()* En el e2emplo si#uien"e% se iniciali a una ma"ri de cadenas y se pasa como ar#umen"o a un mH"odo Prin"Array para las cadenas. El mH"odo mues"ra los elemen"os de la ma"ri . (ue#o% se llama a los mH"odos /8an#eArray y /8an#eArrayElemen" para mos"rar 1ue al en&iar un ar#umen"o ma"ricial por &alor% no se e&i"an cambios a los elemen"os de ma"ri . c ass Pro$ra0 " static #oid Print<rray(strin$%& arr) " for (int i 2 )* i F arr..en$tE* i??) " Cyste0.Conso e.-rite(arr%i& ? /")(/> i F arr..en$tE L 1 Y / / D //)* ( Cyste0.Conso e.-rite.ine()* ( static #oid CEan$e<rray(strin$%& arr) "
37 de 217

arr 2 (arr.7e#erse()).!o<rray()* for (int i 2 )* i F arr..en$tE* i??) " Cyste0.Conso e.-rite(arr%i& ? /")(/> i F arr..en$tE L 1 Y / / D //)* ( Cyste0.Conso e.-rite.ine()* ( static #oid CEan$e<rray5 e0ents(strin$%& arr) " arr%)& 2 /Do0/* arr%1& 2 /.un/* arr%2& 2 /Mar/* for (int i 2 )* i F arr..en$tE* i??) " Cyste0.Conso e.-rite(arr%i& ? /")(/> i F arr..en$tE L 1 Y / / D //)* ( Cyste0.Conso e.-rite.ine()* ( static #oid Main(strin$%& ar$s) " strin$%& 3ee:Days 2 " /Cun/> /Mon/> /!ue/> /-ed/> /!Eu/> /,ri/> /Cat/ (* Print<rray(3ee:Days)* CEan$e<rray(3ee:Days)* CEan$e<rray5 e0ents(3ee:Days)* Conso e.7ead.ine()* ( ( En el si#uien"e e2emplo se "iene 3 mH"odos5 El primero suma los elemen"os de un arre#lo unidimensional y de&uel&e el resul"ado. El se#undo suma las columnas de un arre#lo bidimensional y de&uel&e el resul"a como un arre#lo unidimensional. El "ercero suma las filas de un arre#lo bidimensional y de&uel&e el resul"a como un arre#lo unidimensional.

c ass Pro$ra0 " static int su0a5 e0entos(strin$%& arr) " int su0a 2 )* foreacE(strin$ arrWa in arr) " su0a ?2 Con#ert.!oInt32(arrWa )* 44Cu0a os e e0entos de arre$ o ( return su0a* 44De#ue #e e resu tado ( static int%& su0aCo (strin$%>& arr) " int cant,i as 2 arr.Get.en$tE())* int cantCo u0nas 2 arr.Get.en$tE(1)* int%& su0Co 2 ne3 int%cantCo u0nas&* 44<rre$ o unidi0esiona para de#o #er e resu tado for (int i 2 )* i F cantCo u0nas* i??) " for(int 62)* 6 F cant,i as* 6??) " 447ecorre os e e0entos de una co u0na su0Co %i& ?2 Con#ert.!oInt32(arr%6>i&)* ( ( return su0Co * ( static int%& su0a,i (strin$%>& arr) " int cant,i as 2 arr.Get.en$tE())* int cantCo u0nas 2 arr.Get.en$tE(1)* int%& su0a,i 2 ne3 int%cant,i as&* 44<rre$ o unidi0esiona para de#o #er e resu tado for (int i 2 )* i F cant,i as* i??) "
3= de 217

for (int 6 2 )* 6 F cantCo u0nas* 6??) " 447ecorre os e e0entos de una fi a su0a,i %i& ?2 Con#ert.!oInt32(arr%i>6&)* ( ( return su0a,i * ( static #oid Main(strin$%& ar$s) " 44 Dec are and initia iIe arrays. strin$%& datos1 2 " /1)/> /18/> /22/> /;/> /1/> /18/ (* strin$%>& datos2 2 " " /1)/> /18/> /22/> /;/> /1/>/18/ (> " /2;/> /12/> /1/> /1)/> /1/> /N/(> " /1/ > /1/ >/1;/> /11/>/12/> /;/((* Conso e.-rite.ine(/Mnidi0ensiona D ")(/> su0a5 e0entos(datos1))* Conso e.-rite.ine(/Kidi0ensiona Co u0nas/)* int%& su0Co 2 ne3 int%datos2.Get.en$tE(1)&* 44Define un arre$ o para recibir os resu tados su0Co 2 su0aCo (datos2)* foreacE(int i in su0Co ) " Conso e.-rite(/")( /> i)* ( Conso e.-rite.ine()* Conso e.-rite.ine(/Mnidi0ensiona ,i as/)* int%& su0,i 2 ne3 int%datos2.Get.en$tE())&* 44Define un arre$ o para recibir os resu tados su0,i 2 su0a,i (datos2)* foreacE (int i in su0,i ) " Conso e.-rite(/")( /> i)* ( Conso e.7ead.ine()* ( (

8.=

para0s

(a palabra cla&e params permi"e especificar un par$me"ro de mH"odo 1ue acep"a un nLmero &ariable de ar#umen"os. No se permi"en par$me"ros adicionales despuHs de la palabra cla&e params% ni &arias palabras cla&e params en una misma declaraci)n de mH"odo. c ass Pro$ra0 " pub ic static #oid MsePara0s(para0s int%& ist) " for (int i 2 )* i F ist..en$tE* i??) " Conso e.-rite.ine( ist%i&)* ( Conso e.-rite.ine()* ( pub ic static #oid MsePara0s2(para0s ob6ect%& ist) " for (int i 2 )* i F ist..en$tE* i??) " Conso e.-rite.ine( ist%i&)* ( Conso e.-rite.ine()*
3> de 217

( static #oid Main(strin$%& ar$s) " MsePara0s(1> 2> 3)* MsePara0s2(1> BaB> /test/)* 44 <n array of ob6ects can a so be passed> as on$ as 44 tEe array type 0atcEes tEe 0etEod bein$ ca ed. int%& 0yarray 2 ne3 int%3& " 1)> 11> 12 (* MsePara0s(0yarray)* Conso e.7ead.ine()* ( (

4* de 217

; ,unciones
:amos a anali ar y e2emplificar el uso de las di&ersas funciones o mH"odos predefinidos 1ue /G proporciona.

;.1

strin$

El "ipo s"rin# represen"a una secuencia de cero o m$s carac"eres Mnicode. s"rin# es un alias de S"rin# en .NET +ramework.

;.1.1

22> 5qua s

Tener la diferencia con 2a&a del uso del mH"odo E1uals e FF. c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " strin$ a 2 /Ee o/* 44 <0bas referecias apuntan a 0is0o #a or strin$ b 2 /Ee o/* Conso e.-rite.ine(a 22 b)* Conso e.-rite.ine(a.5qua s(b))* Conso e.-rite.ine((ob6ect)a 22 (ob6ect)b)* Conso e.-rite.ine()* strin$ c 2 /Ee o/* 44 <0bas referecias 9@ apuntan a 0is0o #a or strin$ d 2 /E/* d ?2 /e o/* Conso e.-rite.ine(c 22 d)* Conso e.-rite.ine(c.5qua s(d))* Conso e.-rite.ine((ob6ect)c 22 (ob6ect)d)* Conso e.7ead.ine()* ( ( Q+alseQ por1ue el con"enido de las cadenas es e1ui&alen"e% pero c y d no 8acen referencia a la misma ins"ancia de cadena.

;.2

,unciones Ctrin$
Ends4i"8-.5 <e"ermina cuando un subs"rin# e@is"e al final de un s"rin# S"ar"s4i"8-.5 <e"ermina cuando un subs"rin# e@is"e al principio de un s"rin#. 3nde@7f-.5 0e#resa la posici)n de la primer ocurrencia de un subs"rin# (as"3nde@7f-.5 0e#resa la posici)n de la Ll"ima ocurrencia de un subs"rin# /onca"-.5 /onca"ena dos o m$s s"rin#s u ob2e"os% si se pasan ob2e"os la funci)n ToS"rin# es in&ocada Spli"-.5 /rea un arre#lo de s"rin#s di&idiendo un s"rin# en cual1uier ocurrencia de uno o m$s carac"eres Subs"rin#-.5 E@"rae un subs"rin# de un s"rin# To(ower-.5 re#resa una &ersi)n de un s"rin# en minLsculas ToMpper-.5 re#resa una &ersi)n de un s"rin# en mayLsculas

0epresen"a "e@"o como una serie de carac"eres Mnicode. Al#unos mH"odos carac"er,s"icos son5

41 de 217

Trim-.5 Elimina espacios en blanco de un s"rin# TrimEnd-.5 Elimina un s"rin# de carac"eres al final de un s"rin# TrimS"ar"-.5 Elimina un s"rin# de carac"eres al inicio de un s"rin#

7bser&ar lo mH"odos cons"ruc"ores. No"ar 1ue no e@is"e S"rin#-S"rin# &alue..

static #oid Main(strin$%& ar$s) " strin$ cadena 2 / Zo a 0undo> desde Cantia$o de CEi e 44Contar a cantidad de caracteres int cantidad1 2 cadena..en$tE* Conso e.-rite.ine(/!ota de caracteresD / ? cantidad1)*

/*

44Contar a cantidad de caracteres e i0inando espacios en os e1tre0os int cantidad2 2 cadena.!ri0()..en$tE* Conso e.-rite.ine(/5 i0inados os espacios en os e1tre0osD / ? cantidad2)* 44Contar a cantidad de caracteres e i0inando espacios iIquierda int cantidad3 2 cadena.!ri0Ctart()..en$tE* Conso e.-rite.ine(/5 i0inados os espacios en a iIquierdaD / ? cantidad3)* 44Contar a cantidad de caracteres e i0inando espacios derecEa int cantidad8 2 cadena.!ri05nd()..en$tE* Conso e.-rite.ine(/5 i0inados os espacios en a derecEaD / ? cantidad8)* 44Mayuscu as strin$ 0ayuscu as 2 cadena.!oMpper()* Conso e.-rite.ine(/Cadena en 0ayuscu asD / ? 0ayuscu as)* 44Minuscu as strin$ 0inuscu as 2 cadena.!o.o3er()* Conso e.-rite.ine(/Cadena en 0inuscu asD / ? 0inuscu as)* 4451trae caracteres strin$ cadena1 2 cadena.!ri0().Cubstrin$()> 3)* Conso e.-rite.ine(/Cubstrin$()>3)D / ? cadena1)* 4451trae caracteres
42 de 217

strin$ cadena2 2 cadena.!ri0().Cubstrin$(1> 3)* Conso e.-rite.ine(/Cubstrin$(1>3)D / ? cadena2)* 4451trae caracteres strin$ cadena3 2 cadena.!ri0().Cubstrin$(1)> 3)* Conso e.-rite.ine(/Cubstrin$(1)>3)D / ? cadena3)* 4451trae caracteres strin$ cadena8 2 cadena.!ri0().Cubstrin$(3)* Conso e.-rite.ine(/Cubstrin$(3)D / ? cadena8)* 44Posicion de a u ti0a ocurrencia int posicion1 2 cadena.!ri0()..astInde1@f(/a/)* Conso e.-rite.ine(/Posicion u ti0a [/a[/D / ? posicion1)* 44Posicion de a pri0era ocurrencia int posicion2 2 cadena.!ri0().Inde1@f(/a/)* Conso e.-rite.ine(/Posicion pri0era [/a[/D / ? posicion2)* 4451iste caracter a fina boo e1iste1 2 cadena.!ri0().5nds-itE(/e/)* Conso e.-rite.ine(/e1iste [/a[/ a fina D / ? e1iste1)* 4451iste caracter a principio boo e1iste2 2 cadena.!ri0().Ctarts-itE(/e/)* Conso e.-rite.ine(/e1iste [/a[/ a principioD / ? e1iste2)* 44!ransfor0a cadena en arre$ o strin$%& cadena<rre$ o 2 cadena.!ri0().Cp it(B B)* for (int i 2 )* i F cadena<rre$ o..en$tE* i??) Conso e.-rite.ine(/cadena<rre$ o%/?i?/&2 /?cadena<rre$ o%i&)* Conso e.7ead.ine()* (

;.3

In0utabi idad y a c ase Ctrin$Kui der

Mn ob2e"o S"rin# se denomina inmu"able -de solo lec"ura. por1ue no se puede modificar su &alor una &e 1ue se 8a creado. (os mH"odos 1ue aparen"emen"e modifican un ob2e"o S"rin# de&uel&en en realidad un nue#o ob2e"o S"rin# 1ue con"iene la modificaci)n. <ado 1ue las cadenas son inmu"ables% las ru"inas de la manipulaci)n de cadenas 1ue reali an
43 de 217

sumas o eliminaciones repe"idas a lo 1ue parece ser una cadena Lnica pueden e@"raer una reducci)n de rendimien"o si#nifica"i&a. Por e2emplo% el si#uien"e c)di#o u"ili a un #enerador de nLmeros alea"orios para crear una cadena con 1*** carac"eres en el in"er&alo *@***1 a *@*92+. Aun1ue el c)di#o parece u"ili ar la conca"enaci)n de la cadena para ane@ar un nue&o car$c"er a la cadena e@is"en"e denominada s"r% realmen"e crea un nue&o ob2e"o S"rin# para cada operaci)n de conca"enaci)n. Puede u"ili ar la clase S"rin#6uilder en lu#ar de la clase S"rin# para operaciones 1ue realicen &arios cambios en el &alor de una cadena. A diferencia de las ins"ancias de la clase S"rin#% los ob2e"os S"rin#6uilder son mu"ables? al conca"enar% ane@ar o eliminar subcadenas de una cadena% las operaciones se reali an en una cadena Lnica. /uando 8aya "erminado de modificar el &alor de un ob2e"o S"rin#6uilder% puede llamar a su mH"odo S"rin#6uilder.ToS"rin# para con&er"irlo en una cadena.

;.8

Ctrin$Kui der

0epresen"a una cadena de carac"eres modificable. /ons"ruc"ores5

!H"odos5 Append-.5 Ane@a a es"a ins"ancia la represen"aci)n en forma de cadena de un &alor especificado. boo f a$ 2 fa se* doub e #a ue 2 1)38J=R.8J* Cyste0.!e1t.Ctrin$Kui der sb 2 ne3 Cyste0.!e1t.Ctrin$Kui der()* sb.<ppend(/!Ee #a ue of tEe f a$ is /).<ppend(f a$).<ppend(/./).<ppend(#a ue)* /lear-.5 Rui"a "odos los carac"eres de la ins"ancia de S"rin#6uilder ac"ual. E1uals-S"rin#6uilder.5 <e&uel&e un &alor 1ue indica si es"a ins"ancia e1ui&ale a un ob2e"o especificado. 3nser"-3n"32% S"rin#.5 3nser"a una cadena S"rin# en la ins"ancia en la posici)n del car$c"er 1ue se 8aya especificado. E@is"en o"ro pro"o"ipos del mH"odo.

;.;

,unciones ,ecEaLZora

Date!i0e Es una es"ruc"ura 1ue represen"a un ins"an"e de "iempo% normalmen"e e@presado en forma de fec8a y 8ora del d,a. /on"ruc"ores5 <a"eTime-3n"32% 3n"32% 3n"32. 3niciali a una nue&a ins"ancia de la es"ruc"ura <a"eTime en el aSo% mes y d,a especificados. <a"eTime-3n"32% 3n"32% 3n"32% 3n"32% 3n"32% 3n"32. 3niciali a una nue&a ins"ancia de la es"ruc"ura <a"eTime en el aSo% mes% d,a% 8ora% minu"o y se#undo especificados.

44 de 217

Al#unas propiedades5

static #oid Main(strin$%& ar$s) " Date!i0e actua 2 Date!i0e.9o3* 44dia actua int dia 2 actua .Day* Conso e.-rite.ine(/Dia actua D / ? dia)* 440es actua int 0es 2 actua .MontE* Conso e.-rite.ine(/Mes actua D / ? 0es)* 44a\o actua int yyyy 2 actua .Qear* Conso e.-rite.ine(/<\o actua D / ? yyyy)* 44Eora actua int Eora 2 actua .Zour* Conso e.-rite.ine(/Zora actua D / ? Eora)* 440inutos actua int 0inuto 2 actua .Minute* Conso e.-rite.ine(/Minutos actua D / ? 0inuto)* 44se$undos actua int se$undo 2 actua .Cecond* Conso e.-rite.ine(/Ce$undos actua D / ? se$undo)* 44dia actua Day@f-ee: diaCe0ana 2 actua .Day@f-ee:* Conso e.-rite.ine(/Dia actua D / ? diaCe0ana)* Conso e.7ead.ine()* (

49 de 217

Al#unas funciones para sumar y res"ar &alores.

static #oid Main(strin$%& ar$s) " Date!i0e actua 2 Date!i0e.9o3* Conso e.-rite.ine(/actua D / ? actua )* Conso e.-rite.ine(/LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL/)* 44Cu0a dias Date!i0e dosDias 2 actua .<ddDays(2)* Conso e.-rite.ine(/?2 diasD / ? dosDias)* 44Cu0a 0eses Date!i0e dosMeses 2 actua .<ddMontEs(2)* Conso e.-rite.ine(/?2 0esesD / ? dosMeses)* 44Cu0a a\os Date!i0e dosQyyy 2 actua .<ddQears(2)* Conso e.-rite.ine(/?2 a\osD / ? dosQyyy)* 44Cu0a Eoras Date!i0e dosZoras 2 actua .<ddZours(2)* Conso e.-rite.ine(/?2 EorasD / ? dosZoras)* 44Cu0a 0inutos Date!i0e dosMinutos 2 actua .<ddMinutes(2)* Conso e.-rite.ine(/?2 0inutosD / ? dosMinutos)* 44Cu0a se$undos Date!i0e dosCe$undos 2 actua .<ddCeconds(2)* Conso e.-rite.ine(/?2 se$undosD / ? dosCe$undos)* Conso e.-rite.ine(/LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL/)* 447esta dias Date!i0e dosDiasMenos 2 actua .<ddDays(L2)* Conso e.-rite.ine(/L2 diasD / ? dosDiasMenos)* 447esta 0eses Date!i0e dosMesesMenos 2 actua .<ddMontEs(L2)*
4; de 217

Conso e.-rite.ine(/L2 0esesD / ? dosMesesMenos)* 447esta a\os Date!i0e dosQyyyMenos 2 actua .<ddQears(L2)* Conso e.-rite.ine(/L2 a\osD / ? dosQyyyMenos)* 447esta Eoras Date!i0e dosZorasMenos 2 actua .<ddZours(L2)* Conso e.-rite.ine(/L2 EorasD / ? dosZorasMenos)* 447esta 0inutos Date!i0e dosMinutosMenos 2 actua .<ddMinutes(L2)* Conso e.-rite.ine(/L2 0inutosD / ? dosMinutosMenos)* 447esta se$undos Date!i0e dosCe$undosMenos 2 actua .<ddCeconds(L2)* Conso e.-rite.ine(/L2 se$undosD / ? dosCe$undosMenos)* Conso e.7ead.ine()* ( 7peradores

;.=

,unciones MatE

System.Math.Floor(x): Mayor entero menor o igual a x System.Math.Ceiling(x): Menor entero mayor o igual a x System.Math.Round(x,n): Redondear x a n decimales. Tener presente las siguientes aproximaciones. 1. ! a " decimales da 1. # pero 1. #! a " deciamles da 1. # 56ercicio 1 1. /rear una funci)n 1ue permi"a &alidar si el nombre de un clien"e es correc"o. Por e2emplo% desde el pun"o de &is"a del "ra"o de da"os son dis"in"os. T Uuan T UMAN T UMaN Pero del pun"o de &is"a del len#ua espaSola son lo mismo. 2. /onsiderar una frase. /rear una funci)n 1ue reciba la frase y% usando la funci)n spli"% calcular la can"idad de palabras repe"idas 1ue "iene la frase. 3. Mn c)di#o de un produc"o debe es"ar compues"o e@ac"amen"e de 4 le"ras mayLsculas y 4 le"ras minLsculas en cual1uier orden. /rear una funci)n 1ue reciba un c)di#o y 1ue sea capa de &erificar si es"e cumple o no la condici)n dada.
47 de 217

4. /onsiderar 1ue se recibe como da"o de "ipo s"rin# en nombre de un arc8i&o% por e2emplo% !i+o"o.2p#. Se pide% "ransformar en nombre del arc8i&o a 2pere .2p#. Se debe consierar5 En nombre del arc8i&o pude con"ener pun"os% por e2emplo% !i.+o"o.2p# la e@"ensi)n del arc8i&o puede ser de diferen"es "ipo% por e2emplo% 2p#% pdf% asp@% o"ros. 9. !odificar el e2ercicio an"erior de "al forma de permi"ir s)lo e@"ensiones de "ipo5 2p# y a&i. En caso con"rario emi"ir un mensa2e de error en el "ipo de arc8i&o. 56ercicio 2 (as operaciones de aerona&es comerciales "ienen un cobro de es"acionamien"o 1ue considera la can"idad de minu"os 1ue usan las pis"as de un aeropuer"o -permanencia o carre"eo.. Minutos Eas"a ;* !$s de ;* y 8as"a de 12* !$s de 12* y 8as"a de 1*** !$s de 1*** Dra"is V9.*** la 8ora o fracci)n. Por e2emplo% *.1 8oras es 1 8ora para efec"o del cobro. V7.9** la 8ora o fracci)n. Por e2emplo% *.1 8oras es 1 8ora para efec"o del cobro. V2*.*** la 8ora o fracci)n. Por e2emplo% *.1 8oras es 1 8ora para efec"o del cobro. Cobro

/ons"ruir una funci)n 1ue solici"e las fec8as y 8oras de arribo y despe#ue y calcule el &alor a cobrar por es"acionamien"o. 56ercicio 3 Para el problema 2% se "iene el caso 1ue al#unas aerol,neas -como (an /8ile. re"iran sus aerona&es desde las pis"as y las lle&an a sus 8an#ares. (ue#o las &uel&en a poner en las pis"as para despe#ar. /ons"ruir una funci)n 1ue solici"e las fec8as y 8oras de arribo% re"iro de pla"aforma -pis"as.% in#reso a pla"aforma -pis"as. y despe#ue y calcule el &alor a cobrar por es"acionamien"o. Prob e0a 8 /rear una funci)n 1ue solici"a el c)di#o de un produc"o% la fec8a y de&uel&e el precio del produc"o. Msar los si#uien"es da"os5 Produc"o T/ T/ T/ T/ <E <E <E <E <A <A <A <A +ec8aWinicio *1J*1J2**9 *1J*;J2**9 *1J*1J2**; *1J*;J2**; *1J*1J2**9 *1J*;J2**9 *1J*1J2**; *1J*;J2**; *1J*1J2**9 *1J*;J2**9 *1J*1J2**; *1J*;J2**; +ec8aWfin 31J*9J2**9 31J12J2**9 31J*9J2**; 31J12J2**; 31J*9J2**9 31J12J2**9 31J*9J2**; 31J12J2**; 31J*9J2**9 31J12J2**9 31J*9J2**; 31J12J2**; :alor 3.23 3.9* 3.49 3.39 2.32 2.99 2.;7 2.39 9.2* 9.;* 9.4* 9.3=

4= de 217

6 struct - enum
Es un "ipo de &alor 1ue se suele u"ili ar para encapsular pe1ueSos #rupos de &ariables relacionadas% como las coordenadas de un rec"$n#ulo o las carac"er,s"icas de un elemen"o de un in&en"ario. En el e2emplo si#uien"e se mues"ra una declaraci)n de es"ruc"ura sencilla. pub ic struct Koo: " pub ic deci0a price* pub ic strin$ tit e* pub ic strin$ autEor* ( /asi "odas las es"ruc"uras compar"en la misma sin"a@is 1ue las clases% aun1ue es"$n m$s limi"adas 1ue Hs"as5 <en"ro de una declaraci)n de es"ruc"ura% los campos no se pueden iniciali ar a menos 1ue se declaren como cons"an"es o es"$"icos. Mna es"ruc"ura no puede declarar un cons"ruc"or prede"erminado -es decir% un cons"ruc"or sin par$me"ros. ni un des"ruc"or. (as es"ruc"uras no pueden 8eredar de clases u o"ras es"ruc"uras. (as es"ruc"uras se copian en la asi#naci)n. /uando se asi#na una es"ruc"ura a una nue&a &ariable% se copian "odos los da"os% y cual1uier modificaci)n 1ue se realice en la nue&a copia no afec"a a los da"os de la copia ori#inal. (as es"ruc"uras son "ipos de &alor y las clases son "ipos de referencia. A diferencia de las clases% se pueden crear ins"ancias de las es"ruc"uras sin u"ili ar un operador new. (as es"ruc"uras pueden declarar cons"ruc"ores 1ue "ienen par$me"ros. Mna es"ruc"ura no puede 8eredar de o"ra es"ruc"ura o clase% ni puede ser la base de una clase. Todas las es"ruc"uras 8eredan direc"amen"e de Sys"em.:alueType% 1ue 8ereda de Sys"em.7b2ec". Mna es"ruc"ura puede implemen"ar in"erfaces. Mna es"ruc"ura se puede u"ili ar como "ipo 1ue acep"a &alores null y se le puede asi#nar un &alor null.

El "ipo s"ruc" es adecuado para represen"ar ob2e"os de poca comple2idad% como Poin"% 0ec"an#le y /olor. Aun1ue es posible represen"ar un pun"o como una clase% una es"ruc"ura es m$s efica en al#unos casos. Por e2emplo% si declara una ma"ri de 1*** ob2e"os Poin"% asi#nar$ memoria adicional para 8acer referencia a cada ob2e"o? en es"e caso% una es"ruc"ura ser,a menos cos"osa. Pues"o 1ue .NET +ramework con"iene un ob2e"o denominado Poin"% llamaremos en su lu#ar a la es"ruc"ura Q/o7rdsQ. pub ic struct Co@rds " pub ic int 1> y* pub ic Co@rds(int p1> int p2) " 1 2 p1* y 2 p2* ( ( 7bser&aciones5

4> de 217

Es un error declarar un cons"ruc"or prede"erminado -sin par$me"ros. para una es"ruc"ura. Siempre e@is"e un cons"ruc"or prede"erminado 1ue iniciali a los miembros de la es"ruc"ura con sus &alores prede"erminados. TambiHn es un error iniciali ar un campo de ins"ancia en una es"ruc"ura. /uando se crea un ob2e"o s"ruc" median"e el operador new% se crea y se llama al cons"ruc"or apropiado. A diferencia de las clases% es posible crear ins"ancias de las es"ruc"uras sin u"ili ar el operador new. Si no se u"ili a new% los campos permanecer$n sin asi#nar y el ob2e"o no se podr$ u"ili ar 8as"a 8aber iniciali ado "odos los campos. A diferencia de las clases% para las es"ruc"uras no e@is"e 8erencia. Mna es"ruc"ura no puede 8eredar de o"ra es"ruc"ura o clase% ni puede ser la base de una clase. Sin embar#o% las es"ruc"uras 8eredan de la clase base 7b2ec". Mna es"ruc"ura puede implemen"ar in"erfaces del mismo modo 1ue las clases. A diferencia de /KK% no se puede declarar una clase median"e la palabra cla&e s"ruc". En /G% las clases y las es"ruc"uras son sem$n"icamen"e diferen"es. Mna es"ruc"ura es un "ipo de &alor% mien"ras 1ue una clase es un "ipo de referencia. Para ob"ener m$s informaci)n% &ea Tipos de &alores -0eferencia de /G.. A menos 1ue se necesi"e sem$n"ica de "ipo de referencia% el sis"ema puede con"rolar m$s efica men"e las clases pe1ueSas si se definen como es"ruc"uras.

=.1

56e0p os

Se mues"ra la iniciali aci)n de "ipo s"ruc" median"e cons"ruc"ores prede"erminados y cons"ruc"ores con par$me"ros. pub ic struct Co@rds " pub ic int 1> y* pub ic Co@rds(int p1> int p2) " 1 2 p1* y 2 p2* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " 44 Inicia iIacionesD Co@rds coords1 2 ne3 Co@rds()* Co@rds coords2 2 ne3 Co@rds(1)> 1))* 44 Mostrar resu tadosD Cyste0.Conso e.-rite(/Co@rds 1D /)* Cyste0.Conso e.-rite.ine(/1 2 ")(> y 2 "1(/> coords1.1> coords1.y)* Cyste0.Conso e.-rite(/Co@rds 2D /)*

9* de 217

Cyste0.Conso e.-rite.ine(/1 2 ")(> y 2 "1(/> coords2.1> coords2.y)* Conso e.7ead.ine()* ( ( Es"e e2emplo mues"ra una carac"er,s"ica e@clusi&a de los s"ruc"s. /rea un ob2e"o /o7rds sin u"ili ar el operador new. Si se reempla a la palabra s"ruc" por la palabra class% el pro#rama no se compilar$. pub ic struct Co@rds " pub ic int 1> y* pub ic Co@rds(int p1> int p2) " 1 2 p1* y 2 p2* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " 44Dec ara un ob6eto sin Eacer uso de ne3D Co@rds coords1* 44Inicia iIaD coords1.1 2 1)* coords1.y 2 2)* 44Muestra os resu tadosD Conso e.-rite(/Co@rds 1D /)* Conso e.-rite.ine(/1 2 ")(> y 2 "1(/> coords1.1> coords1.y)* Conso e.-rite.ine(/Press any :ey to e1it./)* Conso e.7eadAey()* ( (

=.2

enu0

(a palabra cla&e enum se u"ili a para declarar una enumeraci)n% un "ipo dis"in"o 1ue consis"e en un con2un"o de cons"an"es con nombre denominado lis"a de enumeradores. Normalmen"e suele ser recomendable definir una enumeraci)n direc"amen"e den"ro de un espacio de nombres para 1ue "odas las clases de dic8o espacio puedan "ener acceso a Hs"a con la misma facilidad. Sin embar#o% una enumeraci)n "ambiHn puede anidarse den"ro de una clase o s"ruc". <e forma prede"erminada% el primer enumerador es de &alor *% 1 el se#undo y as, sucesi&amen"e . Por e2emplo% en la si#uien"e enumeraci)n% Sa" es *% Sun es 1% !on es 2% e"c. enu0 Days "Cat> Cun> Mon> !ue> -ed> !Eu> ,ri(*
91 de 217

(os enumeradores pueden usar iniciali adores para in&alidar los &alores prede"erminados% como se mues"ra en el e2emplo si#uien"e. Se obli#a a 1ue la secuencia de elemen"os empiece en 1 en &e de en *. Sin embar#o% se recomienda incluir una cons"an"e con el &alor *. enu0 Days "Cat21> Cun> Mon> !ue> -ed> !Eu> ,ri(* /ada "ipo de enumeraci)n "iene un "ipo subyacen"e% 1ue puede ser cual1uier "ipo in"e#ral e@cep"o c8ar. El "ipo prede"erminado subyacen"e de los elemen"os de la enumeraci)n es in". Para declarar una enumeraci)n de o"ro "ipo in"e#ral% como by"e% use un car$c"er de dos pun"os despuHs del iden"ificador y escriba a con"inuaci)n el "ipo% como se mues"ra en el e2emplo si#uien"e. enu0 Days D byte "Cat21> Cun> Mon> !ue> -ed> !Eu> ,ri(* (os "ipos admi"idos para una enumeraci)n son by"e% sby"e% s8or"% us8or"% in"% uin"% lon# o ulon#.

En el e2emplo si#uien"e% se declara una enumeraci)n% <ays. <os enumeradores se con&ier"en e@pl,ci"amen"e en un nLmero en"ero y se asi#nan a &ariables de nLmero en"ero. c ass Pro$ra0 " enu0 Days " Cun> Mon> !ue> -ed> !Eu> ,ri> Cat (* static #oid Main(strin$%& ar$s) " int 1 2 (int)Days.Cun* int y 2 (int)Days.,ri* Conso e.-rite.ine(/Cun 2 ")(/> 1)* Conso e.-rite.ine(/,ri 2 ")(/> y)* Conso e.7ead.ine()* ( ( En el e2emplo si#uien"e% la opci)n de "ipo base se u"ili a para declarar un enum cuyos miembros son del "ipo lon#. 7bser&e 1ue a pesar de 1ue el "ipo subyacen"e de la enumeraci)n es lon#% los miembros de la enumeraci)n "oda&,a deben con&er"irse e@pl,ci"amen"e al "ipo lon# median"e una con&ersi)n de "ipos. c ass Pro$ra0 " enu0 7an$e D on$ " Ma1 2 218J8N3=8N.> Min 2 2;;. (* static #oid Main(strin$%& ar$s) " on$ 1 2 ( on$)7an$e.Ma1* on$ y 2 ( on$)7an$e.Min* Conso e.-rite.ine(/Ma1 2 ")(/> 1)* Conso e.-rite.ine(/Min 2 ")(/> y)* Conso e.7ead.ine()* ( ( para recorrer una enumeraci)n podemos usar5 c ass Pro$ra0 " enu0 Direction " 9ortE 2 )> 5ast 2 R)> CoutE 2 1N)>
92 de 217

-est 2 2J) ( static #oid Main(strin$%& ar$s) " foreacE (strin$ direction in 5nu0.Get9a0es(typeof(Direction))) " Conso e.-rite.ine(/Mie0broD ")( L Wa orD "1(/> direction> (int)5nu0.Parse(typeof(Direction)> direction))* ( Conso e.7ead.ine()* ( (

Al#unos mH"odos asociados a la clase Enum5 Enum.De"Name5 0ecupera el nombre de la cons"an"e de la enumeraci)n especificada 1ue "iene el &alor especificado. c ass Pro$ra0 " enu0 Co ors " 7ed> Green> K ue> Qe o3 (* enu0 Cty es " P aid> Ctriped> !artan> Corduroy (* static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(/Co ors 5nu0 isD ")(/> 5nu0.Get9a0e(typeof(Co ors)> 3))* Conso e.-rite.ine(/Cty es 5nu0 isD ")(/> 5nu0.Get9a0e(typeof(Cty es)> 3))* Conso e.7ead.ine()* ( (

Enum.De"Names5 0ecupera una ma"ri con los nombres de las cons"an"es de una enumeraci)n especificada. c ass Pro$ra0 " enu0 Co ors " 7ed> Green> K ue> Qe o3 (* enu0 Cty es " P aid> Ctriped> !artan> Corduroy (* static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(/Co ors 5nu0 areD/)* foreacE (strin$ s in 5nu0.Get9a0es(typeof(Co ors))) Conso e.-rite.ine(s)*

93 de 217

Conso e.-rite.ine()* Conso e.-rite.ine(/Cty es 5nu0 areD/)* foreacE (strin$ s in 5nu0.Get9a0es(typeof(Cty es))) Conso e.-rite.ine(s)* Conso e.7ead.ine()* ( (

Enum.De":alues5 0ecupera una ma"ri especificada. c ass Pro$ra0 "

con los &alores de las cons"an"es de una enumeraci)n

enu0 Co ors " 7ed> Green> K ue> Qe o3 (* enu0 Cty es " P aid 2 )> Ctriped 2 23> !artan 2 =;> Corduroy 2 JN (* static #oid Main(strin$%& ar$s) " Conso e.-rite.ine(/!Ee #a ues of tEe Co ors 5nu0 areD/)* foreacE (int i in 5nu0.GetWa ues(typeof(Co ors))) Conso e.-rite.ine(i)* Conso e.-rite.ine()* Conso e.-rite.ine(/!Ee #a ues of tEe Cty es 5nu0 areD/)* foreacE (int i in 5nu0.GetWa ues(typeof(Cty es))) Conso e.-rite.ine(i)* Conso e.7ead.ine()* ( ( Enum.3s<efined5 <e&uel&e una indicaci)n en la 1ue se precisa si e@is"e una cons"an"e con un &alor especificado en una enumeraci)n especificada. c ass Pro$ra0 " enu0 Cty es " P aid 2 )> Ctriped 2 23> !artan 2 =;> Corduroy 2 JN (* static #oid Main(strin$%& ar$s) " ob6ect #a ue*
94 de 217

#a ue 2 23* Conso e.-rite.ine(/")(D "1(/> #a ue> 5nu0.IsDefined(typeof(Cty es)> #a ue))* #a ue 2 =8* Conso e.-rite.ine(/")(D "1(/> #a ue> 5nu0.IsDefined(typeof(Cty es)> #a ue))* Conso e.7ead.ine()* ( (

99 de 217

J C ases
En la pro#ramaci)n orien"ada a ob2e"os% una clase es una cons"rucci)n 1ue se u"ili a como un modelo -o plan"illa. para crear ob2e"os de ese "ipo. El modelo describe el es"ado y el compor"amien"o 1ue "odos los ob2e"os de la clase compar"en. Mn ob2e"o de una de"erminada clase se denomina una ins"ancia de la clase. (a clase 1ue con"iene -y se u"ili ) para crear. esa ins"ancia se puede considerar como del "ipo de ese ob2e"o% por e2emplo% una ins"ancia del ob2e"o de la clase QPersonaQ ser,a del "ipo QPersonaQ. Mna clase por lo #eneral represen"a un sus"an"i&o% como una persona% lu#ar o -posiblemen"e bas"an"e abs"rac"a. cosa I es el modelo de un concep"o den"ro de un pro#rama de compu"adora. +undamen"almen"e% encapsula el es"ado y el compor"amien"o del concep"o 1ue represen"a. Encapsula el es"ado a "ra&Hs de marcadores de da"os llamados a"ribu"os -o &ariables miembro o &ariables de ins"ancia.% encapsula el compor"amien"o a "ra&Hs de secciones de c)di#o reu"ili ables llamados mH"odos.

(a sin"a@is ",pica de una clase es5 c ass 9o0bre " 44 Wariab es 0ie0bro (Eabitua 0ente pri#adas) 0ie0broX1* 44 ista de 0ie0bros 0ie0broX2* 0ie0broX3* 44 ,unciones o 0Ttodos (Eabitua 0ente p]b icas) funcionX0ie0broX1( )* funcionX0ie0broX2 ( )* 44 Propiedades (Eabitua 0ente p]b icas) propiedadX1* propiedadX2* propiedadX3* propiedadX8* (

9; de 217

E2emplos de clases5

J.1

c ass

(as clases se declaran median"e la palabra cla&e class% como se mues"ra en el e2emplo si#uien"e5 c ass !estC ass " 44 MetEods> properties> fie ds> e#ents> de e$ates and nested c asses $o Eere. ( 7bser&aciones5 (os ni&eles de acceso pro"ec"ed y pri&a"e s)lo se permi"en en clases anidadas. pri#ate c ass 9estedC ass1 " '. ( pub ic c ass !EeC ass "

97 de 217

protected c ass 9estedC ass2 " '. ( (

J.2

pri#ate

(a palabra cla&e pri&a"e es un modificador de acceso de miembros. El acceso de "ipo pri&a"e corresponde al ni&el de acceso m$s res"ric"i&o. (os miembros pri&ados s)lo son accesibles den"ro del cuerpo de la clase o es"ruc"ura en la 1ue se declaran% como en el si#uien"e e2emplo. c ass 50p oyee " pri#ate int i* doub e d* 44 pri#ate acceso> por defecto ( 7bser&aciones5 (os "ipos anidados del mismo cuerpo "ambiHn pueden "ener acceso a esos miembros pri&ados. Eacer referencia a un miembro pri&ado fuera de la clase o es"ruc"ura en la 1ue se declara produce un error de compilaci)n.

En el e2emplo si#uien"e% la clase Employee con"iene dos miembros de da"os pri&ados% name y salary. /omo miembros pri&ados% s)lo pueden "ener acceso a ellos los mH"odos miembros. (os mH"odos pLblicos denominados De"Name y Salary se a#re#an para permi"ir un acceso con"rolado a los miembros pri&ados. Se ob"iene acceso al miembro name a "ra&Hs de un mH"odo pLblico y al miembro salary a "ra&Hs de una propiedad pLblica de s)lo lec"ura. c ass 50p oyee2 " pri#ate strin$ na0e 2 /,irst9a0e> .ast9a0e/* pri#ate doub e sa ary 2 1)).)* pub ic strin$ Get9a0e() " return na0e* ( pub ic doub e Ca ary " $et " return sa ary* ( ( ( c ass Pri#ate!est " static #oid Main() " 50p oyee2 e 2 ne3 50p oyee2()* 44 44 strin$ n 2 e.na0e* 5rror doub e s 2 e.sa ary* 5rror

44 Bna0eB is indirect y accessed #ia 0etEodD strin$ n 2 e.Get9a0e()* 44 Bsa aryB is indirect y accessed #ia property doub e s 2 e.Ca ary* ( (

9= de 217

J.3

pub ic

Es un modificador de acceso para "ipos y miembros de "ipos. El acceso de "ipo public corresponde al ni&el de acceso menos res"ric"i&o. No e@is"en res"ricciones para ob"ener acceso a los miembros pLblicos% como en es"e e2emplo5 c ass Ca0p eC ass " pub ic int 1* 44 9o access restrictions. (

J.8

Constructores

/ada &e 1ue se crea una clase o es"ruc"ura% se llama a su cons"ruc"or. Mna clase o es"ruc"ura puede "ener &arios cons"ruc"ores 1ue "oman ar#umen"os diferen"es. (os cons"ruc"ores permi"en al pro#ramador es"ablecer &alores prede"erminados% limi"ar la creaci)n de ins"ancias y escribir c)di#o fle@ible y f$cil de leer. 7bser&aciones5 (os cons"ruc"ores "ienen el mismo nombre 1ue la clase. 0ecuerde 1ue el uso de &ariables no iniciali adas no es"$ permi"ido en /G. Si no proporciona un cons"ruc"or para el ob2e"o% en"onces /G crear$ uno de forma prede"erminada 1ue cree ins"ancias del ob2e"o y es"able ca las &ariables miembro en los &alores prede"erminados. (as clases y es"ruc"uras es"$"icas "ambiHn pueden "ener cons"ruc"ores. (os &alores prede"erminados son -el del S"rin# en null.5

En el e2emplo si#uien"e% una clase denominada Ta@i se define median"e un cons"ruc"or simple. Es"a clase crea ins"ancias con el operador ne3. El operador new in&oca el cons"ruc"or Ta@i inmedia"amen"e despuHs de asi#nar la memoria al nue&o ob2e"o. pub ic c ass !a1i " pub ic boo isInitia iIed* pub ic !a1i() "

9> de 217

isInitia iIed 2 true* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " !a1i t 2 ne3 !a1i()* Conso e.-rite.ine(t.isInitia iIed)* Conso e.7ead.ine()* ( ( En el si#uien"e e2emplo se mues"ra una clase con dos cons"ruc"ores de clase% uno sin ar#umen"os y el o"ro con dos ar#umen"os. c ass Co@rds " pub ic int 1> y* 44 Defau t constructorD pub ic Co@rds() " 1 2 )* y 2 )* ( 44 Constructor 3itE t3o ar$u0entsD pub ic Co@rds(int 1> int y) " tEis.1 2 1* tEis.y 2 y* ( 44 @#erride tEe !oCtrin$ 0etEodD pub ic o#erride strin$ !oCtrin$() " return (Ctrin$.,or0at(/(")(>"1()/> 1> y))* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " Co@rds p1 2 ne3 Co@rds()* Co@rds p2 2 ne3 Co@rds(;> 3)* 44 Disp ay tEe resu ts usin$ tEe o#erriden !oCtrin$ 0etEodD Conso e.-rite.ine(/Co@rds #1 at ")(/> p1)*

;* de 217

Conso e.-rite.ine(/Co@rds #2 at ")(/> p2)* Conso e.7eadAey()* ( (

J.;

Constructores predeter0inados

Mn cons"ruc"or 1ue no "oma nin#Ln par$me"ro se denomina cons"ruc"or prede"erminado. (os cons"ruc"ores prede"erminados se in&ocan cada &e 1ue se crea una ins"ancia de un ob2e"o median"e el operador new y no se proporciona nin#Ln ar#umen"o a new. A menos 1ue la clase sea es"$"ica% a las clases sin cons"ruc"ores se les asi#na un cons"ruc"or pLblico prede"erminado a "ra&Hs del compilador de /G con el fin de 8abili"ar la creaci)n de ins"ancias de clases.

J.=

Constructores pri#ados

Mn cons"ruc"or pri&a"e es un caso especial de cons"ruc"or de ins"ancia. Se u"ili a #eneralmen"e en clases 1ue con"ienen s)lo miembros es"$"icos. Si una clase "iene uno o m$s cons"ruc"ores pri&ados y nin#Ln cons"ruc"or pLblico% el res"o de clases -e@cep"o las anidadas. no podr$n crear ins"ancias de es"a clase. Por e2emplo5 c ass 9.o$ " 44 Pri#ate ConstructorD pri#ate 9.o$() " ( pub ic static doub e e 2 MatE.5* 442.J1N2N... ( 7bser&aciones5 (a declaraci)n de un cons"ruc"or &ac,o e&i"a la #eneraci)n au"om$"ica de un cons"ruc"or prede"erminado. 7bser&e 1ue si no u"ili a un modificador de acceso en el cons"ruc"or% Hs"e ser$ pri&a"e de manera prede"erminada. Sin embar#o% normalmen"e se u"ili a el modificador pri&a"e de manera e@pl,ci"a para aclarar 1ue no es posible crear una ins"ancia de la clase. (os cons"ruc"ores pri&ados se u"ili an para e&i"ar la creaci)n de ins"ancias de una clase cuando no 8ay campos o mH"odos de ins"ancia% por e2emplo% la clase !a"8% o cuando se llama a un mH"odo para ob"ener una ins"ancia de una clase. Si "odos los mH"odos de la clase son es"$"icos% considere con&er"ir la clase comple"a en es"$"ica.

pub ic c ass Counter " pri#ate Counter() " ( pub ic static int currentCount* pub ic static int Incre0entCount() " return ??currentCount* ( ( ' 44 Counter aCounter 2 ne3 Counter()* 44 5rror

;1 de 217

J.J

Destructores

;2 de 217

J.N

C ases static

Mna clase puede declararse como s"a"ic% lo 1ue indica 1ue con"iene s)lo miembros es"$"icos. No es posible crear ins"ancias de una clase es"$"ica median"e la palabra cla&e new. Se car#a au"om$"icamen"e las clases es"$"icas cuando se car#a el pro#rama o espacio de nombres 1ue con"iene la clase. M"ilice una clase es"$"ica para con"ener mH"odos 1ue no es"Hn asociados a un ob2e"o concre"o. Por e2emplo% es un re1uisi"o comLn crear un con2un"o de mH"odos 1ue no ac"Len sobre da"os de ins"ancia y 1ue no es"Hn asociados a un ob2e"o concre"o del c)di#o. Puede u"ili ar una clase es"$"ica para con"ener esos mH"odos. (as carac"er,s"icas principales de una clase es"$"ica son5 S)lo con"ienen miembros es"$"icos. No se puede crear ins"ancias de ellas. S)lo pueden con"ener /ons"ruc"ores pri&ados. /rear una clase es"$"ica es% por consi#uien"e% muy similar a crear una clase 1ue con"iene s)lo miembros es"$"icos y un cons"ruc"or pri&ado. Mn cons"ruc"or pri&ado e&i"a 1ue se creen ins"ancias de la clase. (a &en"a2a de u"ili ar una clase es"$"ica es 1ue el compilador puede comprobar 1ue no se a#re#ue acciden"almen"e nin#Ln miembro de ins"ancia. El compilador #aran"i ar$ 1ue no se puedan crear ins"ancias de es"a clase. (as clases es"$"icas no se pueden 8eredarse. (as clases es"$"icas no pueden con"ener un cons"ruc"or% aun1ue si#ue siendo posible declarar un cons"ruc"or es"$"ico para asi#nar los &alores iniciales o confi#urar al#Ln es"ado es"$"ico.

7bser&aciones5

static c ass Co0panyInfo " pub ic static strin$ GetCo0pany9a0e() " return /Co0pany9a0e/* ( pub ic static strin$ GetCo0pany<ddress() " return /Co0pany<ddress/* ( 44... (

;3 de 217

N Zerencia
(a 8erencia es un concep"o fundamen"al de la pro#ramaci)n orien"ada a ob2e"os. /uando se dice 1ue una cier"a clase A 8ereda o"ra clase 6 si#nifica 1ue la clase A con"iene "odos los miembros de la clase 6 m$s al#unos 1ue opcionalmen"e puede implemen"ar ella misma. (as clases en /G sopor"an 8erencia simple% de forma 1ue una clase puede deri&ar de o"ra% pero no de &arias -como es posible en /KK.. <e 8ec8o% en /G "odas las clases deri&an impl,ci"amen"e de la clase ob2ec". Eerencia simple5 Es"e es le "ipo usado por /G.

Eerencia mLl"iple5 Es"e es el "ipo usado por /KK y N7 usado por /G.

(a sin"a@is 1ue se u"ili a es la si#uien"e5 c ass MiC aseDeri#ada D MiC aseKase " 440ie0bros (

N.1

Propiedades

(as propiedades combinan aspec"os de los campos y de los mH"odos. Para el usuario de un ob2e"o% una propiedad es similar a un campo% el acceso a la propiedad re1uiere e@ac"amen"e la misma sin"a@is. Para el implemen"ador de una clase% una propiedad es uno o dos blo1ues de c)di#o 1ue represen"an un descrip"or de acceso #e" y un descrip"or de mu"aci)n se". El blo1ue de c)di#o para el descrip"or de acceso #e" se e2ecu"a cuando se lee la propiedad? el blo1ue de c)di#o para el descrip"or de mu"aci)n se" se e2ecu"a cuando se asi#na un nue&o &alor a la propiedad. Mna propiedad sin un descrip"or de acceso se" se considera de s)lo lec"ura. Mna propiedad sin un descrip"or de acceso #e" se considera de s)lo escri"ura. Mna propiedad con ambos descrip"ores de acceso es de lec"ura y escri"ura.
;4 de 217

A diferencia de los campos% las propiedades no es"$n clasificadas como &ariables. Por lo "an"o% no se puede pasar una propiedad como un par$me"ro. (as propiedades "ienen muc8os usos5 &alidan da"os an"es de permi"ir un cambio? e@ponen da"os de forma "ransparen"e en una clase donde se recuperan realmen"e los da"os de o"ro ori#en% como una base de da"os? reali an una acci)n cuando se modifican da"os% por e2emplo% pro&ocar un e&en"o% o cambian el &alor de o"ros campos.

(as propiedades se declaran den"ro del blo1ue de clase especificando el ni&el de acceso del campo% se#uido por el "ipo de la propiedad% se#uido por el nombre de la propiedad y% a con"inuaci)n% un blo1ue de c)di#o 1ue declara el descrip"or de acceso #e" yJo el descrip"or de mu"aci)n se". Por e2emplo5 pub ic c ass Date " pri#ate int 0ontE 2 J* pub ic int MontE " $et " return 0ontE* ( set " 44ase$urarse de que e #a or MontE se estab ece entre 1 y 12. Caso contrario ) if ((#a ue ^ )) __ (#a ue F 13)) 0ontE 2 #a ue* e se 0ontE 2 )* ( ( (

N.1.1 <cceso $et


El cuerpo del descrip"or de acceso #e" es similar al de un mH"odo. <ebe de&ol&er el &alor del "ipo de la propiedad. (a e2ecuci)n del descrip"or de acceso #e" e1ui&ale a leer el &alor del campo. c ass Person " pri#ate strin$ na0e* 44 tEe na0e fie d pub ic strin$ 9a0e 44 tEe 9a0e property " $et " return na0e* ( ( ( Para llamar al &alor de name desde o"ra clase% debemos usar por obli#aci)n la propiedad y no la &ariable. Por e2emplo5 Person p1 2 ne3 Person()* Cyste0.Conso e.-rite(p1.9a0e)* 44 5 acceso $et se in#oca aquH /ambiar el es"ado de un ob2e"o median"e el descrip"or de acceso #e" es una "Hcnica de pro#ramaci)n poco recomendable. Por e2emplo% pri#ate int nu0ber* pub ic int 9u0ber " $et " return nu0ber??* 44 9o Eacer esto ( ( Se puede u"ili ar el descrip"or de acceso #e" para de&ol&er el &alor de un campo o para calcularlo y de&ol&erlo. Por e2emplo5 c ass 50p oyee " pri#ate strin$ na0e* pub ic strin$ 9a0e " $et " return na0e `2 nu Y na0e D /9</* ( ( (

;9 de 217

N.1.2 Mutador set


El descrip"or de mu"aci)n se" es similar a un mH"odo cuyo "ipo de &alor de&uel"o es &oid. M"ili a un par$me"ro impl,ci"o denominado &alue% 1ue "iene el mismo "ipo 1ue la propiedad. En el si#uien"e e2emplo se a#re#a un descrip"or de mu"aci)n se" a la propiedad Name5 c ass Person " pri#ate strin$ na0e* 44 tEe na0e fie d pub ic strin$ 9a0e 44 tEe 9a0e property " $et " return na0e* ( set " na0e 2 #a ue* ( ( ( /uando se asi#ne un &alor a la propiedad% se llamar$ al descrip"or de mu"aci)n se" con un ar#umen"o 1ue proporciona el nue&o &alor. Por e2emplo5 Person p1 2 ne3 Person()* p1.9a0e 2 /Soe/* 44 tEe set accessor is in#o:ed Eere Cyste0.Conso e.-rite(p1.9a0e)* 44 tEe $et accessor is in#o:ed Eere 7bser&aciones (as propiedades pueden marcarse como public% pri&a"e% pro"ec"ed% in"ernal o pro"ec"ed in"ernal. Es"os modificadores de acceso definen c)mo pueden "ener acceso a las propiedades los usuarios de la clase. (os descrip"ores de acceso #e" y se" para la misma propiedad pueden "ener modificadores de acceso diferen"es. Por e2emplo% el descrip"or de acceso #e" puede ser public para permi"ir el acceso de s)lo lec"ura desde fuera del "ipo% y el descrip"or de acceso se" puede ser pri&a"e o pro"ec"ed. Mna propiedad puede declararse como propiedad es"$"ica median"e la palabra cla&e s"a"ic. Es"o 8ace 1ue la propiedad es"H siempre disponible para los llamadores% aun1ue no e@is"a nin#una ins"ancia de la clase. Mna propiedad puede marcarse como propiedad &ir"ual median"e la palabra cla&e &ir"ual. Es"o permi"e 1ue las clases deri&adas reemplacen el compor"amien"o de la propiedad median"e la palabra cla&e o&erride. Mna propiedad 1ue reempla a una propiedad &ir"ual "ambiHn puede ser de "ipo sealed% lo cual especifica 1ue ya no es &ir"ual para las clases deri&adas. Por Ll"imo% una propiedad puede declararse como abs"rac"% lo 1ue si#nifica 1ue no 8ay nin#una implemen"aci)n en la clase y las clases deri&adas deben escribir su propia implemen"aci)n. No es correc"o u"ili ar un modificador &ir"ual% abs"rac" o o&erride en un descrip"or de acceso de una propiedad s"a"ic. En es"e e2emplo se mues"ra el uso de propiedades de ins"ancia% es"$"icas y de s)lo lec"ura. Se define el nombre del empleado% incremen"a el nLmero de empleados Number7fEmployees en una unidad y mues"ra el nombre del empleado y su nLmero correspondien"e. pub ic c ass 50p oyee " pub ic static int 9u0ber@f50p oyees* pri#ate static int counter* pri#ate strin$ na0e* 44 < readL3rite instance propertyD pub ic strin$ 9a0e " $et " return na0e* ( set " na0e 2 #a ue* ( ( 44 < readLon y static propertyD pub ic static int Counter " $et " return counter* ( (
;; de 217

44 < ConstructorD pub ic 50p oyee() " 44 Ca cu ate tEe e0p oyeeBs nu0berD counter 2 ??counter ? 9u0ber@f50p oyees* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " 50p oyee.9u0ber@f50p oyees 2 1))* 50p oyee e1 2 ne3 50p oyee()* e1.9a0e 2 /C aude Wi$e/* Cyste0.Conso e.-rite.ine(/50p oyee nu0berD ")(/> 50p oyee.Counter)* Cyste0.Conso e.-rite.ine(/50p oyee na0eD ")(/> e1.9a0e)* Conso e.7ead.ine()* ( (

En es"e e2emplo se mues"ra el mH"odo para "ener acceso a una propiedad de una clase base 1ue es"$ ocul"a por o"ra propiedad con el mismo nombre de una clase deri&ada. pub ic c ass 50p oyee " pri#ate strin$ na0e* pub ic strin$ 9a0e " $et " return na0e* ( set " na0e 2 #a ue* ( ( ( pub ic c ass Mana$er D 50p oyee " pri#ate strin$ na0e* 44 9otice tEe use of tEe ne3 0odifierD pub ic ne3 strin$ 9a0e " $et " return na0e* ( set " na0e 2 #a ue ? /> Mana$er/* ( ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " Mana$er 01 2 ne3 Mana$er()* 44 Deri#ed c ass property. 01.9a0e 2 /SoEn/* 44 Kase c ass property. ((50p oyee)01).9a0e 2 /Mary/*

;7 de 217

Cyste0.Conso e.-rite.ine(/9a0e in tEe deri#ed c ass isD ")(/> 01.9a0e)* Cyste0.Conso e.-rite.ine(/9a0e in tEe base c ass isD ")(/> ((50p oyee)01).9a0e)* Conso e.7ead.ine()* ( (

N.2

Zerencia

En la ilus"raci)n si#uien"e se mues"ra una clase 4ork3"em 1ue represen"a un elemen"o de "raba2o en al#Ln proceso de ne#ocio. /omo "odas las clases% deri&a de Sys"em.7b2ec" y 8ereda "odos sus mH"odos. 4ork3"em a#re#a cinco miembros propios. Es"o incluye un cons"ruc"or% por1ue los cons"ruc"ores no se 8eredan. /8an#e0e1ues" 8ereda de 4ork3"em y represen"a un "ipo de"erminado de elemen"o de "raba2o. /8an#e0e1ues" a#re#a dos miembros m$s a los miembros 1ue 8ereda de 4ork3"em y 7b2ec". <ebe a#re#ar su propio cons"ruc"or y "ambiHn a#re#a un miembro 1ue permi"ir$ asociar /8an#e0e1ues" al elemen"o 4ork3"em ori#inal al 1ue se aplica el cambio.

N.3

#irtua

(a palabra cla&e &ir"ual se u"ili a para modificar un mH"odo% propiedad% indi ador o declaraci)n de e&en"o y permi"e in&alidar cual1uiera de es"os elemen"os en una clase deri&ada. En el si#uien"e e2emplo% cual1uier clase 1ue 8ereda es"e mH"odo puede reempla arlo5 pub ic #irtua doub e <rea() " return 1 V y* ( (a implemen"aci)n de un miembro &ir"ual puede reempla arse por un miembro de reempla o de una clase deri&ada. 7bser&aciones5 /uando se in&oca un mH"odo &ir"ual% el "ipo en "iempo de e2ecuci)n del ob2e"o se comprueba para &er si e@is"e un miembro de reempla o. Se reali a una llamada al miembro de reempla o 1ue es"$ en la clase de mayor deri&aci)n% el cual puede ser el miembro ori#inal% si no e@is"e nin#una clase
;= de 217

deri&ada 1ue 8aya reempla ado el miembro. <e forma prede"erminada% los mH"odos son no &ir"uales. No se puede reempla ar un mH"odo no &ir"ual. No puede u"ili ar el modificador &ir"ual con los modificadores s"a"ic% abs"rac"% pri&a"e u o&erride. (as propiedades &ir"uales funcionan como los mH"odos abs"rac"os% sal&o en lo 1ue se refiere a las diferencias en la sin"a@is de las declaraciones e in&ocaciones. Es incorrec"o u"ili ar el modificador &ir"ual para una propiedad es"$"ica. Mna propiedad &ir"ual 8eredada se puede reempla ar en una clase deri&ada si se incluye una declaraci)n de propiedad 1ue use el modificador o&erride.

N.8

o#erride

El modificador o&erride es necesario para ampliar o modificar la implemen"aci)n abs"rac"a o &ir"ual de un mH"odo% propiedad% indi ador o e&en"o 8eredado. En es"e e2emplo% la clase <imensions con"iene las dos coordenadas @ e y y el mH"odo &ir"ual Area-.. (as clases de las diferen"es fi#uras% como /ircle% /ylinder y Sp8ere% 8eredan la clase <imensions% 1ue permi"e calcular el $rea de la superficie de cada fi#ura. /ada clase deri&ada dispone de su propia implemen"aci)n de Area-. -mH"odo de reempla o.. El pro#rama calcula y mues"ra el $rea apropiada para cada fi#ura in&ocando la implemen"aci)n adecuada del mH"odo Area-. se#Ln el ob2e"o asociado al mH"odo. pub ic c ass Di0ensions " pub ic const doub e PI 2 MatE.PI* protected doub e 1> y* pub ic Di0ensions() " ( pub ic Di0ensions(doub e 1> doub e y) " tEis.1 2 1* tEis.y 2 y* ( pub ic #irtua doub e <rea() " return 1 V y* ( ( pub ic c ass Circ e D Di0ensions " pub ic Circ e(doub e r) D base(r> )) " ( pub ic o#erride doub e <rea() " return PI V 1 V 1* ( ( c ass CpEere D Di0ensions " pub ic CpEere(doub e r) D base(r> )) " ( pub ic o#erride doub e <rea() " return 8 V PI V 1 V 1* ( ( c ass Cy inder D Di0ensions " pub ic Cy inder(doub e r> doub e E) D base(r> E) " (
;> de 217

pub ic o#erride doub e <rea() " return 2 V PI V 1 V 1 ? 2 V PI V 1 V y* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " doub e r 2 3.)> E 2 ;.)* Di0ensions c 2 ne3 Circ e(r)* Di0ensions s 2 ne3 CpEere(r)* Di0ensions 2 ne3 Cy inder(r> E)* Conso e.-rite.ine(/<rea of Circ e 2 ")D,2(/> c.<rea())* Conso e.-rite.ine(/<rea of CpEere 2 ")D,2(/> s.<rea())* Conso e.-rite.ine(/<rea of Cy inder 2 ")D,2(/> .<rea())* Conso e.7ead.ine()* ( ( En es"e e2emplo% la clase Pro#ram debe proporcionar una implemen"aci)n de in&alidaci)n de Area por1ue Hs"a se 8ereda de la clase abs"rac"a S8apes/lass5 abstract c ass CEapesC ass " abstract pub ic int <rea()* ( c ass Pro$ra0 D CEapesC ass " int side 2 )* pub ic Pro$ra0(int n) " side 2 n* ( 44 <rea 0etEod is required to a#oid a co0pi eLti0e error. pub ic o#erride int <rea() " return side V side* ( static #oid Main(strin$%& ar$s) " Pro$ra0 sq 2 ne3 Pro$ra0(12)* Conso e.-rite.ine(/<rea of tEe square 2 ")(/> sq.<rea())* Conso e.7ead.ine()* ( ( En el e2emplo si#uien"e se mues"ra c)mo se e@presan en /G las relaciones de clase presen"adas en la ilus"raci)n an"erior. En el e2emplo "ambiHn se mues"ra c)mo 4ork3"em in&alida el mH"odo &ir"ual 7b2ec".ToS"rin# y c)mo la clase /8an#e0e1ues" 8ereda la implemen"aci)n de 4ork3"em del mH"odo.
7* de 217

pub ic c ass -or:Ite0 " pri#ate static int ne1tID* protected int ID " $et* set* ( protected !i0eCpan 6ob.en$tE " $et* set* ( 44Duracin de traba6o protected strin$ !it e " $et* set* ( protected strin$ Description " $et* set* ( 44 Defau t constructor pub ic -or:Ite0() " ID 2 )* !it e 2 /Defau t tit e/* Description 2 /Defau t description./* 6ob.en$tE 2 ne3 !i0eCpan()* ( 44 Ctatic constructor for static 0e0ber static -or:Ite0() " ne1tID 2 )* ( 44 Instance constructor pub ic -or:Ite0(strin$ tit e> strin$ desc> !i0eCpan 6ob en) " tEis.ID 2 Get9e1tID()* tEis.!it e 2 tit e* tEis.Description 2 desc* tEis.6ob.en$tE 2 6ob en* ( protected int Get9e1tID() " return ??ne1tID* ( pub ic #oid Mpdate(strin$ tit e> !i0eCpan 6ob en) " tEis.!it e 2 tit e* tEis.6ob.en$tE 2 6ob en* ( 44 Wirtua 0etEod o#erride pub ic o#erride strin$ !oCtrin$() " return Ctrin$.,or0at(/")( L "1(/> tEis.ID> tEis.!it e)* ( ( 44 CEan$e7equest deri#es fro0 -or:Ite0 and adds t3o of its o3n 0e0bers. pub ic c ass CEan$e7equest D -or:Ite0 " protected int ori$ina Ite0ID " $et* set* ( pub ic CEan$e7equest() " ( pub ic CEan$e7equest(strin$ tit e> strin$ desc> !i0eCpan 6ob.en> int ori$ina ID) " tEis.ID 2 Get9e1tID()* tEis.!it e 2 tit e* tEis.Description 2 desc* tEis.6ob.en$tE 2 6ob.en* tEis.ori$ina Ite0ID 2 ori$ina ID* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " -or:Ite0 ite0 2 ne3 -or:Ite0( /,i1 Ku$s/> /,i1 a bu$s in 0y source code brancE/> ne3 !i0eCpan(3> 8> )> )))* 44DiasLEorasL0inutosLse$undos CEan$e7equest cEan$e 2 ne3 CEan$e7equest(
71 de 217

/CEan$e desi$n of base c ass/> /<dd 0e0bers to base c ass/> ne3 !i0eCpan(8> )> ))> 44ZorasL0inutosLse$undos 1)* Conso e.-rite.ine(ite0.!oCtrin$())* 44 CEan$e7equest inEerits -or:Ite0Bs o#erride of !oCtrin$ Conso e.-rite.ine(cEan$e.!oCtrin$())* Conso e.7ead.ine()* ( (

N.;

protected

Es un modificador de acceso a miembros. Mn miembro pro"e#ido es accesible den"ro de su clase y por ins"ancias de clases deri&adas. Por e2emplo% se puede ob"ener acceso a un miembro pro"e#ido de una clase base en una clase deri&ada s)lo si el acceso se reali a a "ra&Hs del "ipo de la clase deri&ada. Por e2emplo% considere el si#uien"e se#men"o de c)di#o5 c ass < " protected int 1 2 123* ( c ass Pro$ra0D< " static #oid Main(strin$%& ar$s) " < a 2 ne3 <()* Pro$ra0 p 2 ne3 Pro$ra0()* 445sto es un error 44 a.1 2 1)* 44 @A. p.1 2 1)* ( (

N.=

base

(a palabra cla&e base se u"ili a para ob"ener acceso a los miembros de la clase base desde una clase deri&ada5 0ealice una llamada a un mH"odo de la clase base reempla ado por o"ro mH"odo.

72 de 217

Especifi1ue a 1uH cons"ruc"or de la clase base se debe llamar para crear ins"ancias de la clase deri&ada. El acceso a una clase base s)lo se permi"e en un cons"ruc"or% en un mH"odo de ins"ancia o en un descrip"or de acceso a una propiedad de ins"ancia. Es incorrec"o u"ili ar la palabra cla&e base desde den"ro de un mH"odo es"$"ico.

En es"e e2emplo% "an"o la clase base% Person% como la clase deri&ada% Employee% poseen un mH"odo denominado De"info. !edian"e la palabra cla&e base% se puede reali ar una llamada al mH"odo De"info de la clase base desde la clase deri&ada. pub ic c ass Person " protected strin$ ssn 2 /888L;;L====/* protected strin$ na0e 2 /SoEn .. Ma $raine/* pub ic #oid GetInfo() " Conso e.-rite.ine(/9a0eD ")(/> na0e)* Conso e.-rite.ine(/CC9D ")(/> ssn)* ( ( c ass 50p oyee D Person " pub ic strin$ id 2 /<KC;=J5,G/* pub ic #oid Ca Info() " 44 . a0ar a 0Ttodo de c ase base GetInfo base.GetInfo()* Conso e.-rite.ine(/50p oyee IDD ")(/> id)* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " 50p oyee e 2 ne3 50p oyee()* e.Ca Info()* Conso e.7ead.ine()* ( ( Es"e e2emplo mues"ra c)mo especificar el cons"ruc"or de la clase base al 1ue se reali a la llamada cuando se crean ins"ancias de una clase deri&ada. pub ic c ass KaseC ass " int nu0* pub ic KaseC ass() " Conso e.-rite.ine(/in KaseC ass()/)* ( pub ic KaseC ass(int i) "
73 de 217

nu0 2 i* Conso e.-rite.ine(/in KaseC ass(int i)/)* ( pub ic int Get9u0() " return nu0* ( ( c ass Pro$ra0 D KaseC ass " pri#ate int a* 44 5ste constructor a0arU a KaseC ass.KaseC ass() pub ic Pro$ra0() D base() " a 2 2* ( 44 5ste constructor a0arU a KaseC ass.KaseC ass(int i) pub ic Pro$ra0(int i) D base(i) " a 2 ;* ( static #oid Main(strin$%& ar$s) " Pro$ra0 0d 2 ne3 Pro$ra0()* Pro$ra0 0d1 2 ne3 Pro$ra0(1)* Conso e.7ead.ine()* ( (

N.J

sea ed

El modificador sealed% cuando se aplica a una clase% impide 1ue o"ras clases se 8ereden de Hl. En el e2emplo% la clase 6 se 8ereda de la clase A% pero no es posible 8eredar nin#una clase de la clase 6. c ass < " '.. ( sea ed c ass K D < " '. ( El modificador sealed "ambiHn puede u"ili arse en un mH"odo o propiedad 1ue in&alide un mH"odo o propiedad &ir"ual en una clase base. <e es"a forma% puede permi"ir la deri&aci)n de clases de su clase e impedir 1ue in&aliden de"erminados mH"odos o propiedades &ir"uales. En el e2emplo si#uien"e% X se 8ereda de Y% pero X no puede in&alidar la funci)n &ir"ual + 1ue se declara en ' y se sella en Y. c ass + " protected #irtua #oid ,() " Conso e.-rite.ine(/+.,/)* ( protected #irtua #oid ,2() " Conso e.-rite.ine(/+.,2/)* (
74 de 217

( c ass Q D + " sea ed protected o#erride #oid ,() " Conso e.-rite.ine(/Q.,/)* ( protected o#erride #oid ,2() " Conso e.-rite.ine(/+.,3/)* ( ( c ass a D Q " 44 5 intento de anu ar , causas de error de co0pi ador CC)23R. 44 protected o#erride #oid ,() " Conso e.-rite.ine(/C.,/)* ( protected o#erride #oid ,2() " Conso e.-rite.ine(/a.,2/)* ( (

N.N

C ases abstractas

Puede declarar una clase como resumen si desea e&i"ar la creaci)n de ins"ancias direc"a u"ili ando la nue&a palabra cla&e. Si 8ace es"o% la clase solo se puede u"ili ar si una nue&a clase se deri&a de ella.Mna clase abs"rac"a puede con"ener una o m$s firmas de mH"odo 1ue se declaran a s, mismas como abs"rac"as.Es"as firmas especifican los par$me"ros y el &alor de&uel"o pero no "ienen nin#una implemen"aci)n -cuerpo del mH"odo..Mna clase abs"rac"a no "iene 1ue con"ener miembros abs"rac"os? sin embar#o% si una clase con"iene un miembro abs"rac"o% la propia clase se debe declarar como abs"rac"a.(as clases deri&adas 1ue no son abs"rac"as por s, mismas deben proporcionar la implemen"aci)n de cual1uier mH"odo abs"rac"o de una clase base abs"rac"a.

Dise\o de c ases abstractas <ado 1ue nunca se deber,an crear ins"ancias de las clases abs"rac"as% es impor"an"e definir correc"amen"e sus cons"ruc"ores.TambiHn es impor"an"e #aran"i ar 1ue la funcionalidad de su clase abs"rac"a sea correc"a y se pueda e@"ender con facilidad.(as ins"rucciones si#uien"es ayudan a #aran"i ar 1ue las clases abs"rac"as se diseSan correc"amen"e y funcionan como se espera cuando se implemen"an. No defina cons"ruc"ores de "ipo public o pro"ec"ed in"ernal en "ipos abs"rac"os. (os cons"ruc"ores con &isibilidad public o pro"ec"ed in"ernal son para los "ipos de los 1ue se pueden crear ins"ancias.Nunca se pueden crear ins"ancias de los "ipos abs"rac"os. <efina cons"ruc"ores pro"e#idos o in"ernos en clases abs"rac"as. Si define un cons"ruc"or pro"e#ido en una clase abs"rac"a% la clase base puede reali ar "areas de iniciali aci)n cuando se crean ins"ancias de una clase deri&ada.Mn cons"ruc"or in"erno impide el uso de una clase abs"rac"a como clase base de los "ipos 1ue no es"$n en el mismo ensamblado 1ue la clase abs"rac"a. Proporcione por lo menos un "ipo concre"o 1ue 8erede de cada una de las clases abs"rac"as 1ue dis"ribuya. Es"a pr$c"ica ayuda a los diseSadores de biblio"ecas a locali ar problemas o descuidos en el diseSo de la clase abs"rac"a.TambiHn si#nifica 1ue% para los escenarios de al"o ni&el en los 1ue puede 1ue los desarrolladores no comprendan las clases abs"rac"as y la 8erencia% pueden u"ili ar la clase concre"a sin necesidad de aprender es"os concep"os. Por e2emplo% .NET +ramework proporciona las clases abs"rac"as 4eb0e1ues" y 4eb0esponse para con"rolar el en&,o de solici"udes a un iden"ificador de recursos uniforme -M03. y recibir respues"as del mismo./omo una de &arias implemen"aciones concre"as de es"as clases abs"rac"as% +ramework incluye las clases E""p4eb0e1ues" y E""p4eb0esponse% 1ue son implemen"aciones espec,ficas de las clases abs"rac"as. abs"rac" El modificador abs"rac" indica 1ue el elemen"o ob2e"o de la modificaci)n "iene una implemen"aci)n incomple"a o 1ue le fal"a una implemen"aci)n. El modificador abs"rac" se puede usar con clases% mH"odos% propiedades% indi adores y e&en"os.Mse el modificador abs"rac" en una declaraci)n de clase para indicar 1ue la clase s)lo se puede u"ili ar como clase base de o"ras clases.(os miembros 1ue es"$n marcados
79 de 217

como abs"rac"os o 1ue se incluyen en una clase abs"rac"a% deben ser implemen"ados por clases deri&adas de la clase abs"rac"a. En es"e e2emplo% la clase +i#ura debe proporcionar una implemen"aci)n de Area por1ue deri&a de S8apes/lass5 abstract c ass ,i$ura " 44MTtodo para ca cu ar Treas de di#ersas for0as $eo0Ttricas abstract pub ic int <rea()* ( c ass Cuadrado D ,i$ura " int side 2 )* pub ic Cuadrado(int n) " side 2 n* ( 44Cobrescribe e 0Ttodo <rea. 44Ca cu a de 0anera particu ar e Urea de un Cuadrado pub ic o#erride int <rea() " return side V side* ( static #oid Main(strin$%& ar$s) " Cuadrado sq 2 ne3 Cuadrado(12)* Conso e.-rite.ine(/<rea ,i$ura 2 ")(/> sq.<rea())* Conso e.7ead.ine()* ( ( El caso es 1ue sucede si se re1uiere calcular el $rea de un c,rculo. Es"amos obli#ados a 8eredar desde la clase +i#ura y dar implemene"aci)n la mH"odo Area-.. abstract c ass ,i$ura " 44MTtodo para ca cu ar Treas de di#ersas for0as $eo0Ttricas abstract pub ic int <rea()* ( c ass Cuadrado D ,i$ura " int side 2 )* pub ic Cuadrado(int n) " side 2 n* ( 44Cobrescribe e 0Ttodo <rea. 44Ca cu a de 0anera particu ar e Urea de un Cuadrado pub ic o#erride int <rea() " return side V side* ( ( c ass Circu o D ,i$ura " int side 2 )* pub ic Circu o(int r) " side 2 r* ( 44Cobrescribe e 0Ttodo <rea. 44Ca cu a de 0anera particu ar e Urea de un Circu o pub ic o#erride int <rea() " return Con#ert.!oInt32(MatE.PI V MatE.Po3(side>2))* ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) "
7; de 217

Cuadrado sq1 2 ne3 Cuadrado(12)* Circu o sq2 2 ne3 Circu o(12)* Conso e.-rite.ine(/<rea Cuadrado 2 ")(/> sq1.<rea())* Conso e.-rite.ine(/<rea Circu o 2 ")(/> sq2.<rea())* Conso e.7ead.ine()* ( (

MTtodos abstract (os mH"odos abs"rac"os presen"an las si#uien"es carac"er,s"icas5 Mn mH"odo abs"rac"o es% impl,ci"amen"e% un mH"odo &ir"ual. (as declaraciones de mH"odos abs"rac"os s)lo se permi"en en clases abs"rac"as. <ebido a 1ue una declaraci)n de mH"odo abs"rac"o no proporciona una implemen"aci)n% no e@is"e cuerpo del mH"odo? la declaraci)n de mH"odo finali a simplemen"e con un pun"o y coma y sin lla&es -Z [. despuHs de la firma.Por e2emplo5 pub ic abstract #oid MyMetEod()* (a implemen"aci)n la proporciona un mH"odo de reempla o% 1ue es miembro de una clase no abs"rac"a. M"ili ar los modificadores s"a"ic o &ir"ual en una declaraci)n de mH"odo abs"rac"o produce un error.

Propiedades abstract Mna propiedad abs"rac"a 8eredada se puede reempla ar en una clase deri&ada si se incluye una declaraci)n de propiedad 1ue u"ilice el modificador o&erride. En es"e e2emplo% la clase <eri&ed/lass se deri&a de una clase abs"rac"a 6ase/lass.(a clase abs"rac"a con"iene un mH"odo abs"rac"o% Abs"rac"!e"8od% y dos propiedades abs"rac"as% ' e Y. abstract c ass KaseC ass " 44 <bstract c ass protected int X1 2 1))* protected int Xy 2 1;)* pub ic abstract #oid <bstractMetEod()* 44 MTtodo <bstract pub ic abstract int + " $et* ( 44Propiedad <bstract pub ic abstract int Q " $et* ( 44Propiedad <bstract ( c ass Pro$ra0 D KaseC ass " pub ic o#erride #oid <bstractMetEod() " 44 Cobrescribe MetEod X1??* Xy??* ( pub ic o#erride int + " 44 Cobrescribe property $et " return X1 ? 1)* ( ( pub ic o#erride int Q " 44 Cobrescribe property $et " return Xy ? 1)* ( ( static #oid Main(strin$%& ar$s) " Pro$ra0 o 2 ne3 Pro$ra0()* o.<bstractMetEod()*
77 de 217

Conso e.-rite.ine(/1 2 ")(> y 2 "1(/> o.+> o.Q)* Conso e.7ead.ine()* ( (

En es"e e2emplo se u"ili an dos clases% /ube y S1uare para implemen"ar una clase abs"rac"a% S8ape% y reempla ar su propiedad abs"rac"a Area. /on&iene resal"ar 1ue se u"ili a el modificador o&erride en las propiedades. El pro#rama lee el &alor del lado como en"rada y calcula las superficies del cuadrado y el cubo. TambiHn lee el &alor de la superficie como en"rada y calcula el lado correspondien"e del cuadrado y el cubo. abstract c ass CEape " pub ic abstract doub e <rea " $et* set* ( ( c ass Cquare D CEape " pub ic doub e side* pub ic Cquare(doub e s) " side 2 s* ( pub ic o#erride doub e <rea " $et " return side V side* ( set " side 2 Cyste0.MatE.Cqrt(#a ue)* ( ( ( c ass Cube D CEape " pub ic doub e side* pub ic Cube(doub e s) " side 2 s* ( pub ic o#erride doub e <rea " $et " return = V side V side* ( set " side 2 Cyste0.MatE.Cqrt(#a ue 4 =)* ( ( ( c ass Pro$ra0 " static #oid Main(strin$%& ar$s) " 44 Input tEe sideD Cyste0.Conso e.-rite(/5nter tEe sideD /)* doub e side 2 doub e.Parse(Cyste0.Conso e.7ead.ine())* 44 Co0pute tEe areasD Cquare s 2 ne3 Cquare(side)* Cube c 2 ne3 Cube(side)* 44 Disp ay tEe resu tsD Cyste0.Conso e.-rite.ine(/<rea of tEe square 2 ")D,2(/> s.<rea)* Cyste0.Conso e.-rite.ine(/<rea of tEe cube 2 ")D,2(/> c.<rea)*
7= de 217

Cyste0.Conso e.-rite.ine()* 44 Input tEe areaD Cyste0.Conso e.-rite(/5nter tEe areaD /)* doub e area 2 doub e.Parse(Cyste0.Conso e.7ead.ine())* 44 Co0pute tEe sidesD s.<rea 2 area* c.<rea 2 area* 44 Disp ay tEe resu tsD Cyste0.Conso e.-rite.ine(/Cide of tEe square 2 ")D,2(/> s.side)* Cyste0.Conso e.-rite.ine(/Cide of tEe cube 2 ")D,2(/> c.side)* Conso e.7ead.ine()* ( (

7> de 217

interna (a palabra cla&e in"ernal es un modificador de acceso para "ipos y miembros de "ipos.(os "ipos o miembros in"ernos s)lo son accesibles den"ro de los arc8i&os del mismo ensamblado% como en es"e e2emplo5 pub ic c ass KaseC ass " 44 @n y accessib e 3itEin tEe sa0e asse0b y interna static int 1 2 )* ( 7bser&aciones5 El acceso a los "ipos o miembros 1ue "ienen el modificador de acceso pro"ec"ed in"ernal se puede reali ar desde el ensamblado ac"ual o desde "ipos deri&ados de la clase con"enedora. Mn uso 8abi"ual del acceso de "ipo in"erno se da en el desarrollo basado en componen"es% ya 1ue permi"e a un #rupo de componen"es cooperar de manera pri&ada sin es"ar e@pues"o al res"o del c)di#o de la aplicaci)n. Por e2emplo% un marco de "raba2o para compilar in"erfaces #r$ficas de usuario podr,a proporcionar clases /on"rol y +orm 1ue cooperan median"e miembros con acceso in"erno./omo es"os miembros son in"ernos% no es"$n e@pues"os al c)di#o 1ue u"ili a la es"ruc"ura. Si se 8ace referencia a un "ipo o miembro con acceso in"erno fuera del ensamblado en el 1ue se defini)% produce un error.

=* de 217

R GridWie3
El con"rol Drid:iew se u"ili a para mos"rar los da"os en una "abla. /on el con"rol Drid:iew% puede mos"rar% edi"ar% eliminar% ordenar y recorrer los da"os de "ablas de muc8os "ipos diferen"es de or,#enes de da"os% en"re los 1ue se incluyen bases de da"os% arc8i&os '!( y ob2e"os comerciales 1ue e@ponen los da"os. 7bser&ar 1ue el con"rol Drid:iew es el sucesor del con"rol <a"aDrid.

3r al modo de diseSo.

(an ar un Drid:iew sobre la p$#ina.

Es"o #enera lo si#uien"e5

=1 de 217

Ele#ir ANue&o ori#en de da"os...B

Seleccionar Abase de da"osB

Eacer clic en ANue&a cone@i)nB

=2 de 217

3ndicar los par$me"ros de su ser&idor S1l Ser&er.

Eacer clic en ASi#uien"eB

=3 de 217

Eacer clic en ASi#uien"eB. No"ar 1ue el nombre de la cone@i)n se incluir$ en el arc8i&o de confi#uraci)n de una aplicaci)n asp.ne" el cual se llam$ web.confi#.

Seleccionar se#Ln se indica y 8acer clic en ASi#uien"eB

=4 de 217

Eacer clic en A+inali arB

Al e2ecu"ar se "iene5

=9 de 217

R.1.1

,or0atear GridWie3

3r a la opci)n A+orma"o au"om$"ico...B

Seleccionar uno de ellos y 8acer clic en AAcep"arB

=; de 217

Al e2ecu"ar se "iene5

3r a la opci)n AEdi"ar columnas...B

=7 de 217

Eeader"e@"5 Permi"e cambiar el ","ulo del campo en el formulario.

Denerar lo si#uien"e5

== de 217

<a"a+orma"S"rin#5 M"ilice la propiedad <a"a+orma"S"rin# para especificar un forma"o de presen"aci)n personali ado para los &alores mos"rados en el ob2e"o 6ound+ield. Si no se es"ablece la propiedad <a"a+orma"S"rin#% el &alor del campo se mues"ra sin nin#Ln forma"o especial. /uando la propiedad E"mlEncode es "rue% el &alor del campo es ET!( codificado en su represen"aci)n de cadena an"es de 1ue se apli1ue la cadena de forma"o. /on al#unos ob2e"os% por e2emplo fec8as% "al &e desee con"rolar c)mo se mues"ra el ob2e"o con una cadena de forma"o. En esos casos% debe es"ablecer la propiedad E"mlEncode en false. +orma"os para nLmeros5

=> de 217

+orma"os par fec8as y 8ora.

>* de 217

>1 de 217

Para forma"ear la fec8a considerar5

>2 de 217

El resul"ado e5

>3 de 217

(a es"a"ura con 3 decimales5

El resul"ado es5

>4 de 217

(os formularios deben ser definidos con anc8os fi2o para 1ue no se pro&o1uen efec"os desa#radables a la &is"a del usuario. Abrir la opci)n AEeaderS"yleB

Por e2emplo5

>9 de 217

Para el campo de ANombreB.

Para darle propiedad a los da"os debemos abrir la opci)n A3"emS"yleB.

>; de 217

Para mane2ar los es"ilos sobre los abrimos opci)n Afon"B. A1u, se de2ar$ en ne#ri"as e i"$lica la es"arura.

>7 de 217

El resul"ado es5

R.1.2

,or0ateos especia es

Para dar forma"os a los da"os 1ue se mues"ran% se recomienda "ra"ar los da"os en la consul"a. Por e2emplo% para conse#uir5 Nombres en mayLsculas Se@o5 Eombre% mu2er Para cada una de las elecciones S3 o N7.

:amos a la opci)n A/onfi#urar ori#en de da"os...B

>= de 217

Eacer clic en ASi#uien"eB.

Seleccionar lo indicado5

>> de 217

Eacer clic en ADenerador de consul"aB

Proceder como se mues"ra.

1** de 217

(a consul"a s1l asociada es5 SE(E/T id% nombre% edad% -/ASE se@o 4EEN \True\ TEEN \!u2er\ E(SE \Eombre\ EN<. AS se@o% es"a"ura% in#reso% -/ASE in"eres1 4EEN \True\ TEEN \S3\ E(SE \N7\ EN<. AS in"eres1% -/ASE in"eres2 4EEN \True\ TEEN \S3\ E(SE \N7\ EN<. AS in"eres2% -/ASE in"eres3 4EEN \True\ TEEN \S3\ E(SE \N7\ EN<. AS in"eres3 clien"e

+07!

Eacer clic en ASi#uien"eB.

Eacer clic en A+inali arB.

1*1 de 217

Nos en&,a el si#uien"e mensa2e. /on es"o perdemos el forma"o pre&iamen"e definido

R.1.3

,i trar datos

:amos a incluir un <rop<onw(is"

1*2 de 217

Eacer clic en AEle#ir ori#en de da"os...B

Eacer clic en ANue&o ori#en de da"osB.

1*3 de 217

Seleccionar A6ase de da"osB y 8acer clic en AAcep"arB.

Seleccionar el S"rin# de cone@i)n ya definido.

1*4 de 217

Seleccionar lo indicado5

Eacer clic en finali ar.

1*9 de 217

:amos a5 !os"rar el nombre <e&ol&er el id para proceso a la base de da"os

Eacer clic en AAcep"arB

:amos a confi#urar ori#en de da"os.

1*; de 217

Eacer clic en ASi#uien"eB.

Eacer clic en ASi#uien"eB.

1*7 de 217

Eacer clic en ADenerador de consul"as...B

3ncluir la clausula 4EE0E

1*= de 217

Eacer clic en ASi#uien"eB.

Seleccionar se#Ln se indica.

1*> de 217

Eacer clic en finali ar.

Eabili"ar el AAu"oPos"6ackB

11* de 217

En la par"ida.

Al seleccionar o"ro nombre5

111 de 217

1) @b6etos
Son numerosos los ob2e"os 1ue no proporciona ASP.NET para le diseSo de formularios 4eb.

1).1.1

Kutton

Permi"e e2ecu"ar un proceso. FaspDKutton id2/Kutton1/ !e1t2/Cub0it/ @nC ic:2/Cub0itKtnXC ic:/ runat2/ser#er/4^

Te@"5 7b"iene o es"ablece el ","ulo de "e@"o 1ue se mues"ra en el con"rol 6u""on. :isible5 7b"iene o es"ablece un &alor 1ue indica si un con"rol de ser&idor se debe represen"ar como in"erfa de usuario en la p$#ina. Eei#8"5 7b"iene o es"ablece el al"o del con"rol de ser&idor web. 4id"85 7b"iene o es"ablece el anc8o del con"rol de ser&idor web. ToolTip5 7b"iene o es"ablece el "e@"o 1ue se mues"ra cuando el pun"ero del mouse se despla a sobre el con"rol de ser&idor web. 6ack/olor5 7b"iene o es"ablece el color de fondo del con"rol de ser&idor web. 6order/olor5 7b"iene o es"ablece el color de borde del con"rol 4eb. 6orderS"yle5 7b"iene o es"ablece el es"ilo del borde del con"rol de ser&idor web. 6order4id"85 7b"iene o es"ablece el anc8o del borde del con"rol de ser&idor web +ore/olor5 7b"iene o es"ablece el color de primer plano -normalmen"e el color del "e@"o. del con"rol de ser&idor web. +on"5 7b"iene las propiedades de fuen"e asociadas al con"rol de ser&idor web. Pos"6ackMrl5 7b"iene o es"ablece la direcci)n M0( de la p$#ina de des"ino del en&,o desde la p$#ina ac"ual cuando se 8ace clic en el con"rol 6u""on. Enabled5 7b"iene o es"ablece un &alor 1ue indica si el con"rol de ser&idor web es"$ 8abili"ado. 3sEnabled5 7b"iene un &alor 1ue indica si es"$ 8abili"ado el con"rol. /auses:alida"ion5 7b"iene o es"ablece un &alor 1ue indica si la &alidaci)n se reali a al 8acer clic en el con"rol 6u""on.

1).1.2

CEec:Ko1

Permi"e seleccionar una opci)n

112 de 217

1).1.3

CEec:ed.istKo1

Permi"e seleccionar m$s de una opci)n desde una lis"a usando un /8eck6o@.

1).1.8

Co0boKo1

Permi"e seleccionar una opci)n desde una lis"a desple#able.

1).1.;

Date!i0erPic:er

Permi"e seleccionar &alores de fec8as y 8oras.

1).1.=

.abe

Permi"e emi"ir una mensa2e

1).1.J
Permi"e e

.in:.abe

1).1.N

.istKo1

Permi"e seleccionar m$s de una opci)n desde una lis"a.

1).1.R

MontECa endar

Permi"e mane2ar fec8as

1).1.1)

7adioKutton

Permi"e seleccionar una opci)n de un #rupos de opciones.

1).1.11

!e1tKo1

Permi"e solici"ar informaci)n.

113 de 217

1).1.12

GroupKo1

Permi"e a#rupar elemen"os. Es el ob2e"o 1ue a#rupa los 0adio6u""on.

1).1.13

Pane

Permi"e a#rupar ob2e"os.

1).1.18

!abContro

Permi"e seleccionar di&ersas 8o2as.

114 de 217

11

Insertar datos

/rear la p$#ina in#resa.asp@. En ella crear el si#uien"e formulario.

Para incluir el ","ulo de la p$#ina5

Seleccionar APanelB. <e2ar con las medidas5 4id"85 39*p@% Eei#8"5 9**p@

119 de 217

En la propiedad ADroupin#Te@"B incluir el "e@"o A3n#reso /lien"e Nue&oB

3ncluir los ob2e"os si#uien"es5 Te@"6o@15 wid"8F229p@ Te@"6o@25 wid"8F4*p@ 0adio6u""on1% 0adio6u""on25 DroupNameFse@o Te@"6o@35 wid"85 9*p@

11; de 217

(a &isuali aci)n es5

A#re#ar la referencia AppWcode5

117 de 217

A#re#ar el <a"aSe" indicado5

Se &a a solici"ar la si#uien"e informaci)n5

11= de 217

Seleccionar5 Denerador de consul"as...

11> de 217

Seleccionar la "abla5

Seleccionar se#Ln se indica5

12* de 217

Eacer clic en ASi#uien"eB

/ambiar el nombre del mH"odo5 De"<a"a/(3ENTE

121 de 217

El resul"ado. 7bser&ar 1ue se debe #rabar para "ener los cambios accesibles a procesos.

122 de 217

:amos a a#re#ar el mH"odo al <a"aSe"1 para inser"ar da"os5

Seleccionar se#Ln lo indicado5

123 de 217

Seleccionar se#Ln lo indicado5

Es"a selecci)n permi"e in#resar da"os. 7bser&ar 1ue solici"ar$ "odos los campos de la "abla.

124 de 217

/ambiar el nombre a lo indicado.

+inali ar.

129 de 217

Para 1ue los cambios se asocien en la aplicaci)n se deben #rabar y re#enerar el si"io web.

Para el uso de los creado 8acer doble clic sobre el bo")n del formulario de in#reso5

El c)di#o se debe di&idir en "res proceso5 1. /rear un enlace al <a"aSe"1. pri#ate DataCet1!ab e<dapters.c iente!ab e<dapter Xc iente<dapter 2 nu * pub ic DataCet1!ab e<dapters.c iente!ab e<dapter C iente<dapter " $et " if(Xc iente<dapter22nu ) Xc iente<dapter 2 ne3 DataCet1!ab e<dapters.c iente!ab e<dapter()* return Xc iente<dapter* ( ( 2. 0ecuperar los da"os desde el formulario. strin$ no0bre 2 tEis.!e1tKo11.!e1t.!ri0()* int edad 2 Con#ert.!oInt32(tEis.!e1tKo12.!e1t.!ri0())* boo se1o* if (tEis.7adioKutton1.CEec:ed) se1o 2 fa se* e se
12; de 217

se1o 2 true* deci0a estatura 2 Con#ert.!oDeci0a (tEis.!e1tKo13.!e1t.!ri0())* Date!i0e fecEaIn$reso 2 tEis.Ca endar1.Ce ectedDate* boo interes1* boo interes2* boo interes3* if (tEis.CEec:Ko11.CEec:ed) interes1 2 true* e se interes1 2 fa se* if (tEis.CEec:Ko12.CEec:ed) interes2 2 true* e se interes2 2 fa se* if (tEis.CEec:Ko13.CEec:ed) interes3 2 true* e se interes3 2 fa se* 3. (lamar el mH"odo 1ue in#resa da"os. int insertados 2 C iente<dapter.InsertC iente(no0bre> edad> se1o> estatura> fecEaIn$reso> interes1> interes2> interes3)* tEis..abe 1.Wisib e2true* if (insertados 22 1) tEis..abe 1.!e1t 2 /7e$istro a 0acendo/* e se tEis..abe 1.!e1t 2 /5rror> 9@ se in$reso e re$istro/* <e es"a manera el c)di#o de la p$#ina es5 pub ic partia c ass in$resa D Cyste0.-eb.MI.Pa$e " pri#ate DataCet1!ab e<dapters.c iente!ab e<dapter Xc iente<dapter 2 nu * pub ic DataCet1!ab e<dapters.c iente!ab e<dapter C iente<dapter " $et " if(Xc iente<dapter22nu ) Xc iente<dapter 2 DataCet1!ab e<dapters.c iente!ab e<dapter()* return Xc iente<dapter* ( ( protected #oid Kutton1XC ic:(ob6ect sender> 5#ent<r$s e) " strin$ no0bre 2 tEis.!e1tKo11.!e1t.!ri0()* int edad 2 Con#ert.!oInt32(tEis.!e1tKo12.!e1t.!ri0())* boo se1o* if (tEis.7adioKutton1.CEec:ed) se1o 2 fa se* e se se1o 2 true* deci0a estatura 2 Con#ert.!oDeci0a (tEis.!e1tKo13.!e1t.!ri0())* Date!i0e fecEaIn$reso 2 tEis.Ca endar1.Ce ectedDate* boo interes1*
127 de 217

boo interes2* boo interes3* if (tEis.CEec:Ko11.CEec:ed) interes1 2 true* e se interes1 2 fa se* if (tEis.CEec:Ko12.CEec:ed) interes2 2 true* e se interes2 2 fa se* if (tEis.CEec:Ko13.CEec:ed) interes3 2 true* e se interes3 2 fa se* int insertados 2 C iente<dapter.InsertC iente(no0bre> edad> se1o> estatura> fecEaIn$reso> interes1> interes2> interes3)* ( tEis..abe 1.Wisib e2true* if (insertados 22 1) tEis..abe 1.!e1t 2 /7e$istro a 0acendo/* e se tEis..abe 1.!e1t 2 /5rror> 9@ se in$reso e re$istro/* ( <a"os5

12= de 217

12

5 i0inar datos

/rear la p$#ina elimina.asp@. En ella crear el si#uien"e formulario.

(os da"os del <rop<onw(is" son5

12> de 217

Ele#ir ANue&o ori#en de da"os...B

13* de 217

131 de 217

Se mues"ra el nombre y se de&uel&e a proceso el id del clien"e.

132 de 217

El resul"ado es5

<esde el da"aSe"1 creado an"eriormen"e a#re#ar el proceso de eliminaci)n5

133 de 217

134 de 217

0e1uiere el 3< para eliminar da"os desde la "abla clien"e.

/ambiar el nombre5

139 de 217

Drabar y Denerar el si"io web. Mn incon&enien"e con es"e proceso es 1ue cuando se elimina un re#is"ro se debe ac"uali ar la lis"a desple#able de mues"ra los nombres5

13; de 217

Para conse#uir es"o &amos a crear una &ariable de sesi)n en la par"ida de la p$#ina la cual con"rolar$ el mensa2e 1ue se emi"a en el (abel1. Paso 15 Si la &ariable de sesi)n SessionOQeliminar0e#is"roQP no e@is"e% en"onces se crea con el &alor AB. Paso 25 Si la &ariable ya es"a creada% en"onces se asi#nan los &alores a la &ariable (abel1.

Para 1ue el proceso se desarrolle despuHs de eliminar correc"amen"e un re#is"ro% se debe5 Proceso 15 Asi#nar un nue&o &alor con el mensa2e 1ue corresponda a la &ariable SessionOQeliminar0e#is"roQP Proceso 25 (lamar a la misma p$#ina usando 0esponse.0edirec"-Qelimina.asp@Q.. /onsiderar 1ue es"o 8ar$ e2ecu"ar siempre al mH"odo Pa#eW(oad-. an"erior.

El c)di#o asociado a "oda es"a p$#ina es5 44Crea e ob6eto para acceder a os 0Ttodos de DataCet pri#ate DataCet1!ab e<dapters.c iente!ab e<dapter Xc iente<dapter 2 nu * pub ic DataCet1!ab e<dapters.c iente!ab e<dapter C iente<dapter " $et " if (Xc iente<dapter 22 nu ) Xc iente<dapter 2 ne3 DataCet1!ab e<dapters.c iente!ab e<dapter()* return Xc iente<dapter* ( ( 44Cdi$o asociado a botn protected #oid Kutton1XC ic:(ob6ect sender> 5#ent<r$s e) " 447ecupera e #a or desde e for0u ario. 5n este caso e id de c iente int id 2 Con#ert.!oInt32(tEis.DropDo3n.ist1.!e1t.!ri0())* 44Werifica si se Ea ratificado e proceso if (tEis.CEec:Ko11.CEec:ed) " 445 i0ina e re$istro int e i0inados2)* e i0inados 2 C iente<dapter.De eteC iente(id)* if (e i0inados 22 1) " 44Crea e 0ensa6e y a0a a a 0is0 pU$ina Cession%/e i0inar7e$istro/& 2 /Proceso desarro ado/* 7esponse.7edirect(/e i0ina.asp1/)*
137 de 217

( e se tEis..abe 1.!e1t 2 /5rror> no se Ea desarro ado e proceso/* ( e se tEis..abe 1.!e1t 2 /Debe ratificar e proceso/* ( 44MTtodo e6ecutado cada #eI que se a0a a a pU$ina a principio o usando 447esponse.7edirect(/e i0ina.asp1/)* protected #oid Pa$eX.oad(ob6ect sender> 5#ent<r$s e) " if (Cession%/e i0inar7e$istro/& 22 nu ) Cession%/e i0inar7e$istro/& 2 //* e se " tEis..abe 1.Wisib e 2 true* tEis..abe 1.!e1t 2 Con#ert.!oCtrin$(Cession%/e i0inar7e$istro/&)* ( ( Se selecciona un nombre5

Se ra"ifica el proceso5

13= de 217

Se en&,a el mensa2e de eliminaci)n5

Si &emos la lis"a ya no es"$ el re#is"ro seleccionado para eliminaci)n.

13> de 217

13

<ctua iIar datos

/rear la p$#ina ac"uali a.asp@. En ella crear el si#uien"e formulario.

<en"ro de un Panel% con la propiedad ADroupin#Te@"B incluir el "e@"o AAc"uali ar /lien"eB y los si#uien"es ob2e"os5 <rop<onw(is"1 Te@"6o@15 wid"8F229p@ Te@"6o@25 wid"8F4*p@ 0adio6u""on1% 0adio6u""on25 DroupNameFse@o Te@"6o@35 wid"85 9*p@ /alendar1 /8eck6o@1 /8eck6o@2 /8eck6o@2 6u""on1 /8eck6o@4

14* de 217

El c)di#o asociado al <rop<onw(is"1 es ob"enido con el si#uien"e proceso5

141 de 217

Seleccionar ANue&o ori#en de da"os...B

142 de 217

143 de 217

Eacer clic en +inali ar5

Seleccionar se#Ln se indica5

144 de 217

:amos a definir el mH"odo para ac"uali ar los re#is"ros y uno para recuperar los nombres a par"ir del 0MT.

149 de 217

Para recuperar el nombre a par"ir del ru"5

14; de 217

147 de 217

Para ac"uali ar los da"os5

14= de 217

/ambiar el nombre a Mpda"e/lien"e

14> de 217

El resul"ado es le si#uien"e. 0ecordar #rabar el proceso5

19* de 217

El formulario para procesar es el si#uien"e. Para recuperar la informaci)n se debe 8acer clic en el bo")n ]

191 de 217

/)di#o asociado5 Par"e 15 <efinir ob2e"o para recuperar el mH"odo 1ue ac"uali a los da"os. pri#ate DataCet1!ab e<dapters.c iente!ab e<dapter Xc iente<dapter 2 nu * pub ic DataCet1!ab e<dapters.c iente!ab e<dapter C iente<dapter " $et " if (Xc iente<dapter 22 nu ) Xc iente<dapter 2 ne3 DataCet1!ab e<dapters.c iente!ab e<dapter()* return Xc iente<dapter* ( ( Par"e 25 El c)di#o 1ue recupera da"os% asociado el bo")n ... protected #oid Kutton2XC ic:(ob6ect sender> 5#ent<r$s e) " int id 2 Con#ert.!oInt32(tEis.DropDo3n.ist1.!e1t.!ri0())* Data!ab e ob6!ab a* ob6!ab a 2 C iente<dapter.GetDataC ienteID(id)* foreacE (Data7o3 ro3 in ob6!ab a.7o3s) " strin$ no0bre 2 ro3%1&.!oCtrin$()* strin$ edad 2 ro3%2&.!oCtrin$()* strin$ se1o 2 ro3%3&.!oCtrin$()* if (se1o.5qua s(/,a se/)) " tEis.7adioKutton1.CEec:ed 2 true* tEis.7adioKutton2.CEec:ed 2 fa se* ( e se " tEis.7adioKutton1.CEec:ed 2 fa se* tEis.7adioKutton2.CEec:ed 2 true* ( strin$ estatura 2 ro3%8&.!oCtrin$()* strin$ in$reso 2 ro3%;&.!oCtrin$()* tEis.!e1tKo18.!e1t 2 in$reso.Cubstrin$()> 2) ? /4/ ? in$reso.Cubstrin$(3> 2) ? /4/ ? in$reso.Cubstrin$(=> 8)* strin$ interes1 2 ro3%=&.!oCtrin$()* if (interes1.5qua s(/!rue/)) tEis.CEec:Ko11.CEec:ed 2 true* e se tEis.CEec:Ko11.CEec:ed 2 fa se* strin$ interes2 2 ro3%J&.!oCtrin$()* if (interes2.5qua s(/!rue/)) tEis.CEec:Ko12.CEec:ed 2 true* e se tEis.CEec:Ko12.CEec:ed 2 fa se* strin$ interes3 2 ro3%N&.!oCtrin$()* if (interes3.5qua s(/!rue/)) tEis.CEec:Ko13.CEec:ed 2 true* e se tEis.CEec:Ko13.CEec:ed 2 fa se* tEis.!e1tKo11.!e1t 2 no0bre*
192 de 217

tEis.!e1tKo12.!e1t 2 edad* tEis.!e1tKo13.!e1t 2 estatura* ( ( Par"e 35 El c)di#o 1ue almacena las modificaciones% asociado el bo")n AAc"uali arB protected #oid Kutton1XC ic:(ob6ect sender> 5#ent<r$s e) " int id 2 Con#ert.!oInt32(tEis.DropDo3n.ist1.!e1t.!ri0())* strin$ no0bre 2 tEis.!e1tKo11.!e1t.!ri0()* int edad 2 Con#ert.!oInt32(tEis.!e1tKo12.!e1t.!ri0())* boo se1o* if (tEis.7adioKutton1.CEec:ed) se1o 2 fa se* e se se1o 2 true* deci0a estatura 2 Con#ert.!oDeci0a (tEis.!e1tKo13.!e1t.!ri0())* Date!i0e fecEaIn$reso 2 tEis.Ca endar1.Ce ectedDate* boo interes1* boo interes2* boo interes3* if (tEis.CEec:Ko11.CEec:ed) interes1 2 true* e se interes1 2 fa se* if (tEis.CEec:Ko12.CEec:ed) interes2 2 true* e se interes2 2 fa se* if (tEis.CEec:Ko13.CEec:ed) interes3 2 true* e se interes3 2 fa se* int insertados 2 C iente<dapter.MpdateC iente(no0bre> edad> se1o> estatura> fecEaIn$reso> interes1> interes2> interes3>id)* tEis..abe 1.Wisib e 2 true* if (insertados 22 1) tEis..abe 1.!e1t 2 /7e$istro 0odificado/* e se tEis..abe 1.!e1t 2 /5rror> 9@ se 0odificar e re$istro/* (

193 de 217

/reaci)n de la "abla clien"e de la base de da"os Aunderoa"8B C5! <9CIX9M..C @9 G@ C5! bM@!5DXID59!I,I57 @9 G@ I, 9@! 5+IC!C (C5.5C! V ,7@M sys.ob6ects -Z575 ob6ectXid 2 @KS5C!XID(9B%dbo&.%c iente&B) <9D type in (9BMB)) K5GI9 C75<!5 !<K.5 %dbo&.%c iente&( %id& %int& ID59!I!Q(1>1) 9@! 9M..> %no0bre& %n#arcEar&(1))) 9M..> %edad& %int& 9M..> %se1o& %bit& 9M..> %estatura& %nu0eric&(1N> 2) 9M..> %in$reso& %dateti0e& 9M..> %interes1& %bit& 9M..> %interes2& %bit& 9M..> %interes3& %bit& 9M..> C@9C!7<I9! %PAXc iente& P7IM<7Q A5Q C.MC!575D ( %id& <CC )-I!Z (IG9@75XDMPXA5Q 2 @,,) @9 %P7IM<7Q& ) @9 %P7IM<7Q& 59D I9C57! I9!@ %underoatE&.%dbo&.%c iente& (%no0bre& >%edad& >%se1o& >%estatura& >%in$reso& >%interes1& >%interes2& >%interes3&) W<.M5C (Fno0bre> n#arcEar(1)))>^ >Fedad> int>^ >Fse1o> bit>^ >Festatura> nu0eric>^ >Fin$reso> dateti0e>^ >Finteres1> bit>^ >Finteres2> bit>^ >Finteres3> bit>^)

194 de 217

18
/rear un nue&o proyec"o web

Wa idaciones

/ambiar el ","ulo a A&alidacionesB.

199 de 217

Tipos de &alidaciones esperadas5 /ampos obli#a"orios5 Mser% ambas password% mail. Password5 <ebe &alidar 1ue los campos in#resados en ambas ca2as de "e@"os sean i#uales. Adem$s% debe con"ener al menos = carac"eres. Nombre5 /ompues"o s)lo de le"ras Edad5 en"re 1= y 3* aSos Es"a"ura5 en"re 1.9* y 1.>9 +ec8a de in#reso5 ddJmmJaaaa !ail5 &$lido /omen"arios5 A lo m$s 1** carac"eres. Propiedades asociada a "odos los ob2e"os de &alidaci)n5 6ack/olor5 /olor del fondo del mensa2e de error 6order/olor5 /olor del borde del mensa2e de error /on"rolTo:alida"e5 Nombre del con"rol 1ue se &a a &alidar Te@"% Error!essa#e5 !ensa2e de error. (as propiedades de &alidaci)n en la &ersi)n 2**= del :isual S"udio son5

18.1 7equired,ie dWa idator


M"ilice el con"rol 0e1uired+ield:alida"or para &alidar 1ue el usuario 8a escri"o un &alor de da"os en un con"rol Selec"ion(is" o Te@"6o@. Si se "ra"a de un con"rol Selec"ion(is"% el usuario debe seleccionar un elemen"o de la lis"a. Si se "ra"a de un con"rol Te@"6o@% el usuario debe especificar un &alor. Se usa por lo #eneral para obli#ar a in#resar "e@"o y selecionar un &alor

19; de 217

/onsiderar el si#uein"e formulario y obli#ar a in#resar "e@"o.

Seleccionar5

Tenemos5

Seleccionar el Te@"6o@1 para el desarrollo de la &alidaci)n5

197 de 217

3n#resar un mensa2e de error5

Al e2ecu"ar se "iene5

18.2 7an$eWa idator


M"ilice el con"rol 0an#e:alida"or para comprobar 1ue el &alor de o"ro con"rol es"$ comprendido en un in"er&alo especificado. Se usa ",picamen"e para obli#ar a in#resar &alores den"ro de un ran#o Type5 Tipos de da"os para la comparaci)n5

19= de 217

!inimum:alue5 7b"iene o es"ablece el &alor del con"rol 1ue se es"$ &alidando% 1ue debe ser mayor o i#ual 1ue el &alor de es"a propiedad. El &alor prede"erminado es una cadena &ac,a -QQ.. !a@imum:alue5 7b"iene o es"ablece el &alor del con"rol 1ue se es"$ &alidando% 1ue debe ser menor o i#ual 1ue el &alor de es"a propiedad. El &alor prede"erminado es una cadena &ac,a -QQ.. Si escribe "e@"o en la propiedad Te@"% el con"rol 0an#e:alida"or mos"rar$ ese "e@"o cuando se produ ca un error. Si la propiedad Te@" se de2a &ac,a% el con"rol 0an#e:alida"or mos"rar$ la cadena en la propiedad Error!essa#e. Si el usuario de2a en blanco el con"rol de des"ino% el con"rol pasar$ la &alidaci)n de in"er&alo. Para 8acer 1ue el usuario escriba un &alor% a#re#ue "ambiHn un con"rol 0e1uired+ield:alida"or.

/onsiderar el si#uien"e formulario en donde las edades deben ser nLmero en"eros en"re 1= y 3* aSos.

Seleccionar

Tenemos5

19> de 217

Seleccionar el Te@"6o@2 para el desarrollo de la &alidaci)n5

3n#resar un mensa2e de error5

3ndicar el &alor m,nimo% el m$@imo y el Type 3n"e#er5

1;* de 217

Al e2ecu"ar se "iene5

7bser&ar 1ue permi"e &alores de edades F AB. Para e&i"ar es"o se debe a#re#ar un &alidador 0e1uired+ield:alida"or y asociarlo al Te@"6o@2.

1;1 de 217

Seleccionar el Te@"6o@2 para el desarrollo de la &alidaci)n5

3n#resar un mensa2e de error5

Al e2ecu"ar se "iene5

1;2 de 217

7bser&ar 1ue los mensa2es de los dos ob2e"os de &alidaci)n asociado al Te@"6o@2 deben ser forma"eados adecuadamen"e.

18.3 7e$u ar51pressionWa idator


M"ilice el con"rol 0e#ularE@pression:alida"or para comparar el &alor de o"ro con"rol con un modelo predefinido. (a lis"a de &alidaciones predefinidas para :alida"ionE@pression es5

Si el usuario de2a en blanco el con"rol de des"ino% en"onces el con"rol superar$ la &alidaci)n. Para obli#ar al usuario a escribir un &alor% a#re#ue "ambiHn un con"rol 0e1uired+ield:alida"or. Si escribe una cadena en la propiedad Te@"% el con"rol 0e#ularE@pression:alida"or mos"rar$ ese "e@"o cuando se produ ca un error. Si la propiedad Te@" se de2a &ac,a% el con"rol 0e#ularE@pression:alida"or mos"rar$ la cadena definida en la propiedad Error!essa#e.

1;3 de 217

/onsiderar el si#uien"e formulario en donde se debe &alidar el mail.

Seleccionar5

Tenemos5

1;4 de 217

Seleccionar el Te@"6o@3 para el desarrollo de la &alidaci)n5

3n#resar un mensa2e de error5

Seleccionar la propiedad :alida"edE@pression

1;9 de 217

Seleccionar lo indicado5

Al e2ecu"ar se "iene5

18.8 Co0pareWa idator


M"ilice el con"rol /ompare:alida"or para &alidar los da"os de en"rada de los con"roles Te@"6o@ y Selec"ion(is". El con"rol /ompare:alida"or compara los da"os proporcionados por el usuario con los da"os de o"ro con"rol. TambiHn puede comparar los da"os de en"rada con un &alor li"eral 1ue especifi1ue. 7perador5 Tipo de comparaci)n de los &alores

:alueTo/ompara"e5 El &alor con el 1ue comparar$ /on"rolTo/ompara"e5 3den"ificador del con"rol con"ra el 1ue se 8ar$ la comparaci)n Si el usuario de2a en blanco el con"rol de des"ino% el con"rol pasar$ la &alidaci)n de comparaci)n. Para 8acer 1ue el usuario escriba un &alor% a#re#ue "ambiHn un con"rol 0e1uired+ield:alida"or.

1;; de 217

/onsiderar el si#uien"e formulario en donde se debe &alidar la fec8a.

Seleccionar5

1;7 de 217

Tenemos5

Seleccionar el Te@"6o@4 para el desarrollo de la &alidaci)n5

3n#resar un mensa2e de error5

1;= de 217

Seleccionar la propiedad 7pera"or5

Selecccionar la propiedad Type5

Al e2ecu"ar se "iene5

1;> de 217

/onsiderar a8ora el ",pico caso de ra"ificaci)n del in#reso de un mail.

Seleccionar5

17* de 217

Tenemos5

Seleccionar el Te@"6o@9 para el desarrollo de la &alidaci)n5

171 de 217

Seleccionar el Te@"6o@; para comparar su &alor con el Te@"6o@95

3n#resar un mensa2e de error5

172 de 217

Al e2ecu"ar se "iene5

18.; Custo0Wa idator


M"ilice el con"rol /us"om:alida"or para reali ar una &alidaci)n personali ada de los da"os proporcionados por el usuario de los con"roles Te@"6o@ y Selec"ion(is". Por e2emplo% 1ue una ca2a de "e@"o es"H compues"a s)lo de = carac"eres5 protected #oid Custo0Wa idator1XCer#erWa idate(ob6ect source> Cer#erWa idate5#ent<r$s ar$s) " if (ar$s.Wa ue..en$tE 22 N) ar$s.IsWa id 2 true* e se ar$s.IsWa id 2 fa se* (

Para in#resar el c)di#o an"eriro se debe 8acer doble clic sobre el con"rol de &alidaci)n.
Si el usuario de2a en blanco el con"rol de des"ino% en"onces Hs"e pasar$ la prueba de &alidaci)n personali ada. Para 8acer 1ue el usuario escriba un &alor% cambiar la porpiedad :alida"eEmp"yTe@" a True. (os con"roles para &alidaci)n 1ue incluye .Ne" normalmen"e cubren la mayor par"e de las necesidades comunes de &alidaci)n% sin embar#o en ocasiones necesi"amos reali ar al#una &alidaci)n personali ada con lo cual los con"roles e@is"en"es -0e1uired+ield:alida"or% /ompare:alida"or% 0an#e:alida"or% 0e#ularE@presion:alida"or. no podr,amos lo#rar.

173 de 217

/onsiderar 1ue el user debe "ener al menos = carac"eres.

Se "iene5

174 de 217

<oble clic sobre el ob2e"o /us"om:alida"or1 y a#re#ar el si#uien"e c)di#o5 protected #oid Custo0Wa idator1XCer#erWa idate1(ob6ect source> Cer#erWa idate5#ent<r$s ar$s) " if (ar$s.Wa ue..en$tE ^2 N) ar$s.IsWa id 2 true* e se ar$s.IsWa id 2 fa se* ( 3n#resar un mensa2e de error5

Al e2ecu"ar se "iene5

179 de 217

1;
/rear un nue&o proyec"o web

Master Pa$e L Men]s

17; de 217

Eliminar la p$#ina <efaul".asp@

A#re#ar un nue&o elemen"o5

177 de 217

A#re#ar un !as"er Pa#e.

17= de 217

Se "iene5

Eliminar se#Ln se indica5

17> de 217

A#re#ar una "abla de 2 columnas y 3 filas.

/ombinar las celdas indicadas.

1=* de 217

/ombinar las celdas indicadas.

!arcar la "abla.

1=1 de 217

<ar los si#uien"es es"ilos5

!arcar la primera fila y dar los si#uien"es es"ilos5

1=2 de 217

<ar los si#uien"es es"ilos5

!arcar la Ll"ima fila5

1=3 de 217

<ar los si#uien"es es"ilos5

!arcar la celda i 1uierda de la fila cen"ral5

1=4 de 217

<ar los si#uien"es es"ilos5

!arcar la celda derec8a de la fila cen"ral5

1=9 de 217

<ar los si#uien"es es"ilos5

1=; de 217

Se "iene5

1=7 de 217

En la fila cen"ral celda derec8a a#re#ar un /on"en"PlaceEolder

/rear 3 p$#inas% con la opci)n seleccionada ASeleccionar la p$#ina prinicpalB.

1== de 217

Seleccionar se#Ln lo indicado5

El mismo proceso para las o"ras dos p$#inas. Se "iene5

1=> de 217

En cada una de las 3 p$#inas poner un mensa2e 1ue las iden"ifi1ue5

Defau#t1.asp/ Defau#t2.asp/ Defau#t3asp/

P6+ina de inicio P6+ina de in+reso de c#ientes P6+ina de e#i%inacin de c#ientes

/rear un Si"e!ap5

Asociar el si#uien"e c)di#o

1>* de 217

(an ar un Tree:iew en la celda seleccionada.

Seleccionar forma"o au"om$"ico5

1>1 de 217

Seleccionar5

Seleccionar AEle#ir ori#en de da"osB

Seleccionar5

1>2 de 217

6a2ar una ima#en del #oo#le de >**@9* y copiarla en la carpe"a Aim#B 1ue se debe crear.

(an ar la ima#en en el encabe ado de la p$#ina. (ue#o para cada una de las celdas de la fila cen"ral poner la propiedad &alin#FB"opB. !arcar la p$#ina <efaul"1.asp@ y de2arla como inicio.

1>3 de 217

Al e2ecu"ar se "iene5

1>4 de 217

Al 8acer clic en la opci)n A/lien"e Nue&oB

1>9 de 217

1=

<utentificacin

(a au"en"ificaci)n de formularios es una opci)n a"rac"i&a para los desarrolladores de una serie de ra ones5 Ms"ed "iene el con"rol "o"al sobre el c)di#o de au"en"icaci)n. Ms"ed "iene el con"rol "o"al sobre la apariencia de la forma de inicio de sesi)n. +unciona con cual1uier na&e#ador. Se le permi"e decidir la forma de almacenar la informaci)n del usuario.

1=.1 .as c ases de for0as de autenticacin


(a par"e m$s impor"an"e del marco de la au"en"icaci)n de formularios es el +ormsAu"8en"ica"ion!odule% 1ue es una clase E""p!odule 1ue de"ec"a "icke" ac"uales de au"en"icaci)n de formularios de la solici"ud. si el "icke" no es"$ disponible y el usuario solici"a un recurso pro"e#ido% se rediri#e au"om$"icamen"e la solici"ud a la p$#ina de inicio de sesi)n confi#urada en el arc8i&o web.confi# an"es de 1ue es"e recurso pro"e#ido es aLn "ocado por el "iempo de e2ecuci)n. Si el "icke" es"$ presen"e% el m)dulo au"om$"icamen"e crea el con"e@"o de se#uridad de la iniciali aci)n del E""p/on"e@"./urren".Mser propiedad con una ins"ancia prede"erminada de DenericPrincipal% 1ue con"iene una +orms3den"i"y ins"ancia con el nombre del usuario ac"ualmen"e conec"ado. 6$sicamen"e% us"ed no "raba2a con el m)dulo direc"amen"e. Su in"erfa con el m)dulo se compone de las clases en la "abla 2*I1% 1ue forman par"e del espacio de nombres Sys"em.4eb.Securi"y.

1=.2 ,or0s<utEentication
Es"a es la clase principal para in"erac"uar con la au"en"icaci)n de formularios infraes"ruc"ura. Se proporciona informaci)n b$sica sobre la confi#uraci)n y le permi"e crear el "icke"% es"ablecer el cookie% y cambiarlo desde la p$#ina de acceso a la ori#inalmen"e solici"ado si la p$#ina de &alidaci)n de las credenciales se 8a reali ado correc"amen"e. /rear un si"io web

1>; de 217

Se deben "ener las si#uien"es p$#inas5 <efaul".aspc5 3n#reso correc"o (o#in.asp@5 Solici"a credenciales al usuario

En el formulario (o#in.asp@ crear la si#uien"e es"ruc"ura% con el nombre por defec"o de las ca2as de "e@"o y bo")n. (a se#unda ca2a de "ec"o "iene la propiedad5

3nicialmen"e se "iene5

(a p$#ina (o#in.asp@ debe poner como de par"ida 8aciendo clic con el bo")n derec8o sobre el nombre de es"a y ac"i&ando la propiedad5

1>7 de 217

<efaul".asp@ "iene el si#uien"e "e@"o5

:amos a edi"ar el c)di#o del web.confi#5

Por defec"o se "iene el "ipo de au"en"ificaci)n A4indowsB5

Mno de los defec"o 1ue "iene es"a confi#uraci)n es 1ue se puede llamar a la p$#ina <efaul".asp@ con su direccion y nombre5

1>= de 217

El ob2e"i&o es obli#ar a in#resar siempre desde la p$#ina (o#in.asp@. Para es"o se debe definir a es"a como la p$#ina desde la cual se deben pro&ocar "odos los redireccionamien"os por error al in#reso5

(ue#o se debe ne#ar el acceso a "odo usuario no au"ori ado5

Probaremos a8ora el in#reso por M0( al formualrio defaul".asp@.

Eemos sido redireccionados5

1>> de 217

(a pro#ramaci)n se diri#ue a8ora 8acia el bo")n del formulario (o#in.asp@. :amos a desarrollar es"e proceso en AduroB% para lue#o con"rolarlo desde una base de da"os. El mH"odo si#uien"e no redireciona a la p$#ina <efaul".asp@ cuando las credenciales son correc"as. En caso con"rario se 1ueda en la p$#ina indicada en la propiedad lo#inMrl 1ue para nues"ro caso es (o#in.asp@.

S"rin#5 Nombre del usuario au"en"icado. 6oolean5 "rue para crear una cookie duradera -a1uella 1ue se #uarda en cada sesi)n del e@plorador.? en caso con"rario% false.

@bser#acionesD 1. /onsiderar 1ue una &arian"e es cuando ll mH"odo 0edirec"+rom(o#inPa#e rediri#e a la direcci)n M0( 1ue se 8aya especificado en la cadena de consul"a u"ili ando el nombre de la &ariable 0e"urnM0(. Por e2emplo% en la M0( 8""p5JJwww.con"oso.comJlo#in.asp@^0e"urnMrlFcaller.asp@% el mH"odo 0edirec"+rom(o#inPa#e rediri#e a la direcci)n M0( de&uel"a caller.asp@. 2. Si re1uiere una direcci)n de redireccionamien"o dis"in"a a <efaul".asp@ pero definida en el web.confi# y no en la M0( como se mues"ra en el pun"o an"erior% se peude confi#urar en la propiedad <efaul".M0(. En el e2emplo la p$#ina a Sa cual se redirecionar$n las credenciales erroneas es inde@.asp@.

3. :ste e=e%p#o contiene un cuadro de te/to que acepta datos de# usuario* #o que puede suponer una a%ena-a para #a se+uridad. De for%a predeter%inada* #as p6+inas Deb )4P.2:' (a#idan que #os datos proporcionados por e# usuario no inc#uyen e#e%entos <' A ni de secuencia de co%andos.
protected #oid Kutton1XC ic:(ob6ect sender> 5#ent<r$s e) " boo @A 2 fa se* strin$ credencia 1 2 //* strin$ credencia 2 2 //* credencia 1 2 tEis.!e1tKo11.!e1t.!o.o3er().!ri0()* credencia 2 2 tEis.!e1tKo12.!e1t.!ri0()* if (credencia 1.5qua s(/r$arces/) __ credencia 2.5qua s(/1238/)) @A 2 true* if (@A) ,or0s<utEentication.7edirect,ro0.o$inPa$e(credencia 1> fa se)* e se tEis..abe 1.Wisib e 2 true* (

2** de 217

/aso de in#reso incorrec"o5

/aso de in#reso correc"o5

2*1 de 217

1=.3 ZasEPass3ord,orCtorin$InConfi$,i e
El mH"odo Eas8Password+orS"orin#3n/onfi#+ile #enera una con"raseSa con al#ori"mo 8as8 apropiada para almacenar en un arc8i&o de confi#uraci)n bas$ndose en la con"raseSa y el al#ori"mo 8as8 especificados

Por e2emplo5 +ormsAu"8en"ica"ion.Eas8Password+orS"orin#3n/onfi#+ile-"@"/la&e.Te@"% QSEA1Q.? /onsideremos la base de da"os d#ac y la "abla Msuario con los si#uien"es campos5

:amos a modificar el formulario an"erior a#re#ando el bo")n necesario para desarrollar el proceso.

2*2 de 217

A#re#ar un <a"ase" para el mane2o de da"os5

2*3 de 217

El c)di#o de comunicaci)n con el <a"aSe"5 pri#ate DataCet1!ab e<dapters.Msuario!ab e<dapter Xusuario<dapter 2 nu * pub ic DataCet1!ab e<dapters.Msuario!ab e<dapter Msuario<dapter " $et " if (Xusuario<dapter 22 nu ) Xusuario<dapter 2 ne3 DataCet1!ab e<dapters.Msuario!ab e<dapter()* return Xusuario<dapter* ( ( El c)di#o asociado al bo")n de in#reso5 protected #oid Kutton2XC ic:(ob6ect sender> 5#ent<r$s e) " strin$ credencia 1 2 //* strin$ credencia 2 2 //* credencia 1 2 tEis.!e1tKo11.!e1t.!o.o3er().!ri0()* credencia 2 2 tEis.!e1tKo12.!e1t.!ri0()* int insertados 2 )* credencia 2 2 ,or0s<utEentication.ZasEPass3ord,orCtorin$InConfi$,i e(credencia 2> /CZ<1/)* insertados 2 Msuario<dapter.Insert(credencia 1> credencia 2)* tEis..abe 1.Wisib e 2 true* if (insertados 22 1) tEis..abe 1.!e1t 2 /In$reso @A/* e se tEis..abe 1.!e1t 2 /5rror en in$reso/* ( Es"amos in#resado (o#in5 2pere y Password5 12345

0esul"ado5

2*4 de 217

En la "abla Msuario de la base de da"os "enemos almacenado5

Para 1ue la &alidaci)n del in#reso del usuario se desarrolle sobre la "abla Msuario de la base de da"os &amos a modificar el c)di#o del bo")n 3n#resar. En el <a"aSe" &amos a a#re#ar una consul"a para buscar el user y pass en la "abla5

2*9 de 217

2*; de 217

protected #oid Kutton1XC ic:(ob6ect sender> 5#ent<r$s e) " boo @A 2 fa se* strin$ credencia 1 2 //* strin$ credencia 2 2 //* credencia 1 2 tEis.!e1tKo11.!e1t.!o.o3er().!ri0()* credencia 2 2 tEis.!e1tKo12.!e1t.!ri0()* credencia 2 2 ,or0s<utEentication.ZasEPass3ord,orCtorin$InConfi$,i e(credencia 2> /CZ<1/)* if (Msuario<dapter.Cca arbuery1(credencia 1>credencia 2)221) @A 2 true* if (@A) ,or0s<utEentication.7edirect,ro0.o$inPa$e(credencia 1> fa se)* e se " tEis..abe 1.Wisib e 2 true* tEis..abe 1.!e1t 2 /5rror en credencia es/* ( (

2*7 de 217

:amos a probar con los par$me"ros correc"os5

2*= de 217

1J

Mane6o de Cession

1J.1 Infor0acin $enera acerca de estado de sesin


El es"ado de sesi)n de ASP.NET permi"e almacenar y recuperar los &alores de un usuario cuando el usuario e@plora diferen"es p$#inas ASP.NET 1ue conforman una aplicaci)n 4eb. /onsiderar 1ue ETTP es un pro"ocolo sin es"ado% lo 1ue si#nifica 1ue el ser&idor 4eb "ra"a cada solici"ud ETTP de una p$#ina como una solici"ud independien"e? el ser&idor no re"iene informaci)n al#una sobre los &alores de las &ariables 1ue se u"ili an duran"e las solici"udes an"eriores. El es"ado de sesi)n de ASP.NET iden"ifica las solici"udes recibidas desde el mismo e@plorador duran"e un per,odo limi"ado de "iempo como una sesi)n y proporciona la capacidad de conser&ar los &alores de las &ariables duran"e la duraci)n de esa sesi)n. El es"ado de sesi)n de ASP.NET se 8abili"a de forma prede"erminada en "odas las aplicaciones ASP.NET.

1J.2 Wariab es de sesin


(as &ariables de sesi)n se almacenan en la clase SessionS"a"e3"em/ollec"ion 1ue es"$ disponible a "ra&Hs de la propiedad Sys"em.4eb.E""p/on"e@".Session. (a colecci)n de las &ariables de sesi)n es"$ indi ada por el nombre de la &ariable o por un ,ndice de en"eros. (as &ariables de sesi)n se crean sencillamen"e es"ableciendo referencias a la &ariable de sesi)n por el nombre. No necesi"a declarar una &ariable de sesi)n ni a#re#arla e@pl,ci"amen"e a la colecci)n. En el e2emplo de c)di#o si#uien"e se crean &ariables de sesi)n para el nombre y el apellido de un usuario y se es"ablecen en &alores recuperados de los con"roles Te@"6o@.

<e forma prede"erminada% las &ariables de sesi)n pueden ser cual1uier "ipo .NET &$lido. Por e2emplo% en el e2emplo de c)di#o si#uien"e se almacena una clase Array(is" de &alores en una &ariable de sesi)n denominada QS"ockPicksQ.

1J.3 Identificadores de sesin


(as sesiones se iden"ifican median"e un iden"ificador de sesi)n e@clusi&o 1ue se puede leer u"ili ando la propiedad CessionID. /uando el es"ado de sesi)n se 8abili"a en una aplicaci)n ASP.NET% cada solici"ud de una p$#ina de la aplicaci)n se e@amina en busca de un &alor Session3< en&iado desde el e@plorador. Si no se proporciona nin#Ln &alor Session3<% ASP.NET inicia una nue&a sesi)n y el &alor Session3< de esa sesi)n se en&,a al e@plorador con la respues"a. Mna sesi)n se considera ac"i&a siempre 1ue las solici"udes con"inLen lle&$ndose a cabo con el mismo &alor Session3<. Si el "iempo en"re las solici"udes de una de"erminada sesi)n e@cede el &alor de "iempo de espera especificado en minu"os% la sesi)n se considera caducada. Si se reali an solici"udes con un &alor Session3< caducado% se inicia una nue&a sesi)n.

2*> de 217

56e0p o Solic"ar las credenciales a un usuario y cuando es"as sean correc"as mos"rar el nombre del usuario en "odas las p$#inas del sis"ema. :amos a crear 2 p$#inas adiconales5 <efaul"1.asp@ y <efaul"2.asp@.

3r a la p$#ina <efaul".asp@ y a#re#ar un nue&o di&. Eacer lo mismo para el res"o de las p$#inas <efaul"1.asp@ y <efaul"2.asp@.

<en"ro del di& a#re#ar un (abel y a2us"arlo a la derec8a.

En <efaul".asp@ a#ra#ar un Eyper(ink 1ue nos lle&e a <efaul"1.asp@. 7bser&ar la propiedad "e@" y Na&i#a"eMrl

21* de 217

<esarrollar el mismo proceso para <efaul"1.asp@ 1ue debe diri#uirse a <efaul"2.asp@. As, "enemos5 <efalu".asp@

<en"ro del mH"odo Pa#eW(oad-.% 1ue es el primero 1ue se e2ecu"a al in#resar a la p$#ina% implemen"ar lo si#uien"e5 protected #oid Pa$eX.oad(ob6ect sender> 5#ent<r$s e) " Cession%/MsuarioIn$reso/&2ZttpConte1t.Current.Mser.Identity.9a0e* tEis..abe 1.!e1t 2 Con#ert.!oCtrin$(Cession%/MsuarioIn$reso/&)* ( <efaul"1.asp@

protected #oid Pa$eX.oad(ob6ect sender> 5#ent<r$s e) " tEis..abe 1.!e1t 2 Con#ert.!oCtrin$(Cession%/MsuarioIn$reso/&)* ( <efaul"2.asp@

protected #oid Pa$eX.oad(ob6ect sender> 5#ent<r$s e) " tEis..abe 1.!e1t 2 Con#ert.!oCtrin$(Cession%/MsuarioIn$reso/&)* ( (a e2ecuci)n es5

211 de 217

212 de 217

1N
1N.1 ,i eMp oad

Mso de fotos

7bser&aci)n5 :$lido para la &ersi)n .NET +ramework 3.9

(a clase +ileMpload mues"ra un con"rol de cuadro de "e@"o y un bo")n de bLs1ueda 1ue permi"en a los usuarios seleccionar un arc8i&o en el clien"e y car#arlo en el ser&idor web.

El usuario especifica el arc8i&o 1ue desea car#ar escribiendo su ru"a de acceso comple"a en el e1uipo local -por e2emplo% /5_!isArc8i&os_Arc8i&oPrueba."@". en el cuadro de "e@"o del con"rol. TambiHn puede seleccionar el arc8i&o 8aciendo clic en el bo")n E@aminar y busc$ndolo despuHs en el cuadro de di$lo#o Ele#ir arc8i&o.

1N.2 Ca#e<s
Duarda el con"enido de un arc8i&o car#ado en una ru"a de acceso especificada en el ser&idor web.

Para almacenar el arc8i&o en una carpe"a se debe "ener pri&ile#ios de escri"ura sobre la carpe"a.

213 de 217

1N.3 Zas,i e
(a propiedad Eas+ile ob"iene un &alor -"rue o false. 1ue indica si el con"rol +ileMpload con"iene un arc8i&o para car#ar. M"ilice es"a propiedad para comprobar si e@is"e un arc8i&o 1ue se puede car#ar an"es de reali ar operaciones en el arc8i&o. Por e2emplo% an"es de llamar al mH"odo Sa&eAs para #uardar el arc8i&o en el disco% u"ilice la propiedad Eas+ile para comprobar si el arc8i&o e@is"e. Si la propiedad Eas+ile de&uel&e "rue% llame al mH"odo Sa&eAs. Si de&uel&e false% mues"ra un mensa2e al usuario 1ue indica 1ue el con"rol no con"iene un arc8i&o. if (,i eMp oad1.Zas,i e) 44 . a0ar a 0Ttodo que trata e arcEi#o. Ca#e,i e(,i eMp oad1.Posted,i e)* e se 44 9otificar a usuario que no se podrU tratar e arcEi#o. Mp oadCtatus.abe .!e1t 2 /5rror/*

1N.8 ZttpPosted,i e
(a clase E""p+ile/ollec"ion proporciona acceso a "odos los arc8i&os car#ados desde un clien"e como colecci)n de arc8i&os. (a clase E""pPos"ed+ile proporciona propiedades y mH"odos para ob"ener informaci)n sobre un arc8i&o indi&idual% y para leer y #uardar el arc8i&o. Puede especificar el "amaSo m$@imo permi"ido para la solici"ud "eniendo acceso a la propiedad !a@0e1ues"(en#"8 o es"ableciendo el a"ribu"o ma@0e1ues"(en#"8 del elemen"o 8""p0un"ime del 4eb.confi#. El &alor prede"erminado es 4 !6. /on el a"ribu"o ma@0e1ues"(en#"8 en el elemen"o loca"ion del arc8i&o 4eb.confi#% es"a en C6 o sea con >*!6% en es"e e2emplo >3***C6. Fconfi$uration^ F ocation patE2/Mp oadPa$e.asp1/^ FEttp7unti0e 0a17equest.en$tE2/R3)))/4^ F4 ocation^ F4confi$uration^ (a can"idad de da"os 1ue se almacenan en el bLfer en la memoria del ser&idor para una solici"ud% incluidas las car#as de arc8i&os% se puede especificar "eniendo acceso a la propiedad 0e1ues"(en#"8<iskT8res8old o es"ableciendo el a"ribu"o re1ues"(en#"8<iskT8res8old del elemen"o 8""p0un"ime den"ro del arc8i&o 4eb.confi#. FEttp7unti0e use,u ybua ified7edirectMr 2/true/ 0a17equest.en$tE2/N1R2/ request.en$tEDis:!EresEo d2/N1R2/ 4^ (os recursos del ser&idor asi#nados para almacenar en el bLfer el arc8i&o car#ado se des"ruir$n cuando finalice la solici"ud. Para #uardar una copia duradera del arc8i&o% u"ilice el mH"odo Sa&eAs.

1N.; Posted,i e
(a propiedad Pos"ed+ile ob"iene el ob2e"o E""pPos"ed+ile subyacen"e para un arc8i&o 1ue se car#a median"e el con"rol +ileMpload. M"ilice es"a propiedad para ob"ener acceso a o"ras propiedades del arc8i&o car#ado. Puede u"ili ar la propiedad /on"en"(en#"8 para ob"ener la lon#i"ud del arc8i&o. Puede u"ili ar la propiedad /on"en"Type para ob"ener el "ipo de con"enido !3!E del arc8i&o. 7"ros.

1N.= < 0acenar arcEi#o en una carpeta


El arc8i&o ser$ almacenado en una carpe"a. Para es"o se debe cambiar el nombre del arc8i&o y asociar la e@"ensi)n ori#inal% pues el arc8i&o pos"eriormen"e se debe recuperar. (a direcci)n en donde es"$ almacenado el arc8i&o debe almacenarse en un campo de la base de da"os. Se debe &erificar 1ue la carpe"a selecciona "en#a pri&ile#ios para almacenar arc8i&os.

214 de 217

219 de 217

1R
1R.1 Ettp7unti0e

3eb.confi$

7bser&aci)n5 :$lido para la &ersi)n .NET +ramework 3.9

Es"ablece los &alores de confi#uraci)n ETTP de ASP.NET en "iempo de e2ecuci)n 1ue de"erminan c)mo se procesa una solici"ud de una aplicaci)n ASP.NET. `8""p0un"ime e@ecu"ionTimeou" F QnumberQ ma@0e1ues"(en#"8 F QnumberQ re1ues"(en#"8<iskT8res8old F QnumberQ min+reeT8reads F QnumberQ app0e1ues"Rueue(imi" F QnumberQ enableCernel7u"pu"/ac8e F QOTruea+alsePQ apar"men"T8readin# F QOTruea+alsePQ re1uire0oo"edSa&eAsPa"8 F QOTruea+alsePQ enable F QOTruea+alsePQ s8u"downTimeou" F QnumberQ delayNo"ifica"ionTimeou" F QnumberQ enableEeader/8eckin# F QOTruea+alsePQ Jb A"ribu"o apar"men"T8readin# <escripci)n Eabili"a los subprocesos de apar"amen"o para la compa"ibilidad con ASP cl$sica. Es"e a"ribu"o es nue&o en la &ersi)n 2.* de .NET +ramework. El &alor prede"erminado es +alse. Especifica el nLmero m$@imo de solici"udes 1ue ASP.NET coloca en la cola de la aplicaci)n. /uando no 8ay suficien"es subprocesos libres para procesar las solici"udes% Hs"as se de2an en una cola. (as solici"udes en"ran"es se rec8a ar$n con el mensa2e de error Q9*3 I Ser&er Too 6usyQ -ser&idor ocupado. cuando la cola supere el l,mi"e especificado en es"e a"ribu"o. El &alor prede"erminado es 9***. En las &ersiones 1.* y 1.1 de .NET +ramework% el &alor prede"erminado es 1**. Especifica el "iempo de espera en se#undos para re"rasar las no"ificaciones. Es"e a"ribu"o es nue&o en la &ersi)n 2.* de .NET +ramework. El &alor prede"erminado es 9 se#undos. Especifica si el dominio de aplicaci)n -App<omain. es"$ 8abili"ado para acep"ar las solici"udes en"ran"es en el nodo ac"ual y en los nodos secundarios. Si su &alor es +alse% la aplicaci)n es"$ desac"i&ada. El &alor prede"erminado es True. Especifica si ASP.NET debe comprobar si el encabe ado de la solici"ud sufre posibles a"a1ues de inyecci)n. Si se de"ec"a un a"a1ue% ASP.NET responde con un error. Es"e a"ribu"o es nue&o en .NET +ramework 2.*. El &alor prede"erminado es True. Especifica si es"$ 8abili"ado el almacenamien"o en la cac8H de resul"ados. Es"e a"ribu"o es rele&an"e s)lo si es"$ ins"alado !icrosof" 3n"erne" 3nforma"ion Ser&ices -33S. ;.* o pos"erior. El &alor prede"erminado es True. Especifica% en se#undos% el "iempo m$@imo duran"e el cual una solici"ud puede e2ecu"arse an"es de 1ue ASP.NET la cierre au"om$"icamen"e. Es"e "iempo de espera s)lo se aplica si el a"ribu"o de depuraci)n del elemen"o compila"ion "iene el &alor +alse. Si el a"ribu"o debu# es True% para ayudar a e&i"ar 1ue se cierre la aplicaci)n mien"ras reali a la depuraci)n% no
21; de 217

app0e1ues"Rueue(imi"

delayNo"ifica"ionTimeou"

enable

enableEeader/8eckin#

enableCernel7u"pu"/ac8e

e@ecu"ionTimeou"

es"able ca es"e "iempo de espera en un &alor al"o. El &alor prede"erminado es 11* se#undos. ma@0e1ues"(en#"8 Especifica% en C6% el l,mi"e del umbral del almacenamien"o en bLfer de las secuencias de en"rada. Es"e l,mi"e puede usarse para los a"a1ues de dene#aci)n de ser&icio 1ue se producen% por e2emplo% cuando los usuarios en&,an arc8i&os de #ran "amaSo al ser&idor. El &alor prede"erminado es 4*>; C6. Si se supera el umbral% se produce una e@cepci)n /onfi#ura"ionErrorsE@cep"ion. Especifica el nLmero m,nimo de subprocesos libres para permi"ir la e2ecuci)n de nue&as solici"udes. ASP.NET man"iene libre el nLmero especificado de subprocesos para a"ender las solici"udes 1ue re1uieran subprocesos adicionales para comple"ar su procesamien"o. El &alor prede"erminado es =.

min+reeT8reads

re1ues"(en#"8<iskT8res8old Especifica% en kiloby"es% el l,mi"e del umbral del almacenamien"o en bLfer de las secuencias de en"rada. Es"e &alor no debe superar el &alor del a"ribu"o ma@0e1ues"(en#"8. Es"e a"ribu"o es nue&o en .NET +ramework 2.*. El &alor prede"erminado es =* C6. -Mn buffer de da"os es una ubicaci)n de la memoria en un <isco o en un ins"rumen"o di#i"al reser&ada para el almacenamien"o "emporal de informaci)n di#i"al% mien"ras 1ue es"$ esperando ser procesada. re1uire0oo"edSa&eAsPa"8 Especifica si el par$me"ro filename de un mH"odo Sa&eAs debe ser una ru"a de acceso absolu"a. El proceso de ASP.NET debe "ener permiso para crear arc8i&os en la ubicaci)n especificada. Es"e a"ribu"o es nue&o en .NET +ramework 2.*. El &alor prede"erminado es True. Especifica el nLmero de minu"os 1ue se conceden al proceso de "raba2o para 1ue se cierre por s, mismo. Mna &e e@pirado es"e pla o% ASP.NET cierra el proceso de "raba2o. Es"e a"ribu"o es nue&o en .NET +ramework 2.*. El &alor prede"erminado es >* se#undos.

s8u"downTimeou"

El elemen"o 8""p0un"ime no se define e@pl,ci"amen"e en el arc8i&o web.confi# ra, . Sin embar#o% los si#uien"es son los &alores prede"erminados 1ue iniciali a el sis"ema. Si necesi"a personali ar es"a secci)n% debe crearla en su arc8i&o de confi#uraci)n y debe definir s)lo los a"ribu"os 1ue necesi"an personali aci)n. FEttp7unti0e e1ecution!i0eout2/11)/ 0a17equest.en$tE2/8)R=/ request.en$tEDis:!EresEo d2/N)/ 0in,ree!Ereads2/N/ app7equestbueue.i0it2/;)))/ enab eAerne @utputCacEe2/true/ require7ootedCa#e<sPatE2/true/ enab e2/true/ sEutdo3n!i0eout2/R)/ de ay9otification!i0eout2/;/ enab eZeaderCEec:in$2/true/ apart0ent!Ereadin$2/fa se/ 4^

217 de 217

También podría gustarte