Está en la página 1de 496

Programación en castellano.

El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#
Au t o r: Jo s é An t o n io Go n zá le z S e co

Le e r co m e n t a rio s ( 3 6 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 5 3 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Cu rs o d is p o n ib le e n DOC y PDF e n la p á g in a we b d e l a u t o r.

I n d ic e d e c o n t e n id o s

● In t ro d u cció n a la o b ra
❍ Re q u is it o s p re vio s re co m e n d a d o s
❍ Es t ru ct u ra d e la o b ra
❍ Co n ve n io s d e n o t a ció n
● Te m a 1 : In t ro d u cció n a Micro s o ft . NET
❍ Micro s o ft . NET
❍ Co m m o n La n g u a g e Ru n t im e ( CLR)
❍ Micro s o ft In t e rm e d ia t e La n g u a g e ( MS IL)
❍ Me t a d a t o s
❍ En s a m b la d o s
❍ Lib re ría d e cla s e b a s e ( BCL)
❍ Co m m o n Typ e S ys t e m ( CTS )
❍ Co m m o n La n g u a g e S p e cifica t io n ( CLS )
● Te m a 2 : In t ro d u cció n a C#
❍ Orig e n y n e ce s id a d d e u n n u e vo le n g u a je
❍ Ca ra ct e rís t ica s d e C#
❍ Es crit u ra d e a p lica cio n e s
● Te m a 3 : El p re p ro ce s a d o r
❍ Co n ce p t o d e p re p ro ce s a d o r
❍ Dire ct iva s d e p re p ro ce s a d o
● Te m a 4 : As p e ct o s lé xico s
❍ Co m e n t a rio s
❍ Id e n t ifica d o re s
❍ Pa la b ra s re s e rva d a s
❍ Lit e ra le s
❍ Op e ra d o re s
● Te m a 5 : Cla s e s
❍ De fin ició n d e cla s e s
❍ Cre a ció n d e o b je t o s
❍ He re n cia y m é t o d o s virt u a le s

http://www.programacion.com/tutorial.php?id=csharp (1 de 4) [20/10/2002 18:12:00]


Programación en castellano. El lenguaje de programación C#

❍ La cla s e p rim ig e n ia : S ys t e m . Ob je ct
❍ Po lim o rfis m o
❍ Ocu lt a ció n d e m ie m b ro s
❍ Mie m b ro s d e t ip o
❍ En ca p s u la ció n
● Te m a 6 : Es p a cio s d e n o m b re s
❍ Co n ce p t o d e e s p a cio d e n o m b re s
❍ De fin ició n d e e s p a cio s d e n o m b re s
❍ Im p o rt a ció n d e e s p a cio s d e n o m b re s
❍ Es p a cio d e n o m b re s d is t rib u id o s
● Te m a 7 : Va ria b le s y t ip o s d e d a t o s
❍ De fin ició n d e va ria b le s
❍ Tip o s d e d a t o s b á s ico s
❍ Ta b la s
❍ Ca d e n a s d e t e xt o
❍ Co n s t a n t e s
❍ Va ria b le s d e s ó lo le ct u ra
❍ Ord e n d e in icia liza ció n d e va ria b le s
● Te m a 8 : Mé t o d o s
❍ Co n ce p t o d e m é t o d o
❍ De fin ició n d e m é t o d o s
❍ Lla m a d a a m é t o d o s
❍ Tip o s d e p a rá m e t ro s . S in t a xis d e d e fin ició n
❍ Mé t o d o s e xt e rn o s
❍ Co n s t ru ct o re s
❍ De s t ru ct o re s
● Te m a 9 : Pro p ie d a d e s
❍ Co n ce p t o d e p ro p ie d a d
❍ De fin ició n d e p ro p ie d a d e s
❍ Acce s o a p ro p ie d a d e s
❍ Im p le m e n t a ció n in t e rn a d e p ro p ie d a d e s
● Te m a 1 0 : In d iza d o re s
❍ Co n ce p t o d e in d iza d o r
❍ De fin ició n d e in d iza d o r
❍ Acce s o a in d iza d o re s
❍ Im p le m e n t a ció n in t e rn a d e in d iza d o re s
● Te m a 1 1 : Re d e fin ició n d e o p e ra d o re s
❍ Co n ce p t o d e re d e fin ició n d e o p e ra d o r
❍ De fin ició n d e re d e fin icio n e s d e o p e ra d o re s
❍ Re d e fin icio n e s d e o p e ra d o re s d e co n ve rs ió n
● Te m a 1 2 : De le g a d o s y e ve n t o s
❍ Co n ce p t o d e d e le g a d o
❍ De fin ició n d e d e le g a d o s
❍ Ma n ip u la ció n d e o b je t o s d e le g a d o s
❍ La cla s e S ys t e m . Mu lt ica s t De le g a t e
❍ Lla m a d a s a s ín cro n a s
❍ Im p le m e n t a ció n in t e rn a d e lo s d e le g a d o s
❍ Eve n t o s
● Te m a 1 3 : Es t ru ct u ra s
❍ Co n ce p t o d e e s t ru ct u ra

http://www.programacion.com/tutorial.php?id=csharp (2 de 4) [20/10/2002 18:12:00]


Programación en castellano. El lenguaje de programación C#

❍Dife re n cia s e n t re cla s e s y e s t ru ct u ra s


❍ Bo xin g y u n b o xin g
❍ Co n s t ru ct o re s
● Te m a 1 4 : En u m e ra cio n e s
❍ Co n ce p t o d e e n u m e ra ció n
❍ De fin ició n d e e n u m e ra cio n e s
❍ Us o d e e n u m e ra cio n e s
❍ La cla s e S ys t e m . En u m
❍ En u m e ra cio n e s d e fla g s
● Te m a 1 5 : In t e rfa ce s
❍ Co n ce p t o d e in t e rfa z
❍ De fin ició n d e in t e rfa ce s
❍ Im p le m e n t a ció n d e in t e rfa ce s
❍ Acce s o a m ie m b ro s d e u n a in t e rfa z
● Te m a 1 6 : In s t ru ccio n e s
❍ Co n ce p t o d e in s t ru cció n
❍ In s t ru ccio n e s b á s ica s
❍ In s t ru ccio n e s co n d icio n a le s
❍ In s t ru ccio n e s it e ra t iva s
❍ In s t ru ccio n e s d e e xce p cio n e s
❍ In s t ru ccio n e s d e s a lt o
❍ Ot ra s in s t ru ccio n e s
● Te m a 1 7 : At rib u t o s
❍ Co n ce p t o d e a t rib u t o
❍ Ut iliza ció n d e a t rib u t o s
❍ De fin ició n d e n u e vo s a t rib u t o s
❍ Le ct u ra d e a t rib u t o s e n t ie m p o d e e je cu ció n
❍ At rib u t o s d e co m p ila ció n
● Te m a 1 8 : Có d ig o in s e g u ro
❍ Co n ce p t o d e có d ig o in s e g u ro
❍ Co m p ila ció n d e có d ig o s in s e g u ro s
❍ Ma rca ció n d e có d ig o s in s e g u ro s
❍ De fin ició n d e p u n t e ro s
❍ Ma n ip u la ció n d e p u n t e ro s
❍ Op e ra d o re s re la cio n a d o s co n có d ig o in s e g u ro
❍ Fija ció n d e va ria b le s a p u n t a d a s
● Te m a 1 9 : Do cu m e n t a ció n XML
❍ Co n ce p t o y u t ilid a d d e la d o cu m e n t a ció n XML
❍ In t ro d u cció n a XML
❍ Co m e n t a rio s d e d o cu m e n t a ció n XML
❍ Et iq u e t a s re co m e n d a d a s p a ra d o cu m e n t a ció n XML
❍ Ge n e ra ció n d e d o cu m e n t a ció n XML
❍ Es t ru ct u ra d e la d o cu m e n t a ció n XML
❍ S e p a ra ció n e n t re d o cu m e n t a ció n XML y có d ig o fu e n t e
● Te m a 2 0 : El co m p ila d o r d e C# d e Micro s o ft
❍ In t ro d u cció n
❍ S in t a xis g e n e ra l d e u s o d e l co m p ila d o r
❍ Op cio n e s d e co m p ila ció n
❍ Acce s o a l co m p ila d o r d e s d e Vis u a l S t u d io . NET
● Do cu m e n t a ció n d e re fe re n cia

http://www.programacion.com/tutorial.php?id=csharp (3 de 4) [20/10/2002 18:12:00]


Programación en castellano. El lenguaje de programación C#

❍ Bib lio g ra fía


❍ In fo rm a ció n e n In t e rn e t s o b re C#
❍ Po rt a le s
❍ Gru p o s d e n o t icia s y lis t a s d e co rre o

Le e r co m e n t a rio s ( 3 6 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 5 3 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

e s t a m u y in t e re s a n t e ( 1 9 / 1 0 / 2 0 0 2 )
Po r jo s e a n t o n io

co m o d e s ca rg o e l cu rs o co m p le t o d e c# , y s i t ie n e s cu rs o d e ja va vis u a l 6 in fo rm a m e , p u e s t e
a g ra d e s co q u e m e co n t e s t e s p u e s e s t o y a p re n d ie n d o p o co a p o co . . . . . Gra cia s

Fe lic it a c io n e s ( 1 6 / 1 0 / 2 0 0 2 )
Po r En riq u e Ló p e z

Me p a re ce u n e xce le n t e cu rs o , y m e g u s t a ría co n t in u a r e s t u d ia n d o lo , p e ro s e m e d ificu lt a e n


lín e a , a s í q u e p o r fa vo r p o d ría t e n e r u n a co p ia co m o d o cu m e n t o e le ct ró n ico ,

Mu ch ís im a s g ra cia s

c o m o b a ja r e s t e m a n u a l ( 1 4 / 1 0 / 2 0 0 2 )
Po r fa b ia n ro ja s

m e ju s t a ria t e n e r e s t e cu rs o e n m i p c
t e a g ra d e co s i m e d ice s co m o lo p u e d o h a ce r

¿ Co m o d e s c a rg a rlo ? ( 1 3 / 1 0 / 2 0 0 2 )
Po r Ara ce li

t e a g ra d e ce ria s i p u d ie ra s d e cirm e co m o d e s ca rg a r e l a rch ivo p a ra p o d e r t e n e rlo e n m i


co m p u t a d o ra s in t e n e r co n e xio n a in t e rn e t

g ra cia s

Ex c e le n t e ( 0 8 / 1 0 / 2 0 0 2 )
Po r PABLO S OUR

Oja la m e p u d ie ra s m a n d a r u n a co p ia p o r co rre o e le ct ro n ico Gra cia s


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.php?id=csharp (4 de 4) [20/10/2002 18:12:00]


Programacion castellano html php asp java perl cgi foros gratis

Añ a d ir u n a d ire cció n | Cre a r u n a we b | Cre a r u n cu rs o

Ga n a m o s e l P re m io iBe s t 2 0 0 1 Bu s ca d o r | Dire ccio n e s | Cu rs o s | Art icu lo s | Fo ro s | Lis t a d e Co rre o

» BUS CAD OR Vis it a n u e s t ra


Nu e va Zo n a s o b re
En nuestro sitio P HP

Buscar
» P D F ARTI CULOS
S e p u e d e n b u s ca r fra s e s co m p le t a s e n ce rra n d o la s e n t re co m illa s d o b le s ( ") y To d o s lo s a rt ícu lo s d e l
u s a r lo s o p e ra d o re s ló g ico s AND, OR y NOT. Po r d e fe ct o , b u s ca r m á s d e u n a 2 0 0 0 e n P D F.
p a la b ra d e lim it a d a s p o r e s p a cio s e q u iva le a u t iliza r e l o p e ra d o r AND.
» FORMACI ÓN

» D I RECCI ON ES
Bases de datos Leng. orientados a objeto
SQL, PostgreSQL... C++, Java...
Entornos de Desarrollo Lenguajes de script
Delphi, Visual Basic... Perl, JavaScript... » N UES TRAS ZON AS

Entretenimiento Otros lenguajes HTML e n ca s t e lla n o


Juegos, Demos... Prolog, Haskell... HTML, XML, Ja va s crip t ,
DHTML. .
Herramientas Sistemas operativos Ja va e n ca s t e lla n o
Editores, Compiladores... Windows NT, Linux...
In fo rm a ció n Ja va
Internet Teoría AS P e n ca s t e lla n o
HTML, XML, WAP... Metodología, UML, Algoritmos...
AS P, VBS crip t , e t c.
Lenguajes imperativos Varios PHP e n ca s t e lla n o
C, Pascal... Generales, Gráfica...
PHP, MyS QL, e t c.
Añ a d ir URL | Últ im o s e n la ce s
» S ECCI ON ES

Cu rs o s
» N UES TROS CURS OS Art ícu lo s
Fo rm a ció n
Últ im o s cu rs o s p u b lica d o s :
Fo ro s
Ne w 2 Ja va : Co n s t ru ir u n a Ap lica ció n : 4 . - Le e r y Es crib ir Fich e ro s y
» HEMOS GAN AD O
Ma n e ja r Exce p cio n e s [ Zo n a Ja va ] .
Op e ra cio n e s a va n za d a s co n JDBC y Ja va [ Zo n a Ja va ] .
Mo d e lo re la cio n a l [ Zo n a Ge n e ra l] .
El le n g u a je d e p ro g ra m a cio n C# [ Zo n a Ge n e ra l] .
Cu rs o d e Pro lo g a va n za d o [ Zo n a Ge n e ra l] .
Ma n e ja r Co n e xio n e s a Ba s e s d e Da t o s co n JDBC 3 . 0 [ Zo n a Ja va ]
Cu rs o d e XML [ Zo n a Ge n e ra l] .
S u p le m e n t o s a Ne w 2 Ja va [ Zo n a Ja va ] .
» N OVED AD ES
Cu rs o p rá ct ico d e Co rb a e n GNU/ Lin u x [ Zo n a Ge n e ra l] .
XML S ch e m a y DTDs [ Zo n a Ge n e ra l] .

http://www.programacion.com/ (1 de 3) [20/10/2002 18:12:07]


Programacion castellano html php asp java perl cgi foros gratis

1 7 - Oc t u b re 2 0 0 2
Má s cu rs o s : To d o s | Zo n a HTML | Zo n a Ja va | Zo n a AS P | Zo n a PHP Nu e vo a rt ícu lo e n
z o n a P HP : S MTP
u t iliza n d o S o cke t s e n
PHP.
CURS OS D E CAP ACI TACI ÓN P ROFES I ON AL ON - LI N E
h t t p : / / www. cib e ra u la . co m 1 3 - Oc t u b re 2 0 0 2
Cu rs o s : Ma s t e r e n Pro g ra m a ció n We b , Ja va , J2 EE, PHP, AS P, XML, WAP, Nu e vo a rt ícu lo e n
Dre a m we a ve r, Fla s h , Act io n S crip t , Me t o d o lo g ía , Ba s e s d e d a t o s . z o n a Ja v a : De s p le g a r
S e rvle t s y Ap lica cio n e s
We b e n To m ca t y
» N UES TROS ARTÍ CULOS We b Lo g ic S e rve r.

Últ im o s a rt ícu lo s p u b lica d o s : 1 0 - Oc t u b re 2 0 0 2


Nu e vo cu rs o e n z o n a
S MTP u t iliza n d o S o cke t s e n PHP [ Zo n a PHP] . Ja v a : Ne w 2 Ja va :
De s p le g a r S e rvle t s y Ap lica cio n e s We b e n To m ca t y We b Lo g ic S e rve r Co n s t ru ir u n a
[ Zo n a Ja va ] . Ap lica ció n : 4 . - Le e r y
PHP y fu n cio n e s FTP [ Zo n a PHP] . Es crib ir Fich e ro s y
Cre a r u n fich e ro ro b o t s . t xt [ Zo n a HTML] . Ma n e ja r Exce p cio n e s .
Tra b a ja r co n fich e ro s e n PHP [ Zo n a PHP] . 9 - Oc t u b re 2 0 0 2
El Pro ye ct o AS P. NET We b Ma t rix [ Zo n a Ge n e ra l] . Nu e vo a rt ícu lo e n
Pro t e cció n co n co n t ra s e ñ a s ( III) : Va rio s u s u a rio s [ Zo n a HTML] . z o n a P HP : PHP y
JDC Te ch Tip s 2 2 d e En e ro d e 2 0 0 2 [ Zo n a Ja va ] . fu n cio n e s FTP.
JDC Te ch Tip s 1 0 d e En e ro d e 2 0 0 2 [ Zo n a Ja va ] . 6 - Oc t u b re 2 0 0 2
Nu e vo cu rs o e n z o n a
Má s a rt ícu lo s : Ja v a : Op e ra cio n e s
To d o s | Zo n a HTML | Zo n a Ja va | Zo n a AS P | Zo n a PHP a va n za d a s co n JDBC y
Ja va .
3 - Oc t u b re 2 0 0 2
P a rt ic ip a S e g u n d a y ú lt im a
S e a co la b o ra d o r d e Pro g ra m a ció n e n ca s t e lla n o . Es t a re m o s e n ca n t a d o s d e e n t re g a d e l cu rs o :
p u b lica r s u s cu rs o s y a rt icu lo s s o b re p ro g ra m a ció n . Es crib e n o s . Mo d e lo re la cio n a l.
2 4 - S e p t ie m b re 2 0 0 2

» FOROS Prim e ra e n t re g a d e l
cu rs o : Mo d e lo
Alg u n o s d e n u e s t ro s fo ro s : Ult im o s m e n s a je s : re la cio n a l.
1 6 - S e p t ie m b re 2 0 0 2
Vis u a l Ba s ic
Nu e vo a rt ícu lo e n zo n a
Vis u a l Fo xPro
HTML: Cre a r u n
HTML fich e ro ro b o t s . t xt .
Ja va ( b á s ico )
1 3 - S e p t ie m b re 2 0 0 2
PHP
Nu e va zo n a t e m á t ica
XML
e n Pro g ra m a ció n e n
Ba s e s d e d a t o s y S QL ca s t e lla n o : ZONA PHP.
AS P
9 - S e p t ie m b re 2 0 0 2
S e rv. d e Ap lica cio n e s J2 EE
Nu e vo a rt ícu lo :
Má s fo ro s Tra b a ja r co n fich e ro s
e n PHP.
6 - S e p t ie m b re 2 0 0 2

http://www.programacion.com/ (2 de 3) [20/10/2002 18:12:07]


Programacion castellano html php asp java perl cgi foros gratis

» P ROGRAMACI ÓN EN CAS A S é p t im a y ú lt im a
e n t re g a d e l cu rs o : El
Acce s o a d e s ca rg a d e a rch ivo s PDF
le n g u a je d e
In fo rm a ció n s o b re p ro g ra m a ció n ( n o ve d a d e s , d ire ccio n e s ,
p ro g ra m a ció n C# .
a rt ícu lo s , e t c. ) t ra n q u ila m e n t e e n e l co rre o d e t u ca s a .
No m b re : S i ya p e rt e n e cía s a la lis t a d e d is t rib u ció n » RECOMEN D AD OS
d e n o ve d a d e s d e Pro g ra m a ció n e n
La Va ria b le
Pa s s wo rd : ca s t e lla n o , s e t e h a a s ig n a d o co m o
n o m b re y p a s s w o rd t u d ire c c ió n d e Ma e s t ro s d e l We b
c o rre o e le c t ró n ic o We b Exp e rt o
Po r e l co n t ra rio , s i e s a ú n n o e s t a s
Enviar re g is t ra d o h a z clic a q u í p a ra d a rt e d e a lt a

Ga n a m o s e l P re m io iBe s t 2 0 0 1 Bu s ca d o r | Dire ccio n e s | Cu rs o s | Art icu lo s | Fo ro s | Lis t a d e Co rre o

Ot ra s W e b s : s m s g ra t is , Gra t is , Dire ct o rio y Bu s ca d o r, Lo g o s y m e lo d ia s m o vile s , WAPe s

© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Co n t a ct o - Da t o s le g a le s
Es t a d ís t ic a s e n :

Re D In t e rn e t : Me lo d ia s Mo vile s , Lo g o s No kia | e n vio s m s g ra t is | S a lva p a n t a lla s y fo n d o s |


Me lo d ia s e ric s s o n | m e lo d ia s m o vile s g ra t is | lo g o s m o t o ro la

http://www.programacion.com/ (3 de 3) [20/10/2002 18:12:07]


Programación en castellano. Añadir una dirección

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Añ a d ir u n a d ire c c ió n
De s d e a q u í p u e d e u s t e d co la b o ra r co n Pro g ra m a ció n e n ca s t e lla n o a ñ a d ie n d o t a n t a s d ire ccio n e s d e
s it io s s o b re p ro g ra m a ció n co m o u s t e d d e s e e . Un m ie m b ro d e Pro g ra m a ció n e n ca s t e lla n o la s
vis it a rá y p u n t u a rá a n t e s d e a ñ a d irla s a n u e s t ra s p á g in a s . Po r fa vo r, re lle n e e l s ig u ie n t e fo rm u la rio :
No m b re d e la p á g in a :

Dire cció n d e la p á g in a :
http://

S u n o m b re :

S u d ire cció n d e co rre o e le ct ró n ico :

Ca t e g o ría d o n d e s e in s crib e :
Ninguna

Co m e n t a rio s s o b re la p á g in a :

Enviar (puede tardar) Borrar

¡Gra cia s p o r co la b o ra r!

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/nueva_url.php [20/10/2002 18:12:13]


Programación en castellano. Crear una web

Añ a d ir u n a d ire cció n | Cre a r u n a we b | Cre a r u n cu rs o

Cre a r u n a w e b d e P ro g ra m a c ió n e n c a s t e lla n o
Ta n t o s i ya t ie n e u n a we b s o b re p ro g ra m a ció n y d e s e a in co rp o ra rla a n u e s t ro s it io , co m o s i
q u ie re cre a r u n a d e s d e la n a d a , p a ra c o la b o ra r co n n o s o t ro s p o r fa vo r re lle n e e l s ig u ie n t e
fo rm u la rio :

No m b re d e la p á g in a :
X en castellano

S u n o m b re :

S u d ire cció n d e co rre o e le ct ró n ico :

¿ Cu á l e s e l e s t a d o a ct u a l d e s u p á g in a ?
La página no existe

S i e s t á e n e l ú lt im o ca s o , p o r fa vo r in d iq u e n o s la d ire cció n a ct u a l d e s u p á g in a :
http://

Co m e n t e la p á g in a q u e d e s e a cre a r

Enviar (puede tardar) Borrar

¡Gra cia s p o r co la b o ra r!

© 1 9 9 9 - 2 0 0 0 , Jo a q u in Bra vo y Da n i Ro d rig u e z.
Pro g ra m a ció n e n ca s t e lla n o .

http://www.programacion.com/nueva_web.htm [20/10/2002 18:12:24]


Programación en castellano. Crear un curso

Añ a d ir u n a d ire cció n | Cre a r u n a we b | Cre a r u n cu rs o

Cre a r u n c u rs o d e p ro g ra m a c ió n
S i d e s e a e n s e ñ a r p ro g ra m a ció n , la m a n e ra m á s s e n cilla e s c o la b o ra r co n n o s o t ro s cre a n d o u n
cu rs o p a ra Pro g ra m a ció n e n ca s t e lla n o . S i e s e e s s u d e s e o , p o r fa vo r re lle n e e l s ig u ie n t e
fo rm u la rio :

Te m a d e l cu rs o :

S u n o m b re :

S u d ire cció n d e co rre o e le ct ró n ico :

¿ Cu á l e s e l e s t a d o a ct u a l d e s u cu rs o ?
El curso no existe

S i e s t á e n e l ú lt im o ca s o , p o r fa vo r in d iq u e n o s la d ire cció n a ct u a l d e s u cu rs o :
http://

Co m e n t e e l cu rs o q u e d e s e a cre a r

Enviar (puede tardar) Borrar

¡Gra cia s p o r co la b o ra r!

© 1 9 9 9 - 2 0 0 0 , Jo a q u in Bra vo y Da n i Ro d rig u e z.
Pro g ra m a ció n e n ca s t e lla n o .

http://www.programacion.com/nuevo_curso.htm [20/10/2002 18:12:30]


Programación en castellano. Direcciones. Bases de datos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Ba s e s d e
da to s
4 0 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s re la cio n a d a s co n la s b a s e s d e d a t o s y s u p ro g ra m a ció n ; le n g u a je s ,
h e rra m ie n t a s , e t c. . .

● Acce s s ( 3 )
● Ca ch é ( 4 )
● Micro s o ft S QL S e rve r ( 2 )
● MyS QL ( 6 )
● Ora cle ( 4 )
● Po s t g re S QL ( 5 )
● S QL ( 4 )
● S yb a s e ( 8 )
● Vis u a l Fo xPro ( 4 )
● Clip p e r & xBa s e @ ( 9 )
● Te o ría d e b a s e s d e d a t o s @ ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.bases-de-datos.html [20/10/2002 18:12:35]


Programación en castellano. Direcciones. Bases de datos. SQL

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Ba s e s d e
d a t o s . S QL
4 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re e l le n g u a je e s t á n d a r p a ra e l t ra t a m ie n t o d e b a s e s d e d a t o s S QL.

» EN ES TA P AGI N A
1 . Cu rs o s

Cu rs o s [ S u b ir]
4 d ire ccio n e s

Cu rs o d e S QL. d e a u la Clic
h t t p : / / www. a u la clic. o rg / s q l/ f_ s q l. h t m
2 1 9 1 4 vis it a s | Pu n t u a ció n : ( 2 8 vo t o s ) Vo t a
Ap re n d e S QL co n e s t e cu rs o re a liza d o co n rig o r p e ro co n u n le g u a je cla ro y s e n cillo . Co n e je m p lo s .
Ut iliza co m o m o t o r d e b a s e d e d a t o s e l Acce s s 2 0 0 0 .

Ma n u a l d e in t ro d u c c ió n S QL
h t t p : / / www. u n a v. e s / ct i/ m a n u a le s / In t ro _ S QL/ in d ice . h t m l
1 6 8 1 7 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Ma n u a l d e S QL o rg a n iza d o e n 1 1 le ccio n e s . Fo rm a p a rt e d e l Ce n t ro d e Te cn o lo g ía In fo rm á t ica d e
la Un ive rs id a d d e Na va rra .

Ma n u a le s d e S QL y b a s e s d e d a t o s
h t t p : / / www. lo b o co m . e s / ~ cla u d io / m e n u . h t m
3 6 8 7 7 vis it a s | Pu n t u a ció n : ( 1 1 1 vo t o s ) Vo t a
Un e xce le n t e m a n u a l e n ca s t e lla n o d e S QL ( o rie n t a d o a Acce s s ) , cre a d o p o r Cla u d io Ca s a re s , q u e
h a s id o co m p le t a d o co n cu rs o s m á s t e ó rico s s o b re m o d e la d o d e d a t o s , m o d e lo E/ R, d a t a
wa re h o u s in g , m o d e lo re la cio n a l, e t c. .

I n t e ra c t iv e / On - lin e S QL Tu t o ria l
h t t p : / / www. s q lco u rs e . co m
1 1 9 6 6 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
Exce le n t e in t ro d u cció n a l S QL co n la p o s ib ilid a d d e p ro b a r t u s re cié n a d q u irid a s h a b ilid a d e s co n u n
in t é rp re t e d e S QL in clu id o e n la we b . Po d rá s t e cle a r t u s s e n t e n cia s m ie n t ra s e s t é s co n e ct a d o a l
cu rs o .

http://www.programacion.com/direcciones.sql.html (1 de 2) [20/10/2002 18:12:37]


Programación en castellano. Direcciones. Bases de datos. SQL

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.sql.html (2 de 2) [20/10/2002 18:12:37]


Programación en castellano. Direcciones. Bases de datos. PostgreSQL

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Ba s e s d e
da to s .
P o s t g re S QL
5 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s in t e re s a n t e s s o b re e l s e rvid o r d e b a s e d e d a t o s g ra t u it o ( lice n cia BS D)
Po s t g re S QL.

» EN ES TA P AGI N A
1 . He rra m ie n t a s
2 . Art icu lo s
3 . Ge n e ra le s

He rra m ie n t a s [ S u b ir]
1 d ire cció n

P g Ac c e s s
h t t p : / / fle x. ro / p g a cce s s /
6 7 3 5 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
He rra m ie n t a g rá fica p a ra a d m in is t ra r Po s t g re S QL

Art ic u lo s [ S u b ir]
1 d ire cció n

I n s t a la c ió n d e u n s e rv id o r P o s t g re S QL
h t t p : / / www. p la n e t a lin u x. co m . a r/ a rt icle . p h p ? a id = 3 2
7 2 1 8 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Art ícu lo e n ca s t e lla n o e n e l q u e s e e xp lica co m o in s t a la r la b a s e d e d a t o s Po s t g re S QL.

http://www.programacion.com/direcciones.PostgreSQL.html (1 de 2) [20/10/2002 18:12:39]


Programación en castellano. Direcciones. Bases de datos. PostgreSQL

Ge n e ra le s [ S u b ir]
3 d ire ccio n e s

P o s t g re S QL Mé x ic o
h t t p : / / www. p o s t g re s . o rg . m x/ in d e x. h t m l
1 0 9 1 5 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Pá g in a co n va ria d a in fo rm a ció n s o b re e s t e s is t e m a d e b a s e s d e d a t o s . En ca s t e lla n o y m a n t e n id a
p o r e l m e xica n o Ro b e rt o An d ra d e . Dis p o n e d e u n a lis t a d e co rre o .

P ro y e c t o d e t ra d u c c ió n a l Es p a ñ o l d e la d o c u m e n t a c ió n d e P o s t g re S QL RD BMS
h t t p : / / u s e rs . s e rvicio s . re t e ca l. e s / rs a n t o s / in d e x. h t m
8 2 7 2 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
p ro ye ct o d e t ra d u cció n a l e s p a ñ o l d e la d o cu m e n t a ció n d e Po s t g re s q l. S e a n im a a p a rt icip a r.

P á g in a o fic ia l d e l P o s t g re S QL
h t t p : / / www. p o s t g re s q l. o rg /
6 1 4 6 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Pu e s e s o , la We b o ficia l d e e s t e s is t e m a d e b a s e s d e d a t o s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.PostgreSQL.html (2 de 2) [20/10/2002 18:12:39]


Programación en castellano. Direcciones. Lenguajes orientados a objeto

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
o rie n t a d o s
a o b je t o
4 3 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re le n g u a je s o rie n t a d o s a o b je t o , co m o Ja va , C+ + o S m a llt a lk.

● C# ( 6 )
● C+ + ( 6 )
● Eiffe l ( 1 )
● Ja va ( 2 7 )
● S m a llt a lk ( 2 )

» EN ES TA P AGI N A
1 . Ge n e ra le s

Ge n e ra le s [ S u b ir]
1 d ire cció n

La p á g in a o rie n t a d a a o b je t o s
h t t p : / / www. ct v. e s / US ERS / p a g u llo /
1 9 4 9 2 vis it a s | Pu n t u a ció n : ( 4 5 vo t o s ) Vo t a
Pá g in a co n in fo rm a ció n d e d ive rs o s le n g u a je s o rie n t a d o s a o b je t o , co m o C+ + y Ja va . Co n t ie n e
e n la ce s y a rt ícu lo s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.poo.html [20/10/2002 18:12:40]


Programación en castellano. Direcciones. Lenguajes orientados a objeto. C++

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
o rie n t a d o s
a o b je t o .
C+ +
6 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re C+ +

» EN ES TA P AGI N A
1 . Lib re ría s
2 . Tu t o ria le s
3 . Ge n e ra le s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● C + + co n cla s e

Lib re ría s [ S u b ir]


1 d ire cció n

Min GW : Min im a lis t GN U Fo r W in d o w s


h t t p : / / www. m in g w. o rg
5 8 3 2 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Lib re ría s q u e p e rm it e n d e s a rro lla r a p lica cio n e s n a t iva s Win d o ws co n e l co n o cid o co m p ila d o r g cc.
S o n s ó lo lib re ría s , a s í q u e e s n e ce s a rio t e n e r e l co m p ila d o r, y n o d is p o n e d e e n t o rn o d e d e s a rro llo .

http://www.programacion.com/direcciones.cpp.html (1 de 2) [20/10/2002 18:12:43]


Programación en castellano. Direcciones. Lenguajes orientados a objeto. C++

Tu t o ria le s [ S u b ir]
4 d ire ccio n e s

C + + c o n c la s e
h t t p : / / c. co n cla s e . n e t
1 0 1 1 0 vis it a s | Pu n t u a ció n : ( 2 6 vo t o s ) Vo t a
Exce le n t e y co m p le t o cu rs o d e C+ + , d is p o n ib le t a m b ié n e n PDF.

I n t ro d u c c ió n a la P ro g ra m a c ió n c o n C+ +
h t t p : / / www. g e o cit ie s . co m / in f1 3 5 / t u t c/ t u t c. h t m
6 0 9 1 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Tu t o ria l d e C+ + e n e l q u e la t e o ría y la m e t o d o lo g ía t ie n e n b a s t a n t e p e s o . Mu y a d e cu a d o , p o r
t a n t o , p a ra p rin cip ia n t e s q u e n o s e p a n p ro g ra m a r n i e n C n i e n n in g u n a o t ra co s a .

Cu rs o d e C+ +
h t t p : / / www. za t o r. co m / Cp p /
2 1 3 7 2 vis it a s | Pu n t u a ció n : ( 2 3 vo t o s ) Vo t a
In t e re s a n t e cu rs o s o b re C+ + e n e l q u e s e h a ce u n re p a s o d e lo s p rin cip io s b á s ico s d e e s t e
le n g u a je d e p ro g ra m a ció n , s in e n t ra r e n lo s a s p e ct o s m á s co m p lica d o s d e l m is m o .

Ap re n d a C+ + c o m o s i e s t u v ie ra e n p rim e ro
h t t p : / / fca p ra . ce it . e s / Ayu d a In f/ Ap re n d a In f/ Cp p / m a n u a lcp p . p d f
6 1 4 1 2 vis it a s | Pu n t u a ció n : ( 8 6 vo t o s ) Vo t a
Co m p le t o cu rs o e n fo rm a t o PDF q u e t e a yu d a rá a a p re n d e r C+ + , a u n q u e p a ra s e g u irlo e s
re co m e n d a b le co n o ce r d e a n t e m a n o C y fu n d a m e n t o s d e p ro g ra m a ció n .

Ge n e ra le s [ S u b ir]
1 d ire cció n

El rin c o n d e Ch e m a n u e l
h t t p : / / www. g e o cit ie s . co m / jo s e m p a d ro n / e s p / in t ro d u ccio n . h t m
1 1 8 4 7 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Pa g in a s p e rs o n a le s d o n d e s e re co g e n g ra n ca n t id a d d e e n la ce s a s it io s d e d ica d o s a la
p ro g ra m a cio n p a ra Win d o ws u t iliza n d o C+ + .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.cpp.html (2 de 2) [20/10/2002 18:12:43]


http://www.programacion.com/direcciones.java.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
o rie n t a d o s
a o b je t o .
Ja v a
2 7 d ire ccio n e s
Ja va 2 S t a n d a rd Ed it io n - J2 S E, e s e l e n t o rn o d e d e s a rro llo d e a p lica cio n e s Ja va o rie n t a d o a la s
a p lica cio n e s s o lit a ria s y lo s Ap p le t s

● J2 ME ( 2 )

» EN ES TA P AGI N A
1 . En t o rn o s d e d e s a rro llo
2 . Ge n e ra le s
3 . Ja va Be a n s
4 . Re vis t a s
5 . Tu t o ria le s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Ap p le We b Ob je ct s 5 . 1
● In t ro d u cció n a iPla n e t Ap p lica t io n S e rve r

En o t ro s id io m a s
● Bo rla n d Jb u ild e r
● Sun
● Fo rt e fo r Ja va

http://www.programacion.com/direcciones.java.html (1 de 5) [20/10/2002 18:12:51]


http://www.programacion.com/direcciones.java.html

En t o rn o s d e d e s a rro llo [ S u b ir]


6 d ire ccio n e s

Ap p le W e b Ob je c t s 5 . 1
h t t p : / / www. a p p le . co m / e s / we b o b je ct s
3 0 7 6 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
In clu ye t a n t o u n e n t o rn o d e d e s a rro llo b a s a d o e n Ja va co m o u n s e rvid o r d e a p lica cio n e s p a ra la
we b . Es d e p a g o , e s o s í. Lo u t iliza n m á s d e 3 . 0 0 0 e m p re s a s co m o Ad o b e , Ap p le , BBC, Un iv.
Mich ig a n , e t c.

N e t Be a n s
h t t p : / / www. n e t b e a n s . o rg
2 6 4 9 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Un g ra n e n t o rn o d e d e s a rro llo p a ra Ja va , h e ch o e n Ja va y o p e n - s o u rce ( b a jo lice n cia S PL) . El Fo rt e
e s t á b a s a d o e n p a rt e e n é l.

Fo rt e fo r Ja v a
h t t p : / / www. s u n . co m / fo rt e / ffj/
3 9 1 7 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
En t o rn o d e d e s a rro llo p a ra Ja va d e s a rro lla d o p o r S u n e n Ja va . Es t á b a s a d o e n Ne t Be a n s . Exis t e n
d o s va ria n t e s : "Co m m u n it y Ed it io n " q u e e s g ra t u it a , e "In t e rn e t Ed it io n " q u e e s p a g a .

Bo rla n d Jb u ild e r
h t t p : / / www. b o rla n d . co m / jb u ild e r
1 0 4 6 2 vis it a s | Pu n t u a ció n : ( 2 5 vo t o s ) Vo t a
Pa ra m u ch o s la m e jo r h e rra m ie n t a RAD p a ra Ja va d e l m o m e n t o . Es u n a d e la s m á s p o t e n t e s , d e
u s o s e n cillo , co n s o p o rt e 1 0 0 % p u ro Ja va y co m p a t ib le co n la s ú lt im a s t e cn o lo g ía s y s o p o rt e p a ra
b a s e s d e d a t o s : CORBA, ODBC, JDBC, S QL, e t c. El e n t o rn o d e p ro g ra m a ció n e s s im ila r a l u t iliza d o
p o r De lp h i y Bo rla n d C+ + Bu ild e r, p o r lo cu a l lo s q u e h a ya n u t iliza d o e s o s p ro g ra m a s s e
a co n s t u m b ra ra n fá cilm e n t e a JBUild e r.

I BM Vis u a l Ag e fo r Ja v a
h t t p : / / www. s o ft wa re . ib m . co m / a d / va ja va /
8 0 6 3 vis it a s | Pu n t u a ció n : ( 2 3 vo t o s ) Vo t a
He rra m ie n t a RAD d e IBM, d is p o n ib le p a ra OS / 2 y Win d o ws , e s u n o d e lo s e n t o rn o s m á s vis u a le s e
in t u it ivo s .

Ka w a
h t t p : / / t e k- t o o ls / ka wa
1 9 8 4 0 vis it a s | Pu n t u a ció n : ( 1 8 vo t o s ) Vo t a
Ap lica ció n s h a re wa re Win 3 2 , e s u n e s t u p e n d o IDE, p o t e n t e y d e fá cil u s o . En t o rn o d e va ria s
ve n t a n a s , e n u n a d e e lla s m u e s t ra e n a rb o l lo s p a q u e t e s Ja va , s u cla s e s , m é t o d o s y va ria b le s
co rre s p o n d ie n t e s . Po s ib ilid a d d e e s t a b le ce r d ive rs o s m o d o s d e co m p ila ció n , s o p o rt e p a ra JDBC,
re s a lt e d e co lo r y m u ch a s co s a s m á s . Un a b u e n a y b a ra t a a lt e rn a t iva a lo s e n t o rn o s m á s
a va n za d o s .

http://www.programacion.com/direcciones.java.html (2 de 5) [20/10/2002 18:12:51]


http://www.programacion.com/direcciones.java.html

Ge n e ra le s [ S u b ir]
8 d ire ccio n e s

ja v a His p a n o
h t t p : / / www. ja va h is p a n o . co m
1 3 3 9 1 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Pa g in a co n TODO lo re la cio n a d o co n Ja va . Tu t o ria le s , a rt ícu lo s , Fa q s , n o t icia s , e n la ce s . Y t o d o e n
ca s t e lla n o .

D is t rit o d e Ja v a e n Te le p o lis
h t t p : / / www. t e le p o lis . co m / cg i- b in / t 3 0 / !DIS TRITOS EC? d is t rit o = Ja va
1 0 2 7 8 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
Dis t rit o d e Te le p o lis d e d ica d o a Ja va . Co n m a n u a le s , n o t icia s , e je m p lo s , cu rs o s y u n fo ro p a ra
p la n t e a r t u s d u d a s .

Ja v a e n BI T
h t t p : / / www. b it - n e t . o rg / ja va / d e fa u lt . h t m
6 8 4 8 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
In t e re s a n t e re co p ila ció n d e e n la ce s re la cio n a d o s co n Ja va Mu y in t e re s a n t e e l m in it u t o ria l
t o t a lm e n t e p rá ct ico q u e s o b re e s t e le n g u a je .

Ja v a e n la UN AM ( Un iv e rs id a d N a c io n a l Au t o n o m a d e Me x ic o )
h t t p : / / s u n s it e . u n a m . m x/ ja va . h t m
9 2 7 5 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Co m p e n d io d e in fo rm a ció n s o b re Ja va . Art ícu lo s , d ire ccio n e s e t c.

Ca fe a u La it Ja v a
h t t p : / / m e t a la b . u n c. e d u / ja va fa q /
4 4 8 5 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
We b m a n t e n id a p o r Ellio t e Ru s t y Ha ro ld co n t u t o ria le s , cu rs o r, lib ro s , n o t icia s s o b re Ja va
a ct u a liza d a s d ia ria m e n t e , d e s crip ció n d e APIs , . . .

Ga m e la n
h t t p : / / www. g a m e la n . co m /
6 0 1 2 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
La p rin cip a l fu e n t e d e re cu rs o s p a ra Ja va . To d o e s t á o rd e n a d o e n u n a g ra n ca n t id a d d e
d ire ct o rio s , p a ra p o d e r e n co n t ra r fá cilm e n t e lo q u e s e b u s ca

JCe n t ra l
h t t p : / / www. ib m . co m / d e ve lo p e r/ ja va /
4 3 0 9 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
S it io ce n t ra l d e Ja va im p u ls a d o p o r IBM, d o n d e s e p u e d e n e n co n t ra r n o t icia s , co n s e jo s p a ra
d e s a rro lla d o re s , in fo rm a ció n s o b re a p lica cio n e s y n u e va s h e rra m ie n t a s , e t c

Sun
h t t p : / / ja va . s u n . co m /
5 8 0 2 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
La We b d e lo s cre a d o re s d e l Ja va .

http://www.programacion.com/direcciones.java.html (3 de 5) [20/10/2002 18:12:51]


http://www.programacion.com/direcciones.java.html

Ja v a Be a n s [ S u b ir]
1 d ire cció n

Ja v a Be a n s ( Ja v a S o ft )
h t t p : / / ja va . s u n . co m / b e a n s
6 3 1 5 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
De s d e e s t a p á g in a p o d ré is a cce d e r a t o d o t ip o d e m a t e ria l s o b re Ja va Be a n s , p ro p o rcio n a d o
g ra t u it a m e n t e p o r S u n : API's , d o cu m e n t a ció n , t u t o ria le s , ú lt im a s t e cn o lo g ia s re la cio n a d a s y
h e rra m ie n t a s e n s u s ú lt im a s ve rs io n e s . De vis it a o b lig a d a .

Re v is t a s [ S u b ir]
1 d ire cció n

Ja v a W o rld
h t t p : / / www. ja va wo rld . co m /
6 6 2 5 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Re vis t a e le ct ró n ica p u b lica d a p o r IDG d e d ica d a a Ja va . Co n t ie n e a rt ícu lo s d e m u y b u e n a ca lid a d ,
u n a s e cció n e n o rm e s o b re p ro g ra m a s d is p o n ib le s p a ra Ja va , re vis ió n d e lib ro s , . . .

Tu t o ria le s [ S u b ir]
9 d ire ccio n e s

Jin i - S is t e m a s d is t rib u id o s e n Ja v a
h t t p : / / cib e ria . ya . co m / p xa i/ file z/ jin i. zip
3 8 7 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Jin i ( Jin i Is No t In it ia ls ) e s u n a t e cn o lo g ia d e S u n Micro s ys t e m s p a ra e l d e s a rro llo d e s is t e m a s
d is t rib u id o s fo rm a d o s p o r t o d o t ip o d e d is p o s it ivo s q u e co n t e n g a n la m a q u in a virt u a l Ja va . Es t e e s
u n d o cu m e n t o q u e re p a s a lo s p rin cip io s fu n d a m e n t a le s d e lo s s is t e m a s d is t rib u id o s y d e s crib e la
t e cn o lo g ia co n e je m p lo s . En ca s t e lla n o

S t ru t s - I m p le m e n t a c io n d e l p a t ro n MVC e n W e b
h t t p : / / cib e ria . ya . co m / p xa i/ file z/ s t ru t s . zip
3 1 2 9 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
S t ru t s e s u n a p la t a fo rm a q u e p e rm it e d e s a rro lla r a p lica cio n e s we b e n Ja va b a s a n d o n o s e n e l
p a t ró n d e d is e ñ o Mo d e l- Vie w- Co n t ro lle r. En e s t e Do cu m e n t o s e d e s crib e e s e p a t ró n y s e d a n
a lg u n o s e je m p lo s d e S t ru t s .

I n t ro d u c c ió n a iP la n e t Ap p lic a t io n S e rv e r
h t t p : / / ja va . p ro g ra m a cio n . n e t / ip in t ro /
3 3 8 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Tra d u cció n a l ca s t e lla n o d e l m a n u a l d e in t ro d u cció n a l iPla n e t Ap p lica t io n S e rve r.

http://www.programacion.com/direcciones.java.html (4 de 5) [20/10/2002 18:12:51]


http://www.programacion.com/direcciones.java.html

h t t p :/ / ja v a . p ro g ra m a c io n . n e t / b e a in t ro /
h t t p : / / ja va . p ro g ra m a cio n . n e t / b e a in t ro /
6 4 7 7 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Prim e ro d e u n a s e rie d e t u t o ria le s d e d ica d o s a lo s S e rvid o re s d e Ap lica cio n e s e s p e cia lm e n t e
e n fo ca d o s a Ja va co m o We b Lo g ic d e BEA. A p a rt ir d e e s t a s e rie a p re n d e re m o s co m o p u b lica r
n u e s t ra s a p lica cio n e s Ja va e n lo s s e rvid o re s m á s im p o rt a n t e s .

Tu t o ria l d e Co c o o n
h t t p : / / ja va . p ro g ra m a cio n . n e t / co co o n /
6 8 4 8 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Co co o n e s u n s is t e m a d e p u b lica ció n e le ct ró n ico b a s a d o e n XML/ XS L o rie n t a d o a d o cu m e n t o s . Es
1 0 0 % Ja va y e s t á b a s a d o e n e s t á n d a re s . Ad e m á s e s p ro b a b le m e n t e e l fra m e wo rk d e e s t e t ip o
m á s m a d u ro y re co n o cid o . En e s t e t u t o ria l s e e xp lica co m o fu n cio n a y co m o p o d e m o s u t iliza rlo s
p a ra d e s a rro lla r a p lica cio n e s We b q u e p re s e n t e n la in fo rm a ció n e n HTML, PDF, WML, e t c.

I n t ro d u c c ió n a JS P
h t t p : / / www. ve re xt re m a d u ra . co m / m ig u e l/ js p
7 6 6 1 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Bre ve in t ro d u cció n a la p ro g ra m a ció n e n in t e rn e t co n JS P y s e rvle t s .

P e q u e ñ o t u t o r d e Ja v a
h t t p : / / u s u a rio s . t rip o d . e s / Ozit o / in d e x. h t m l
2 1 3 7 0 vis it a s | Pu n t u a ció n : ( 3 6 vo t o s ) Vo t a
Pe q u e ñ o t u t o r d e Ja va e n la q u e s e e s t u d ia n d e fo rm a m u y d id a ct ica y co m p re n s ib le d ife re n t e s
a s p e ct o s d e e s t e le n g u a je : s win g , t ra b a jo e n re d , fich e ro Ja r, m é t o d o s n a t ivo s , e t c. .

Tu t o ria l d e Ja v a d e Ag u s t in Fro u fe
h t t p : / / m e m b e rs . e s . t rip o d . d e / fro u fe /
1 5 1 5 1 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a
Es t u p e n d o t u t o ria l d e s o b re Ja va 1 . 2 d e Ag u s t in Fro u fe .

Th in k in g in Ja v a
h t t p : / / www. e cke lo b je ct s . co m / TIJ2 / in d e x. h t m l
1 3 4 4 0 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Un lib ro e xce le n t e ( ¡Mu ch o s a firm a n q u e e l m e jo r!) a ce rca d e Ja va . El m is m o s e p u e d e d e s ca rg a r
e n fo rm a t o t a lm e n t e g ra t u it a .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.java.html (5 de 5) [20/10/2002 18:12:51]


Programación en castellano. Direcciones. Entornos de desarrollo

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

En t o rn o s d e
d e s a rro llo
3 3 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re d is t in t o s e n t o rn o s d e p ro g ra m a ció n , h e rra m ie n t a s d e d e s a rro llo
rá p id o d e a p lica cio n e s ( RAD) , e t c. .

● . NET ( 2 )
● C+ + Bu ild e r ( 1 )
● De lp h i ( 1 5 )
● Ot ro s ( 1 )
● Po we r Bu ild e r ( 2 )
● Ve lá zq u e z Vis u a l ( 1 )
● Vis u a l Ba s ic ( 1 0 )
● Vis u a l C+ + ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.entornos.html [20/10/2002 18:12:53]


Programación en castellano. Direcciones. Entornos de desarrollo. Delphi

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

En t o rn o s d e
d e s a rro llo .
D e lp h i
1 5 d ire ccio n e s
De lp h i e s e l e n t o rn o d e d e s a rro llo d e Bo rla n d p a ra la p ro g ra m a ció n b a jo Win d o ws 9 5 / 9 8 / NT, b a s a d o
e n u n a va ria ció n d e l le n g u a je Pa s ca l lla m a d a Ob je ct Pa s ca l q u e co n vie rt e e s t e le n g u a je e n u n o
o rie n t a d o a o b je t o s . La m a yo ría d e e s t a s d ire ccio n e s s o n ig u a lm e n t e vá lid a s p a ra s u h e rra m ie n t a
h e rm a n a , C+ + Bu ild e r.

» EN ES TA P AGI N A
1 . Re p o s it o rio s d e co m p o n e n t e s
2 . Cu rs o s
3 . Ge n e ra le s
4 . Fo ro s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Clu b De lp h i

En o t ro s id io m a s
● To rry's De lp h i Pa g e s

Re p o s it o rio s d e c o m p o n e n t e s [ S u b ir]
4 d ire ccio n e s

D e lp h i Fre e S t u ff
h t t p : / / www. d e lp h ifre e s t u ff. co m
8 6 8 4 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Es t a e s la p á g in a p e rs o n a l d e Bra d S t o we rs , u n o d e lo s m e jo re s p ro g ra m a d o re s d e d ica d o s a la
p ro g ra m a ció n d e co m p o n e n t e s g ra t u it o s p a ra De lp h i. Co n t ie n e s u s co m p o n e n t e s , lo s d e a lg u n o s
co la b o ra d o re s y a lg u n o s p ro g ra m a s g ra t u it o s cre a d o s p o r e llo s .

D e lp h i S u p e r P a g e
h t t p : / / d e lp h i. icm . e d u . p l
8 3 3 1 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a

http://www.programacion.com/direcciones.delphi.html (1 de 4) [20/10/2002 18:12:57]


Programación en castellano. Direcciones. Entornos de desarrollo. Delphi

In fin it o s co m p o n e n t e s g ra t u it o s y s h a re wa re , m u ch o s d e e llo s co n có d ig o fu e n t e . Ad e m á s la we b
e s t á p e rfe ct a m e n t e e s t ru ct u ra d a d e m o d o q u e p u e d a s e n co n t ra r fá cilm e n t e lo q u e n e ce s it a s y
cu e n t a co n d ive rs o s m irro rs q u e a ce le ra n e l p ro ce s o d e b u s ca r y b a ja rs e co m p o n e n t e s .

Jo rd a n Ru s s e ll's S o ft w a re P a g e
h t t p : / / www. jo rd a n r. d h s . o rg /
4 5 3 2 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Pá g in a d e l p ro g ra m a d o r Jo rd a n Ru s s e ll, d o n d e e n co n t ra ré is s u fa m o s o co m p o n e n t e , To o lb a r'9 7 y
s o b re t o d o , e l p ro g ra m a g ra t u it o p a ra re a liza r in s t a la cio n e s In n o S e t u p .

To rry 's D e lp h i P a g e s
h t t p : / / www. t o rry. ru
4 8 7 1 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Alm a cé n d e co m p o n e n t e s , n o t a n e xt e n s o co m o De lp h i S u p e r Pa g e p e ro ig u a lm e n t e b ie n
cla s ifica d o . A ve ce s e s b u e n o m ira r a q u í p a ra e n co n t ra r lo m e jo r d e u n d e t e rm in a d o t ip o d e
co m p o n e n t e .

Cu rs o s [ S u b ir]
5 d ire ccio n e s

Cu rs o d e D e lp h i d e TS P w e b
h t t p : / / o rb it a . s t a rm e d ia . co m / ~ t s p we b / p ro g ra m a cio n . h t m
2 3 0 6 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Un a p e q u e ñ a in t ro d u cció n a De lp h i, e n fo rm a t o Wo rd . Es crit o p a ra De lp h i 3 , p u e d e q u e e n a lg u n a s
co s a s s e h a ya q u e d a d o o b s o le t o .

P o n g a u n a d ll ( I S AP I ) e n s u v id a .
h t t p : / / www. d t p la n . co m / g a rcia - cu e rvo / De lp h i. h t m
2 1 3 4 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Un p e q u e ñ o t u t o ria l q u e e xp lica p a s o a p a s o co m o re a liza r e xt e n s io n e s we b co n De lp h i 5 .

Eje rc ic io s Re s u e lt o s e n D e lp h i
h t t p : / / www. t e rra . e s / p e rs o n a l/ re s fe r/ d e lp h i
1 2 8 0 3 vis it a s | Pu n t u a ció n : ( 2 0 vo t o s ) Vo t a
Má s d e 4 0 e je rcicio s re s u e lt o s co m e n za n d o d e s d e ce ro y p a s a n d o p o r t a b la s d e l t ip o DBF, a s í
co m o b a s e s d e d a t o s d e Acce s s .

Cu rs illo d e D e lp h i
h t t p : / / www. a rra kis . e s / ~ e b 1 ft s / p rim e ra . h t m
1 1 8 4 3 vis it a s | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a
Cu rs o p a ra in icia rs e e n e s t o d e la p ro g ra m a ció n e n De lp h i.

Cu rs o d e Cre a c ió n d e Co m p o n e n t e s e n D e lp h i
h t t p : / / p e rs o n a l. re d e s t b . e s / re vu e lt a ro ch e / ccin d . h t m
6 9 4 0 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Ma g n ífico cu rs o q u e a m p lía la in fo rm a ció n q u e s e d a e n la m a yo r p a rt e d e la s we b y lib ro s s o b re la
cre a ció n d e co m p o n e n t e s .

http://www.programacion.com/direcciones.delphi.html (2 de 4) [20/10/2002 18:12:57]


Programación en castellano. Direcciones. Entornos de desarrollo. Delphi

Ge n e ra le s [ S u b ir]
5 d ire ccio n e s

D e lp h i He a v e n
h t t p : / / www. d e lp h ih e a ve n . co m
6 5 6 5 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
In t e re s a n t e p u n t o d e p a rt id a p a ra p ro g ra m a d o re s e n De lp h i. Cu rs o s s o b re De lp h i y Pa s ca l,
a rt ícu lo s , có d ig o fu e n t e , co m p o n e n t e s , e n la ce s e in clu s o u n a re vis t a p ro p ia .

Bo rla n d Es p a ñ a
h t t p : / / www. b o rla n d . e s
4 8 9 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Pá g in a e n e s p a ñ o l d e Bo rla n d , a lg o m á s va cía p e ro e n n u e s t ro id io m a .

Clu b D e lp h i
h t t p : / / www. clu b d e lp h i. co m
8 5 3 0 vis it a s | Pu n t u a ció n : ( 3 2 vo t o s ) Vo t a
Es t e e s e l p u n t o d e e n cu e n t ro d e lo s p ro g ra m a d o re s d e De lp h i e n ca s t e lla n o . Tru co s , e n la ce s ,
co m p o n e n t e s , . . .

Bo rla n d
h t t p : / / www. b o rla n d . co m
3 8 5 5 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Pá g in a d e Bo rla n d ( o In p ris e ) , cre a d o ra d e De lp h i y s u h e rm a n o C+ + Bu ild e r.

P ro je c t JED I
h t t p : / / www. d e lp h i- je d i. o rg
4 5 1 2 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Ho g a r d e d ive rs o s p ro ye ct o s e n t re lo s q u e d e s t a ca n la co n ve rs ió n d e d ive rs o s APIs e xis t e n t e s e n
Win d o ws p a ra p o d e r s e r u t iliza d o s e n De lp h i, co m o Dire ct X y Op e n GL.

Fo ro s [ S u b ir]
1 d ire cció n

Fo ro d e D e lp h i e n c a s t e lla n o
h t t p : / / e s . g ro u p s . ya h o o . co m / g ro u p / De lp h iGro u p
1 9 6 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Gru p o d e d is cu s ió n d e De lp h i e n ca s t e lla n o ( a cce s ib le p o r we b o e m a il) p a ra la a yu d a m u t u a y e l
in t e rca m b io d e in fo rm a ció n e n t re la co m u n id a d p ro g ra m a d o ra q u e u t iliza e s t e e n t o rn o , s e a cu a l
s e a s u n ive l.

http://www.programacion.com/direcciones.delphi.html (3 de 4) [20/10/2002 18:12:57]


Programación en castellano. Direcciones. Entornos de desarrollo. Delphi

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.delphi.html (4 de 4) [20/10/2002 18:12:57]


Programación en castellano. Direcciones. Entornos de desarrollo. Visual Basic

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

En t o rn o s d e
d e s a rro llo .
Vis u a l Ba s ic
1 0 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re Vis u a l Ba s ic

» EN ES TA P AGI N A
1 . Art ícu lo s
2 . Tu t o ria le s
3 . Có d ig o
4 . Ge n e ra le s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● La p á g in a d e l Vis u a l Ba s ic ( e l Gu ille )
● Co d ig o fu e n t e
● Ca n a l Vis u a l Ba s ic
● Vis u a l Ba s ic Exp e rt o

Art íc u lo s [ S u b ir]
1 d ire cció n

VB - w e b d e p ro g ra m a c ió n
h t t p : / / www. t e rra . e s / p e rs o n a l/ jrca b re ra
1 3 7 8 1 vis it a s | Pu n t u a ció n : ( 1 6 vo t o s ) Vo t a
Art ícu lo s p rin cip a lm e n t e ce n t ra d o s e n a p lica cio n e s d is t rib u id a s ( DNA) e n VB. . . MTS , COM, COM+ ,
t ru co s , e n la ce s . . . Pa ra lo s q u e ya d o m in a n e l Vis u a l Ba s ic.

http://www.programacion.com/direcciones.visualbasic.html (1 de 3) [20/10/2002 18:13:00]


Programación en castellano. Direcciones. Entornos de desarrollo. Visual Basic

Tu t o ria le s [ S u b ir]
2 d ire ccio n e s

I s la P ro g ra m a c ió n
h t t p : / / www. is la p ro g ra m a cio n . co m
9 5 7 7 vis it a s | Pu n t u a ció n : ( 8 1 vo t o s ) Vo t a
Dis p o n e d e u n cu rs o p a ra in icia rs e e n Vis u a l Ba s ic, d e s d e va ria b le s y o p e ra d o re s h a s t a a cce s o a
b a s e s d e d a t o s . Ad e m á s d is p o n e d e fo ro d e co n s u lt a y e n la ce s a o t ra s p á g in a s .

Ap re n d a Vis u a l Ba s ic 6 . 0
h t t p : / / fca p ra . ce it . e s / Ayu d a In f/ Ap re n d a In f/ Vis u a lBa s ic6 / vb a s ic6 0 . p d f
8 3 3 6 6 vis it a s | Pu n t u a ció n : ( 1 0 8 vo t o s ) Vo t a
Cu rs o d e Vis u a l Ba s ic 6 . 0 e n fo rm a t o PDF d e s d e la Es cu e la S u p e rio r d e In g e n ie ro s In d u s t ria le s d e
S a n S e b a s t iá n ( Un ive rs id a d d e Na va rra ) .

Có d ig o [ S u b ir]
2 d ire ccio n e s

Co d ig o fu e n t e
h t t p : / / www. t e rra . e s / p e rs o n a l2 / s fo rt iz/
5 3 5 6 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
Alg u n o s e je m p lo s co n có d ig o fu e n t e e n VB, re la cio n a d o s p rin cip a le m e n t e co n b a s e d e d a t o s .

Có d ig o Fu e n t e d e Vis u a l Ba s ic
h t t p : / / it . in t e rn a t io n s . n e t / co d ig o vb
1 1 0 2 6 vis it a s | Pu n t u a ció n : ( 1 7 vo t o s ) Vo t a
Ru t in a s , e je m p lo s y co d ig o fu e n t e d e Vis u a l Ba s ic.

Ge n e ra le s [ S u b ir]
5 d ire ccio n e s

Ca n a l Vis u a l Ba s ic
h t t p : / / www. ca n a lvis u a lb a s ic. n e t /
8 1 6 6 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
Un a b u e n a we b co n cu rs o s , n o s ó lo d e Vis u a l Ba s ic, s in o t a m b ié n d e m e t o d o lo g ía , S QL S e rve r,
S QL, p ro g ra m a ció n o rie n t a d a a o b je t o s , e t c. . Tie n e t a m b ié n fo ro , e je m p lo s co n có d ig o fu e n t e y
t ru co s .

La p á g in a d e l Vis u a l Ba s ic ( e l Gu ille )
h t t p : / / g u ille . co s t a s o l. n e t /
3 6 9 9 9 vis it a s | Pu n t u a ció n : ( 1 3 0 vo t o s ) Vo t a

http://www.programacion.com/direcciones.visualbasic.html (2 de 3) [20/10/2002 18:13:00]


Programación en castellano. Direcciones. Entornos de desarrollo. Visual Basic

La m e jo r We b s o b re Vis u a l Ba s ic e n ca s t e lla n o . Co n g ra n ca n t id a d d e in fo rm a ció n y a ct u a liza d a d e


fo rm a co n s t a n t e . Ma n t e n id a p o r e l Gu ille . De vis it a in d is p e n s a b le .

La w e b d e Os c a r Gro s s o
h t t p : / / www. g e o cit ie s . co m / vb g ro s s o /
1 4 0 3 8 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
Pe q u e ñ a we b co n a lg u n o s t ru co s y d ive rs o s co n t ro le s OCX s a ca d o s d e In t e rn e t .

Vis u a l Ba s ic 6
h t t p : / / www. vis u a lb 6 . co m /
3 7 4 4 6 vis it a s | Pu n t u a ció n : ( 2 5 vo t o s ) Vo t a
In t e re s a n t e we b a rg e n t in a , co n m u lt it u d d e a rt ícu lo s d is e ñ a d o s p a ra re s o lve r d u d a s fre cu e n t e s .

Vis u a l Ba s ic Ex p e rt o
h t t p : / / www. e id o s . e s / Ve XPERT/
3 2 4 0 6 vis it a s | Pu n t u a ció n : ( 5 4 vo t o s ) Vo t a
We b co n g ra n ca n t id a d d e a rt ícu lo s re la cio n a d a s co n Vis u a l Ba s ic, o rg a n iza d o s e n d ife re n t e s
a p a rt a d o s : Ba s e s d e d a t o s , Ge n e ra le s , Co m p o n e n t e s , Ma t e m á t ica s e In g e n ie ria , e t c. Ma n t e n id a
p o r Ha rve y Tria n a .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.visualbasic.html (3 de 3) [20/10/2002 18:13:00]


Programación en castellano. Direcciones. Lenguajes de script

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
d e s c rip t
4 2 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re d is t in t o s le n g u a je s d e s crip t , o le n g u a je s d e m a cro .

● Ja va s crip t ( 2 7 )
● Pe rl ( 1 0 )
● Pyt h o n ( 5 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.script.html [20/10/2002 18:13:02]


http://www.programacion.com/direcciones.perl.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
d e s c rip t .
P e rl
1 0 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s co n d o cu m e n t a cio n ( t u t o ria le s , a rt ícu lo s , e je m p lo s , e t c. . ) s o b re Pe rl, e l
le n g u a je d e s crip t p a ra Un ix m á s p o p u la r.

» EN ES TA P AGI N A
1 . Arch ivo s
2 . Ge n e ra le s
3 . Tu t o ria le s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Pe rl Ch ile
● Pe rl 5 . 0 : Un le n g u a je m u lt iu s o
● Ce n t ro d e Re cu rs o s Pe rl

Arc h iv o s [ S u b ir]
1 d ire cció n

Co m p re h e n s iv e P e rl Arc h iv e N e t w o rk ( CP AN )
h t t p : / / www. cp a n . o rg
4 4 0 1 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
In m e n s o a rch ivo ( 7 8 6 Mb e n e s t o s m o m e n t o s ) , co n in fo rm a ció n , h e rra m ie n t a s , lib re ría s , e t c. .

http://www.programacion.com/direcciones.perl.html (1 de 3) [20/10/2002 18:13:04]


http://www.programacion.com/direcciones.perl.html

Ge n e ra le s [ S u b ir]
5 d ire ccio n e s

I n d ic e P ERL
h t t p : / / lm s a iza rro b a . t rip o d . co m / In d ice PERL. h t m l
8 1 7 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Pe q u e ñ a p á g in a d o n d e s e in d ica d o n d e co n s e g u ir PERL y s e d a n a lg u n o s e je m p lo s d e u s o .

Ce n t ro d e Re c u rs o s P e rl
h t t p : / / in fo rm a t ica . kip e lh o u s e . co m / p e rl. h t m l
3 5 4 8 vis it a s | Pu n t u a ció n : ( 2 0 vo t o s ) Vo t a
Es s ó lo u n a p á g in a ( lit e ra lm e n t e ) p e ro lle n a d e in fo rm a ció n . In clu ye a p u n t e s , cu rs o s , m a n u a le s ,
b o ls a d e e m p le o , y u n t a b ló n d e p re g u n t a s y re s p u e s t a s .

Có d ig o P e rl
h t t p : / / www. t re s . co m / p e rl/
6 9 8 8 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Ace p t a b le p u n t o d e p a rt id a p a ra a q u e llo s q u e d e s e e n u t iliza r Pe rl p a ra e l d e s a rro llo d e CGIs .

P e rl Ch ile
h t t p : / / www. p e rl. cl
6 6 4 8 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Exce le n t e p á g in a s o b re Pe rl, co n n o t icia s , a rt ícu lo s y u n p e q u e ñ o y t u t o ria l d e e s t e le n g u a je .

P á g in a o fic ia l d e P e rl
h t t p : / / www. p e rl. co m / p u b
4 7 6 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Ap a rt e d e p o d e r o b t e n e r la s ú lt im a s ve rs io n e s d e e s t e le n g u a je , co n t ie n e la fa m o s a 'Pe rl
Re fe re n ce ', d o n d e p o d rá s o b t e n e r t o d a cla s e d e re cu rs o s re la cio n a d o s co n Pe rl.

Tu t o ria le s [ S u b ir]
4 d ire ccio n e s

P e rl 5 . 0 : Un le n g u a je m u lt iu s o
h t t p : / / www. ie s p a n a . e s / p e rl- e s
4 3 0 2 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a
Co m p le t o t u t o ria l q u e in clu ye t e m a s co m o a cce s o a BBDD, CGI, XML, y p ro g ra m a ció n o rie n t a d a a
o b je t o s . S in e m b a rg o , p ro fu n d iza p o co e n ca d a t e m a , re s u lt a n d o b a s t a n t e a rd u a e n o ca s io n e s la
co m p re n s ió n d e lo s t e m a s .

Tu t o ria l d e D BI
h t t p : / / g e n e u ra . u g r. e s / ~ ja vi/ d b i/ in d e x. h t m
5 1 6 1 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a

http://www.programacion.com/direcciones.perl.html (2 de 3) [20/10/2002 18:13:04]


http://www.programacion.com/direcciones.perl.html

Co m p le t ís im o t u t o ria l d e DBI. DBI ( In t e rfa z d e Ba s e d e Da t o s - Da t a Ba s e In t e rfa z- ) e s u n m ó d u lo


d e Pe rl p a ra a cce s o a b a s e s d e d a t o s , e s d e cir, m e d ia n t e DBI p o d re m o s a cce d e r a b a s e s d e d a t o s
co n n u e s t ro s s crip t s e n e n Pe rl

I n t ro d u c c ió n a l le n g u a je P e rl
h t t p : / / www. u co . e s / ~ i2 2 o s ca v/ t u t o r. h t m l
8 6 4 3 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
An t ig u o t u t o ria l co n t e n id o e n u n a s o la p á g in a . Es t á , p u e s e s o , u n p o co a n t ig u o , y p e q u e ñ o .

Tu t o ria l d e P e rl
h t t p : / / www. g ra n a ve n id a . co m / p e rl/
1 1 0 6 1 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
At ra ct ivo t u t o ria l m u y in d ica d o p a ra in icia rs e e n e l e s t u d io d e Pe rl, ya q u e a b a rca d e s d e e l p ro ce s o
d e in s t a la ció n h a s t a e l u s o d e t u b e ría s y e xp re s io n e s re g u la re s . Dis p o n e d e u n a ve rs ió n
co m p rim id a p a ra lle va rs e lo a ca s a .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.perl.html (3 de 3) [20/10/2002 18:13:04]


Programación en castellano. Direcciones. Lenguajes de script. Javascript

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
d e s c rip t .
Ja v a s c rip t
2 7 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s co n d o cu m e n t a cio n ( t u t o ria le s , a rt ícu lo s , e je m p lo s , e t c. . ) s o b re
Ja va s crip t y JS crip t .

» EN ES TA P AGI N A
1 . Dire ccio n e s d e ca ra ct e r g e n e ra l
2 . Ru t in a s y e je m p lo s e n Ja va s crip t
3 . Es p e cifica cio n e s y re fe re n cia s
4 . Tu t o ria le s
5 . Art icu lo s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● / * El có d ig o * /
● Ta lle r We b
● Ga m a ro d Ja va S crip t
● S crip t o n a rio d e via - m o d e m . co m

En o t ro s id io m a s
● Ma n u a l d e re fe re n cia d e Ne t s ca p e
● Do c Ja va s crip t

D ire c c io n e s d e c a ra c t e r g e n e ra l [ S u b ir]
3 d ire ccio n e s

/ * El c ó d ig o * /
h t t p : / / www. e lco d ig o . n e t /
2 0 8 1 2 vis it a s | Pu n t u a ció n : ( 2 2 vo t o s ) Vo t a
We b d e d ica d a p rin cip a lm e n t e a a lb e rg a r t u t o ria le s y t ru co s p a ra Ja va s crip t , a u n q u e p o s e e t a m b ié n
u n a s e cció n p a ra a yu d a r a lo s u s u a rio s d e Ne t s ca p e . Un p o co va cía a ú n , p e ro p ro m e t e .

D o c Ja v a s c rip t
h t t p : / / www. we b re fe re n ce . co m / d o cjs

http://www.programacion.com/direcciones.javascript.html (1 de 5) [20/10/2002 18:13:11]


Programación en castellano. Direcciones. Lenguajes de script. Javascript

1 1 6 2 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
El m e jo r lu g a r p a ra e l e xp e rt o , p u e s p o n e a t u d is p o s ició n a rt ícu lo s d e p e rio d icid a d q u in ce n a l y u n
t ru co n u e vo ca d a d ía ( p e q u e ñ it o , e s o s í) . Un a s p á g in a s q u e q u e rría s g u a rd a r e n t e ra s e n t u d is co
d u ro .

W e b m o n k e y p ro g ra m m in g : Ja v a s c rip t
h t t p : / / www. h o t wire d . co m / we b m o n ke y/ p ro g ra m m in g / ja va s crip t /
7 4 3 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Dis p o n e d e u n p a r d e e xce le n t e s t u t o ria le s y d e u n g ra n re p o s it o rio d e ru t in a s e n Ja va s crip t .

Ru t in a s y e je m p lo s e n Ja v a s c rip t [ S u b ir]
9 d ire ccio n e s

m a p b Dh tm l
h t t p : / / p e rs o . wa n a d o o . e s / m a p in t a n e l/ m a p b d h t m l/ e s / in d e x. h t m l
1 1 0 7 0 vis it a s | Pu n t u a ció n : ( 1 9 vo t o s ) Vo t a
Pá g in a co n s crip t s , q u e p o r a h o ra s ó lo in co rp o ra u n m e n ú d e s p le g a b le co n s o p o rt e p a ra m ú lt ip le s
m e n ú s p o r p á g in a , p ro fu n d id a d va ria b le y s u u t iliza ció n co n fra m e s .

Ga m a ro d Ja v a S c rip t
h t t p : / / www. g a m a ro d . co m . a r
2 0 6 6 5 vis it a s | Pu n t u a ció n : ( 4 3 vo t o s ) Vo t a
Re cu rs o s p a ra We b Ma s t e rs , e s t e s it io co n t ie n e m á s d e 5 0 Ru t in a s Ja va s crip t , e n ca s t e lla n o y
Gra t u it a s , lis t a s p a ra u s a r e n t u we b . Ad e m á s in clu ye n e je m p lo s y e xp lica cio n e s p a ra s u co rre ct o
u s o . Id e a l p a ra la s p e rs o n a s q u e re cie n s e in icia n e n e l d is e ñ o d e p á g in a s we b .

Lib re ría s d e Ja v a S c rip t


h t t p : / / ja va s crip t . ra u ln d . co m
2 1 9 7 0 vis it a s | Pu n t u a ció n : ( 2 7 vo t o s ) Vo t a
En e s t a p á g in a e n co n t ra rá s lib re ría s * . js p a ra d e s ca rg a r y u t iliza r g ra t u it a m e n t e

Ja v a S c rip t t o t h e Bo n e !
h t t p : / / js b o n e . fa d la n . co m
9 5 8 8 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Eje m p lo s p rá ct ico s ( p u b lica d o s e n la - e xt in t a - re vis t a Ne t m a n i@)

Bib lio t e c a d e CGI 's y ru t in a s Ja v a s c rip t


h t t p : / / www. we b viva . co m / b ib lio t e ca
1 4 0 9 1 vis it a s | Pu n t u a ció n : ( 1 6 vo t o s ) Vo t a
Un s e ñ o r b a rb u d o n o s g u ia rá p o r va ria s ru t in a s e n Ja va s crip t s e p a ra d a s p o r g ru p o s . No t ie n e
d e m a s ia d a s , p e ro la m a yo ría s o n re co m e n d a b le s .

S c rip t o n a rio d e v ia - m o d e m . c o m
h t t p : / / www. via - m o d e m . co m / s crip t io n a rio /
1 2 9 5 9 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a

http://www.programacion.com/direcciones.javascript.html (2 de 5) [20/10/2002 18:13:11]


Programación en castellano. Direcciones. Lenguajes de script. Javascript

Exce le n t e re co le cció n d e s crip t s , b ie n o rg a n iza d o s e in t e re s a n t e s . Ta m b ié n d is p o n d e d e ru t in a s


DHTML y a p p le t s Ja va .

Ta lle r W e b
h t t p : / / h t m l. p ro g ra m a cio n . n e t / t we b . p h p
1 4 0 8 6 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
Nu e s t ro t a lle r we b , p e s e a in clu ir a rt ícu lo s d e o t ro s t e m a s , e s t á e n fo ca d o p rin cip a lm e n t e a a p o rt a r
ru t in a s y e je m p lo s p rá ct ico s e n Ja va s crip t .

Eje m p lo s d e Ja v a S c rip t
h t t p : / / www. js - e xa m p le s . co m / js /
4 1 3 4 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Un b u e n n ú m e ro d e s crip t s . S in e m b a rg o , n o re s u lt a d e m a s ia d o có m o d a , p u e s t o q u e la s
ca t e g o ría s n o e s t á s n m u y b ie n e s co g id a s .

ja v a s c rip t s . c o m
h t t p : / / www. ja va s crip t s . co m
1 0 6 8 3 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Un e n o rm e re p o s it o rio d e t ru co s y p e q u e ñ o s p ro g ra m a s e n Ja va s crip t . A p e s a r d e e s t a r b ie n
e s t ru ct u ra d o , s u m a yo r p ro b le m a e s p re cis a m e n t e s u t a m a ñ o : lo n o rm a l e s q u e e n cu e n t re s
d e m a s ia d o s s crip t s ig u a le s y e n o ca s io n e s lo q u e n e ce s it a s re s u lt a d ifícil d e h a lla r.

Es p e c ific a c io n e s y re fe re n c ia s [ S u b ir]
5 d ire ccio n e s

D OM d e Mic ro s o ft I n t e rn e t Ex p lo re r
h t t p : / / m s d n . m icro s o ft . co m / wo rks h o p / a u t h o r/ o m / d o c_ o b je ct . a s p
4 7 3 4 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
En e s t a we b e s t á la g u ía d e l DOM ( Do cu m e n t Ob je ct Mo d e l) d e l Exp lo re r d e Micro s o ft .
De s a fo rt u n a d a m e n t e n o d is p o n e d e o p ció n p a ra b a ja rt e lo .

Es p e c ific a c ió n d e c o m p o n e n t e s ECMAS c rip t


h t t p : / / www. e cm a . ch / s t a n d / ECMA- 2 9 0 . h t m
4 9 2 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Am b o s n a ve g a d o re s h a n in t e n t a d o co lo ca r s o lu cio n e s p ro p ie t a ria s a l p ro b le m a d e lo s co m p o n e n t e s
Ja va s crip t . En ju n io s e a p ro b ó u n e s t á n d a r o ficia l ECMA q u e re g u la d ich o s co m p o n e n t e s , p e ro a ú n
n o e s s o p o rt a d o p o r n in g ú n n a ve g a d o r.

Es p e c ific a c ió n ECMAS c rip t


h t t p : / / www. e cm a . ch / s t a n d / ECMA- 2 6 2 . h t m
4 9 5 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Es t a e s p e cifica ció n re g u la e l le n g u a je b a s e d e Ja va s crip t . Am b o s n a ve g a d o re s s o n co m p a t ib le s co n
d ich a e s p e cifica ció n . De t o d o s m o d o s , e s d ifícil d e le e r, a s í q u e e s m e jo r le e r la re fe re n cia d e
JS crip t d e Micro s o ft p a ra s a b e r q u é s o p o rt a y q u é n o s o p o rt a ECMAS crip t .

Ma n u a l d e re fe re n c ia d e Mic ro s o ft
h t t p : / / m s d n . m icro s o ft . co m / s crip t in g / d e fa u lt . h t m
5 0 4 2 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a

http://www.programacion.com/direcciones.javascript.html (3 de 5) [20/10/2002 18:13:11]


Programación en castellano. Direcciones. Lenguajes de script. Javascript

En e s t a we b e n co n t ra rá s e l Ma n u a l d e re fe re n cia d e la ve rs ió n 5 . 0 d e JS crip t , e l n o m b re q u e
re cib e e l Ja va s crip t u t iliza d o e n lo s p ro d u ct o s d e Micro s o ft . La m e n t a b le m e n t e s ó lo fija s u a t e n ció n
e n e l le n g u a je b a s e ( co m ú n a a m b o s n a ve g a d o re s ) y s e o lvid a d e l DOM, o m o d e lo d e o b je t o s d e l
d o cu m e n t o . Te lo p u e d e s b a ja r e n fo rm a t o CHM.

Ma n u a l d e re fe re n c ia d e N e t s c a p e
h t t p : / / d e ve lo p e r. n e t s ca p e . co m / d o cs / m a n u a ls / js / clie n t / js g u id e / in d e x. h t m
6 2 4 9 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Ma n u a l d e re fe re n cia d e la ve rs ió n 1 . 3 d e l Ja va s crip t u t iliza d o p o r lo s n a ve g a d o re s d e Ne t s ca p e .
S e p u e d e b a ja r e n fo rm a t o ZIP y PDF y re s u lt a m u y co m p le t o e in s t ru ct ivo . S u s ú n ico s p ro b le m a s
s o n e s t a r e n in g lé s y h a b la r s ó lo d e lo s n a ve g a d o re s d e Ne t s ca p e .

Tu t o ria le s [ S u b ir]
7 d ire ccio n e s

Tu t o ria l Ja v a S c rip t
h t t p : / / www. ie s p a n a . e s / cn la s ro za s / t u t js / in d e x. h t m l
2 1 1 2 9 vis it a s | Pu n t u a ció n : ( 1 9 vo t o s ) Vo t a
Tu t o ria l d e Ja va S crip t q u e e m p ie za d e s d e ce ro y t e rm in a e n la cre a ció n a va n za d a d e o b je t o s .
Re co m e n d a d o a p rin cip ia n t e s y a lo s q u e q u ie ra n m e jo ra r s u s t é cn ica s .

Tu t o ria l d e Ja v a s c rip t e n Te rra


h t t p : / / www. t e rra . co m . a r/ ca n a le s / t e cn o lo g ia / 1 1 / 1 1 8 2 3 . h t m l
9 0 2 8 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Tu t o ria l a ce p t a b le a u n q u e a lg o p a rco . Es o s í, e s t á e n e s p a ñ o l y d is p o n e d e e je m p lo s b a s t a n t e
a p ro p ia d o s p a ra p rin cip ia n t e s .

Cu rs o d e Ja v a s c rip t 1 . 2
h t t p : / / h t m l. p ro g ra m a cio n . n e t / js / t it js . h t m l
1 9 5 8 2 vis it a s | Pu n t u a ció n : ( 1 7 vo t o s ) Vo t a
In t ro d u cció n a l Ja va s crip t q u e , a u n q u e e s crit a e n p rin cip io p a ra s e r u t iliza d a p o r u s u a rio s d e
Ne t s ca p e , h a s id o a d a p t a d a p a ra fu n cio n a r co n Exp lo re r.

I n t ro d u c c ió n a Ja v a s c rip t , d e S t e p h a n Ko c h
h t t p : / / 2 0 0 . 2 5 . 9 . 3 / e n la ce s / ja va s crip t / in d e x. h t m l
1 0 6 4 9 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Tra d u cció n d e l q u e p o s ib le m e n t e s e a e l m a n u a l clá s ico d e Ja va s crip t m á s fa m o s o e n In t e rn e t .
Mu ch o s a p re n d im o s co n la ve rs ió n e n in g lé s d e e s t e t u t o ria l, cu yo p rin cip a l p ro b le m a e s h a b e rs e
q u e d a d o a lg o a n t icu a d o .

Ja v a s c rip t fo r t h e t o t a l n o n - p ro g ra m m e r
h t t p : / / www. we b t e a ch e r. co m / ja va t o u r/ fra m e h o l. h t m
4 5 7 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Ig n o ro s i lo s q u e n o s e p a n p ro g ra m a r s a ca rá n t a n t o p ro ve ch o d e e s t e cu rs o co m o a u g u ra s u
n o m b re , p e ro s í q u e e s u n a b u e n a in t ro d u cció n a Ja va s crip t .

Th e Ja v a s c rip t P rim e rs

http://www.programacion.com/direcciones.javascript.html (4 de 5) [20/10/2002 18:13:11]


Programación en castellano. Direcciones. Lenguajes de script. Javascript

h t t p : / / www. h t m lg o o d ie s . co m / p rim e rs / js p
6 7 8 3 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Un m a n u a l q u e p e rm it e a p re n d e r Ja va s crip t e n 3 0 le ccio n e s . Mu y b ie n e s t ru ct u ra d o , e xp o n e ca d a
co n ce p t o co n u n e je m p lo y u n e je rcicio p a ra q u e e l le ct o r a s ie n t e s u s co n o cim ie n t o s .

Vo o d o o 's I n t ro t o Ja v a s c rip t , d e S t e p h a n Ko c h
h t t p : / / ru m m e lp la t z. u n i- m a n n h e im . d e / ~ s ko ch / js / t u t o ria l. h t m
1 0 2 3 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
El clá s ico s e a ct u a liza , a u n q u e s ó lo e n in g lé s . Lle g a a t ra t a r t e m a s d e HTML d in á m ico e n u n
le n g u a je co n cis o y co n cre t o . Te lo p u e d e s b a ja r e n HTML, PS y PDF.

Art ic u lo s [ S u b ir]
3 d ire ccio n e s

Art íc u lo e n Ma e s t ro s d e l W e b s o b re I n t e rn e t Ex p lo re r 5
h t t p : / / q u ik. g u a t e . co m / cvd h s / we b m a s t e rs / ie 5 . s h t m l
4 3 6 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
In t e re s a n t e a rt ícu lo s o b re la s e xt e n s io n e s re a liza d a s a l m o d e lo d e DHTML d e Exp lo re r e n s u
ve rs ió n 5 .

Art íc u lo d e D a n n y Go o d m a n s o b re e l s o p o rt e d e l W 3 C D OM e n lo s n a v e g a d o re s d e q u in t a
g e n e ra c ió n .
h t t p : / / d e ve lo p e r. ip la n e t . co m / vie ws o u rce / g o o d m a n _ cro s s / g o o d m a n _ cro s s . h t m
4 9 9 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Au n q u e a t a ñ a p rin cip a lm e n t e a l DHTML, e l Do cu m e n t Ob je ct Mo d e l va a va ria r la m a n e ra e n q u e
a cce d e m o s a la s p ro p ie d a d e s d e l d o cu m e n t o d e s d e Ja va s crip t , a s í q u e co n vie n e e s t a r p re p a ra d o s
p a ra e l m is m o . Es t e a rt ícu lo e s u n a b u e n a in t ro d u cció n .

Art íc u lo e n I n q u iry d e S h e lle y P o w e rs s o b re Ja v a s c rip t y N e t s c a p e 5 . 0


h t t p : / / www. in q u iry. co m / t e ch t ip s / d h t m l_ p ro / 1 0 m in / 1 0 m in 1 2 9 9 / 1 0 m in 1 2 9 9 . a s p
3 8 6 6 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art ícu lo q u e n o s e xp lica có m o a d a p t a r n u e s t ra s ru t in a s e n Ja va s crip t p a ra q u e fu n cio n e n
co rre ct a m e n t e e n e l fu t u ro Ne t s ca p e 5 .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.javascript.html (5 de 5) [20/10/2002 18:13:11]


Programación en castellano. Direcciones. Entretenimiento

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . En t re t e n im ie n t o Nuestras zonas


1 9 d ire ccio n e s
En la ce s a s it io s re la cio n a d o s co n p ro g ra m a ció n e n fo ca d a a l o cio : ju e g o s , d e m o s , e t c. . .

● De m o s ( 9 )
● Ju e g o s ( 1 0 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.entretenimiento.html [20/10/2002 18:13:15]


Programación en castellano. Direcciones. Entretenimiento. Juegos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . En t re t e n im ie n t o . Nuestras zonas

Ju e g o s
1 0 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re p ro g ra m a ció n d e vid e o ju e g o s .

» EN ES TA P AGI N A
1 . Cu rs o s
2 . Ge n e ra le s
3 . Re vis t a s

» I MP RES CI N D I BLE VI S I TAR


En o t ro s id io m a s
● Th e Ga m e Pro g ra m m in g Me g a s it e

Cu rs o s [ S u b ir]
2 d ire ccio n e s

CP V ( Cu rs o d e P ro g ra m a c ió n d e Vid e o ju e g o s )
h t t p : / / www. a rra kis . e s / ~ p p rie g o / s o ft p a co / win cp v. h t m
1 1 7 0 9 vis it a s | Pu n t u a ció n : ( 1 6 vo t o s ) Vo t a
To d o u n clá s ico d e n t ro d e Fid o n e t , e s t e cu rs o o fre cía u n a e xce le n t e in t ro d u cció n a l m u n d o d e la
p ro g ra m a ció n d e vid e o ju e g o s b a jo MS - DOS . Au n q u e a n t ig u o , d e s t a ca s u in co n t e s t a b le ca lid a d y la
in clu s ió n d e l có d ig o fu e n t e d e cu a t ro ju e g o s co m p le t o s . Ah o ra e s t á d is p o n ib le co m p le t o ( e ra
s h a re wa re ) p e ro la p á g in a o ficia l p a re ce h a b e r d e s a p a re cid o .

Cu rs o d e D I V Ga m e s S t u d io
h t t p : / / www. a re a in t . co m / Cu rs o _ Div. h t m
7 9 8 9 vis it a s | Pu n t u a ció n : ( 1 5 vo t o s ) Vo t a
Cu rs o s o b re e l e n t o rn o d e p ro g ra m a ció n d e vid e o ju e g o s DIV Ga m e s S t u d io , q u e p e rm it e la
cre a ció n d e lo s m is m o s d e u n a m a n e ra m á s rá p id a y s e n cilla , s i b ie n e s cie rt o q u e n o re s u lt a ú t il
p a ra p ro g ra m a r p ro fe s io n a lm e n t e .

http://www.programacion.com/direcciones.juegos.html (1 de 3) [20/10/2002 18:13:27]


Programación en castellano. Direcciones. Entretenimiento. Juegos

Ge n e ra le s [ S u b ir]
7 d ire ccio n e s

W a t e rS h ip D re a m s
h t t p : / / ws d 2 0 0 2 . ie s p a n a . e s / ws d 2 0 0 2 / in d e x3 . h t m
1 7 6 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
We b co n t ru co s y re cu rs o s d e s t in a d a , p rin cip a lm e n t e , a l d e s a rro llo d e ju e g o s e n DIV2 , a u n q u e
t a m b ié n in clu ye re cu rs o s p a ra e n t o rn o s co m o De lp h i o Da rk Ba s ic.

Art e b in a rio
h t t p : / / a rt e b in a rio . cjb . n e t
2 2 4 8 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Pá g in a e s t á o rie n t a d a a la s p e rs o n a s q u e p ro g ra m a n vid e o ju e g o s e n m ú lt ip le s p la t a fo rm a s .
In clu ye u n cu rs o d e p ro g ra m a ció n d e vid e o ju e g o s e n Alle g ro y C+ + .

D X La b
h t t p : / / www. g e o cit ie s . co m / d xla b /
4 5 2 0 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
Re cu rs o s y có d ig o fu e n t e s o b re p ro g ra m a ció n d e Dire ct X 8 b a jo De lp h i.

RE g e n ia l. c o m : D e s a rro lla d o re s
h t t p : / / www. re g e n ia l. co m / g a m e p ro g ra m m in g /
6 0 4 0 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Pe q u e ñ a we b d e d ica d a p rin cip a lm e n t e a lo s e n g in e 3 D d e lo s ju e g o s , co n p e q u e ñ o s a rt ícu lo s q u e
e xp lica n lo s p rim e ro s p a s o s e n Dire ct X y Op e n GL.

Ga m e p ro g ra m m in g a n d g ra p h ic s p ro g ra m m in g
h t t p : / / g a m e p ro g ra m m e r. co m /
3 8 3 8 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
We b co n a rt ícu lo s s o b re p ro g ra m a ció n g rá fica y d e vid e o ju e g o s . De s g ra cia d a m e n t e , s o n p o co s lo s
a rt ícu lo s y a d e m á s a lg o a n t ig u o s .

Th e Ga m e P ro g ra m m in g Me g a s it e
h t t p : / / www. p e rp le xe d . co m / GPMe g a / in d e x. h t m
8 7 7 3 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Fa b u lo s a we b co n a rt ícu lo s s o b re p ro g ra m a ció n d e vid e o ju e g o s , ú t ile s , n u m e ro s o s , y
p e rfe ct a m e n t e o rd e n a d o s . Ta m b ié n d e s d e a q u í p u e d e s b a ja rt e e l có d ig o fu e n t e d e ju e g o s
co m p le t o s y d e d ive rs a s lib re ría s . Fa lla u n p o co e n e l t e m a d e l s o n id o , p e ro t o d o lo d e m á s ra lla la
p e rfe cció n .

X2 FTP
ft p : / / x2 ft p . o u lu . fi/ p u b / m s d o s / p ro g ra m m in g /
4 2 8 7 1 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Es t e s it io d e ft p p o n e a n u e s t ra d is p o s ició n in co n t a b le s re cu rs o s p a ra p ro g ra m a r ju e g o s b a jo MS -
DOS , s ie n d o la e le cció n d e s is t e m a o p e ra t ivo lo p e o r q u e t ie n e .

http://www.programacion.com/direcciones.juegos.html (2 de 3) [20/10/2002 18:13:27]


Programación en castellano. Direcciones. Entretenimiento. Juegos

Re v is t a s [ S u b ir]
1 d ire cció n

Ga m a s u t ra
h t t p : / / www. g a m a s u t ra . co m
5 5 1 9 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
Pu b lica ció n s o b re p ro g ra m a ció n d e vid e o ju e g o s . Es crib e n m u ch o s p ro g ra m a d o re s d e l, d ig a m o s ,
'm u n d o re a l' y s e a ct u a liza ca d a s e m a n a .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.juegos.html (3 de 3) [20/10/2002 18:13:27]


Programación en castellano. Direcciones. Entretenimiento. Demos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . En t re t e n im ie n t o . Nuestras zonas

De m o s
9 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re p ro g ra m a ció n d e d e m o s , p re s e n t a cio n e s g rá fica s y s o n o ra s d e
g ra n e s p e ct a cu la rid a d g e n e ra d a s e n t ie m p o re a l.

● En s a m b la d o r@ ( 6 )

» EN ES TA P AGI N A
1 . Art ícu lo s
2 . Cu rs o s
3 . Ge n e ra le s
4 . Pu b lica cio n e s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Efe ct o s g rá fico s y o t ro s a rt ícu lo s d e PC- Ma n ía

En o t ro s id io m a s
● Ho rn e t
● Hu g i

Art íc u lo s [ S u b ir]
4 d ire ccio n e s

Efe c t o s g rá fic o s y o t ro s a rt íc u lo s d e P C- Ma n ía
h t t p : / / www. h o b b yp re s s . co m / PCMANIA/ PC0 4 4 / DE/ p c0 4 4 d e d e m o s 0 0 0 0 . h t m l
7 8 2 6 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
S e p u e d e a cce d e r d e s d e In t e rn e t a t o d o s lo s a rt ícu lo s p u b lica d o s e n la re vis t a PC- Ma n ía s o b re la
p ro g ra m a ció n d e d e m o s y e s crit o s p o r Miq u e l Ba rce ló y Ed u a rd S á n ch e z Pa la zó n . S o n m u ch o s ,
p e rfe ct a m e n t e e xp lica d o s y co n có d ig o d e e je m p lo , p e ro d e s a fo rt u n a d a m e n t e n o e xis t e n u n ín d ice
q u e p e rm it a a cce d e r a t o d o s e llo s , p o r lo q u e d e b e re m o s ir p u ls a n d o a lo s e n la ce s d e 'S ig u ie n t e '
p a ra le e rlo s t o d o s .

P á g in a d e N u ll
h t t p : / / p a g in a . d e / n u ll
3 4 8 7 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a

http://www.programacion.com/direcciones.demos.html (1 de 3) [20/10/2002 18:13:31]


Programación en castellano. Direcciones. Entretenimiento. Demos

En e s t e p á g in a e n co n t ra rá s u n a s e cció n d e t u t o ria le s p o r a h o ra lim it a d a a u n b u e n a rt ícu lo s o b re


e l e fe ct o Blo b s .

Aw e s o m e Fire Tu t
h t t p : / / b a cklit . d ig it is . n e t / a we s o m e . h t m
1 2 1 9 5 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Bu e n a rt ícu lo q u e e xp lica có m o re a liza r e l e fe ct o d e l fu e g o , u s a d o ya e n m u ch a s d e m o s , p e ro q u e
p u e d e s e rvir p a ra in t ro d u cirs e e n lo s m é t o d o s u s a d o s e n e l m u n d illo .

W it c h lo rd
h t t p : / / www. wit ch lo rd . co m
4 8 0 6 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
En e s t e lu g a r p o d rá s e n co n t ra r d ive rs o s a rt ícu lo s q u e t e g u ia rá n e n la p ro d u cció n d e e fe ct o s
u t iliza n d o Vis u a l C+ + y la s Dire ct X. Exce le n t e p a ra d a r t u s p rim e ro s p a s o s e n e s t o s t e m a s .
Ta m b ié n co n t ie n e u n a e xce le n t e re co p ila ció n d e a rt ícu lo s d e o t ra s we b .

Cu rs o s [ S u b ir]
2 d ire ccio n e s

D e m o n o m ic ro n
h t t p : / / www. e n co m ix. e s / ~ ch is p a /
3 5 4 5 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
In t e re s a n t ís im a in icia t iva d e la e s ce n a e s p a ñ o la p o r e n s e ñ a r la s b a s e s q u e d e b e t e n e r t o d o b u e n
p ro g ra m a d o r d e d e m o s o 'co d e r'. De s a fo rt u n a d a m e n t e , p a re ce n o h a b e r t e n id o co n t in u id a d .

Ab e 's D e m o s c h o o l
h t t p : / / www. m d s . m d h . s e / fö re n in g a r/ s m a ll/ a b e /
3 8 1 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Pe q u e ñ a in t ro d u cció n a l m u n d illo q u e , d e s a fo rt u n a d a m e n t e , s e h a q u e d a d o d e m a s ia d o a n t ig u a .

Ge n e ra le s [ S u b ir]
2 d ire ccio n e s

Fa q s y s
h t t p : / / www. n e u t ra lzo n e . o rg / h o m e / fa q s ys
6 6 5 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Exce le n t e we b co n a rt ícu lo s y t u t o ria le s , g e n e ra lm e n t e e n fo rm a t o t e xt o y co n có d ig o d e e je m p lo .

Ho rn e t
h t t p : / / www. h o rn e t . o rg / co d e
3 9 4 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a

http://www.programacion.com/direcciones.demos.html (2 de 3) [20/10/2002 18:13:31]


Programación en castellano. Direcciones. Entretenimiento. Demos

Ho rn e t fu e e l a rch ivo m u n d ia l d e l m u n d o d e la d e m o s ce n e h a s t a s u cie rre e n 1 9 9 8 . Po r e llo cu e n t a


co n la m e jo r re co p ila ció n d e t u t o ria le s y có d ig o fu e n t e q u e p u e d e s e n co n t ra r, s ie m p re y cu a n d o n o
b u s q u e s m a t e ria l d e m a s ia d o m o d e rn o . Ad e m á s , t o d o lo q u e p u e d a s b u s ca r e s t á co m e n t a d o y
puntua do.

P u b lic a c io n e s [ S u b ir]
1 d ire cció n

Hu g i
h t t p : / / www. h u g i. d e
3 4 4 0 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Re vis t a e le ct ró n ica p a ra PCs , q u e e n ca d a n ú m e ro t ie n e u n a im p o rt a n t e re m e s a d e a rt ícu lo s s o b re
p ro g ra m a ció n d e d e m o s , e n t re o t ra s m u ch a s co s a s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.demos.html (3 de 3) [20/10/2002 18:13:31]


Programación en castellano. Direcciones. Otros lenguajes

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Ot ro s
le n g u a je s
1 1 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s le n g u a je s n o in clu id o s e n o t ra s ca t e g o ría s , co m o p u e d e n s e r lo s
le n g u a je s d e cla ra t ivo s o lo s fu n cio n a le s . El p rin cip a l in t e ré s d e m u ch o s d e e llo s e s s o b re t o d o
a ca d é m ico .

● Ha s ke ll ( 3 )
● J (1)
● Pro lo g ( 7 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.otros.html [20/10/2002 18:13:33]


Programación en castellano. Direcciones. Otros lenguajes. Prolog

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Ot ro s
le n g u a je s .
P ro lo g
7 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re Pro lo g , e l m á s p o p u la r d e lo s le n g u a je s d e cla ra t ivo s . Es t o s
le n g u a je s s e ca ra ct e riza n p o rq u e e n e llo s s e le in d ica a l o rd e n a d o r q u é e s lo q u e s e q u ie re q u e
h a g a , p e ro n o có m o s e q u ie re q u e lo h a g a . S in e m b a rg o , y p o r a h o ra , s u u s o e s t á re s t rin g id o s o b re
t o d o a u n ive rs id a d e s .

» EN ES TA P AGI N A
1 . Co m p ila d o re s
2 . Ge n e ra le s
3 . Tu t o ria le s

Co m p ila d o re s [ S u b ir]
4 d ire ccio n e s

Vis u a l P ro lo g
h t t p : / / www. e - za p a c8 7 . f2 s . co m
1 2 3 7 2 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
En t o rn o d e d e s a rro llo co m p le t o , co n IDE, d e p u ra d o r, e t c. , p a ra Pro lo g . Dis p o n ib le e n e n t o rn o
Win d o ws , Un ix y OS / 2 .

CI AO P ro lo g
h t t p : / / clip . d ia . fi. u p m . e s / S o ft wa re / Cia o /
5 9 9 9 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Po t e n t e co m p ila d o r GNU, q u e in t e rp re t a e l e s t á n d a r IS O d e Pro lo g y d is p o n e d e u n a ca n t id a d
in g e n t e d e lib re ría s y u n a h e rra m ie n t a p a ra la g e n e ra ció n a u t o m á t ica d e d o cu m e n t a ció n .

S ic s t u s P ro lo g
h t t p : / / www. s ics . s e / is l/ s ics t u s . h t m l
3 9 0 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
El m á s co m p le t o co m p ila d o r d e Pro lo g , in co rp o ra a ñ a d id o s h a b it u a le s e n co m p ila d o re s d e o t ro s
le n g u a je s p e ro h a b it u a lm e n t e a u s e n t e s cu a n d o h a b la m o s d e Pro lo g . Ta m b ié n d is p o n e d e a l
p o s ib ilid a d d e e n la za r có d ig o e n e s t e le n g u a je d e n t ro d e p ro g ra m a s e s crit o s e n o t ro s le n g u a je s
co m o , p o r e je m p lo , Vis u a l Ba s ic. Es o s í, e s d e p a g o .

http://www.programacion.com/direcciones.prolog.html (1 de 2) [20/10/2002 18:13:35]


Programación en castellano. Direcciones. Otros lenguajes. Prolog

S W I P ro lo g
h t t p : / / s wi. p s y. u va . n l/ p ro je ct s / S WI- Pro lo g /
5 1 6 4 vis it a s | Pu n t u a ció n : ( 1 5 vo t o s ) Vo t a
Pe q u e ñ a , co m p le t a y ú t il im p le m e n t a ció n d e l Pro lo g d e la Un ive rs id a d d e Ed in m b u rg o .
Prin cip a lm e n t e re a liza d a co n fin e s a ca d é m ico s , s e d is t rib u ye b a jo lice n cia GPL.

Ge n e ra le s [ S u b ir]
1 d ire cció n

P ro g ra m a c ió n Ló g ic a
h t t p : / / clip . d ia . fi. u p m . e s / p ro g lo g /
5 7 9 6 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
In t e re s a n t e p á g in a co n u n cu rs o co m p le t o s o b re Pro g ra m a ció n Ló g ica d e la Fa cu lt a d d e
In fo rm á t ica d e Ma d rid e n t ra n s p a re n cia s , a ve ce s n o m u y b ie n e xp lica d a s , a p a rt e d e e n la ce s a u n
p a r d e in t é rp re t e s g ra t u it o s . Es t ris t e q u e e n u n a u n ive rs id a d e s p a ñ o la s ó lo t e n g a n e s t a s p á g in a s
e n in g lé s , p e ro a l m e n o s e s d e lo m e jo rcit o q u e h e m o s e n co n t ra d o .

Tu t o ria le s [ S u b ir]
2 d ire ccio n e s

Tu t o ria l d e P ro lo g e n Ca s t e lla n o
h t t p : / / www. p ro g ra m a cio n . n e t / cu rs o s / p ro lo g 1 /
1 4 8 6 8 vis it a s | Pu n t u a ció n : ( 2 0 vo t o s ) Vo t a
Es t e t u t o ria l p re t e n d e s e r u n a g u ía b á s ica d e in t ro d u cció n a l le n g u a je d e p ro g ra m a ció n Pro lo g . S e
e n g lo b a d e n t ro d e u n a s e rie d e cu rs o s q u e p re t e n d e p ro fu n d iza r e n la m a t e ria a m e d id a q u e s e
a d q u ie re d o m in io d e d ich o le n g u a je .

Tu t o ria l d e P ro lo g
h t t p : / / p ro t o n . u ct in g . u d g . m x/ t u t o ria l/ p ro lo g / in d e x. h t m
1 1 8 4 3 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
Tu t o ria l d e u n a s o la p á g in a ( e s o s i, m u y g ra n d e ) , q u e p a re ce in s is t ir m á s e n e l m a n e jo d e l
in t é rp re t e d e la Un ive rs id a d d e Ed in b u rg o q u e e n la co m p re n s ió n d e l le n g u a je . Aco n s e ja b le p a ra
lo s q u e ya h a ya n p a s a d o d e a h í.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.prolog.html (2 de 2) [20/10/2002 18:13:35]


Programación en castellano. Direcciones. Otros lenguajes. Haskell

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Ot ro s
le n g u a je s .
Ha s k e ll
3 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re Ha s ke ll, e l m á s m o d e rn o e s t á n d a r e n t re lo s le n g u a je s fu n cio n a le s .
Es t o s le n g u a je s s e ca ra ct e riza n p o r t e n e r co m o u n id a d ló g ica d e p ro ce s a m ie n t o la fu n ció n , e n lu g a r
d e la s e n t e n cia co m o s u ce d e e n lo s le n g u a je s im p e ra t ivo s u o rie n t a d o s a o b je t o s .

» EN ES TA P AGI N A
1 . Ge n e ra le s
2 . Tu t o ria le s

Ge n e ra le s [ S u b ir]
1 d ire cció n

Th e Ha s k e ll Ho m e P a g e
h t t p : / / www. h a s ke ll. o rg
3 7 3 2 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
El p u n t o d e p a rt id a d e t o d o p ro g ra m a d o r d e Ha s ke ll. In clu ye e n la ce s , t u t o ria le s , co m p ila d o re s ,
e t c.

Tu t o ria le s [ S u b ir]
2 d ire ccio n e s

Cu rs o d e Ha s k e ll d e Je ro e n Fo k k e r
h t t p : / / www. cs . u u . n l/ p e o p le / je ro e n / co u rs e s / fp - s p . p d f
1 0 0 4 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Cu rs o e m p le a d o e n la s cla s e s d e la Un ive rs id a d d e Ut re ch t . Aú n cu a n d o s e re fie ra a Go fe r, e n
re a lid a d e l le n g u a je e s Ha s ke ll, q u e p o r lo vis t o t ie n e h a s t a a p o d o s . Es m u y s e n cillo y e s t á m u y
b ie n t ra d u cid o .

I n t ro d u c c ió n a Ha s k e ll
h t t p : / / h o rru . ls i. u n io vi. e s / ~ la b ra / FTP/ In t Ha s ke ll9 8 . p d f
7 7 9 8 vis it a s | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a

http://www.programacion.com/direcciones.haskell.html (1 de 2) [20/10/2002 18:13:37]


Programación en castellano. Direcciones. Otros lenguajes. Haskell

Co m p le t o p e ro co n cis o t u t o ria l d e Ha s ke ll, e s crit o p o r Jo s é La b ra . Co m ie n za ra zo n a n d o la


n e ce s id a d d e la cre a ció n d e Ha s ke ll, p a ra ir d e s g ra n a n d o ca d a u n a d e la s ca ra ct e rís t ica s
p rin cip a le s d e e s t e le n g u a je .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.haskell.html (2 de 2) [20/10/2002 18:13:37]


Programación en castellano. Direcciones. Herramientas

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . He rra m ie n t a s Nuestras zonas


5 1 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s d e h e rra m ie n t a s d e p ro g ra m a ció n , co m o co m p ila d o re s , e d it o re s , e t c. .

● Co m p ila d o re s ( 6 )
● De s a rro llo we b ( 3 7 )
● Ed it o re s ( 1 )
● Lo t u s No t e s & Do m in o ( 7 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.herramientas.html [20/10/2002 18:13:39]


Programación en castellano. Direcciones. Herramientas. Editores

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . He rra m ie n t a s . Nuestras zonas

Ed it o re s
1 d ire cció n
Re co p ila ció n d e s it io s q u e a lb e rg a n e d it o re s o a p á g in a s d e co m p a ñ ia s d e d ica d a s a la co n s t ru ccio n
d e lo s m is m o s .

» EN ES TA P AGI N A
1 . Gra t u it o s

Gra t u it o s [ S u b ir]
1 d ire cció n

Gra s p
h t t p : / / www. e n g . a u b u rn . e d u / g ra s p /
8 2 2 1 vis it a s | Pu n t u a ció n : ( 1 7 vo t o s ) Vo t a
Ed it o r m u lt ile n g u a je cu ya m a yo r o rig in a lid a d co n s is t e e n la g e n e ra ció n d e CS D ( Co n t ro l S t ru ct u re
Dia g ra m ) ; u n o s g rá fico s s it u a d o s a la izq u ie rd a d e l có d ig o q u e a yu d a n a co m p re n d e r rá p id a m e n t e
s u e s t ru ct u ra . Ed it a a rch ivo s ADA, C, C+ + , Ja va y VHDL y e s m u lt ip la t a fo rm a .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.editores.html [20/10/2002 18:13:40]


Programación en castellano. Direcciones. Herramientas. Compiladores

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . He rra m ie n t a s . Nuestras zonas

Co m p ila d o re s
6 d ire ccio n e s
Re co p ila ció n d e s it io s q u e a lb e rg a n co m p ila d o re s o a p á g in a s d e co m p a ñ ia s d e d ica d a s a la
co n s t ru ccio n d e lo s m is m o s .

» EN ES TA P AGI N A
1 . Gra t u it o s

» I MP RES CI N D I BLE VI S I TAR


En o t ro s id io m a s
● Co m p ila d o r GNAT

Gra t u it o s [ S u b ir]
6 d ire ccio n e s

CI AO P ro lo g
h t t p : / / clip . d ia . fi. u p m . e s / S o ft wa re / Cia o /
5 9 9 9 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Po t e n t e co m p ila d o r GNU, q u e in t e rp re t a e l e s t á n d a r IS O d e Pro lo g y d is p o n e d e u n a ca n t id a d
in g e n t e d e lib re ría s y u n a h e rra m ie n t a p a ra la g e n e ra ció n a u t o m á t ica d e d o cu m e n t a ció n .

Co m p ila d o r GN AT
h t t p : / / www. g n a t . co m
4 9 7 3 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Co m p ila d o r GNU d e ADA, d is p o n ib le p a ra d ive rs a s p la t a fo rm a s y d is t rib u id o a lo la rg o y a n ch o d e
In t e rn e t e n m ile s d e s it io s FTP.

D JGP P
h t t p : / / www. d e lo rie . co m / d jg p p /
9 7 9 5 vis it a s | Pu n t u a ció n : ( 1 5 vo t o s ) Vo t a
La p á g in a d e l fa m o s o co m p ila d o r d e C p a ra DOS / Win d o ws . Es u n a ve rs ió n d e l GNU C p re s e n t e e n
m u ch o s Un ix p a ra e s t o s s is t e m a s o p e ra t ivo s .

Fre e p a s c a l
h t t p : / / www. fre e p a s ca l. o rg /
8 4 0 8 vis it a s | Pu n t u a ció n : ( 2 2 vo t o s ) Vo t a

http://www.programacion.com/direcciones.compiladores.html (1 de 2) [20/10/2002 18:13:42]


Programación en castellano. Direcciones. Herramientas. Compiladores

Pá g in a q u e a lb e rg a e l p ro ye ct o Fre e p a s ca l, q u e in t e n t a cre a r u n co m p ila d o r g ra t u it o y


m u lt ip la t a fo rm a d e Ob je ct Pa s ca l, la ve rs ió n o rie n t a d a a o b je t o d e l le n g u a je Pa s ca l cre a d a p o r
Bo rla n d .

Ha rb o u r P ro je c t
h t t p : / / www. win fa kt . co m / h a rb o u r- p ro je ct /
5 6 6 9 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a
En e s t a s p á g in a s e n co n t ra re is u n co m p ila d o r d e xBa s e ( Clip p e r) fre e wa re t o d a vía a lg o in m a d u ro .

S W I P ro lo g
h t t p : / / s wi. p s y. u va . n l/ p ro je ct s / S WI- Pro lo g /
5 1 6 4 vis it a s | Pu n t u a ció n : ( 1 5 vo t o s ) Vo t a
Pe q u e ñ a , co m p le t a y ú t il im p le m e n t a ció n d e l Pro lo g d e la Un ive rs id a d d e Ed in m b u rg o .
Prin cip a lm e n t e re a liza d a co n fin e s a ca d é m ico s , s e d is t rib u ye b a jo lice n cia GPL.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.compiladores.html (2 de 2) [20/10/2002 18:13:42]


Programación en castellano. Direcciones. Sistemas operativos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

S is t e m a s
o p e ra t iv o s
2 5 d ire ccio n e s
Re co p ila ció n d e s it io s q u e a lb e rg a n in fo rm a ció n p a ra p ro g ra m a r b a jo u n s is t e m a o p e ra t ivo
e s p e cífico .

● AS / 4 0 0 ( 3 )
● Lin u x ( 1 4 )
● OS / 2 ( 1 )
● Pa lm OS ( 1 )
● Win d o ws NT ( 5 )

» EN ES TA P AGI N A
1 . Cu rs o s

Cu rs o s [ S u b ir]
1 d ire cció n

S is t e m a s Op e ra t iv o s
h t t p : / / e xa . u n n e . e d u . a r/ d e p a r/ a re a s / in fo rm a t ica / S is t e m a s Op e ra t ivo s / S OF. h t m
2 0 5 3 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Co m p le t o lib ro o n lin e cu yo s co n t e n id o s co rre s p o n d e n a u n cu rs o u n ive rs it a rio d e S is t e m a s
Op e ra t ivo s Co n ve n cio n a le s y Dis t rib u id o s . S e p u e d e d e s ca rg a r e l cu rs o e n PDF. La p á g in a
p rin cip a l, n o o b s t a n t e , e s t á s o b re ca rg a d a a la e xt e n u a ció n .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.ssoo.html [20/10/2002 18:13:43]


Programación en castellano. Direcciones. Sistemas operativos. WindowsNT

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

S is t e m a s
o p e ra t iv o s .
W in d o w s N T
5 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re Win d o ws NT/ 2 0 0 0 .

» EN ES TA P AGI N A
1 . Cu rs o s
2 . Ge n e ra le s
3 . Re vis t a s

Cu rs o s [ S u b ir]
2 d ire ccio n e s

Ay u d a s y g u ía s p a ra W in d o w s N T
h t t p : / / www. win - n t . co m . a r
3 9 6 4 vis it a s | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a
Ma n u a le s y t ru co s s o b re Win d o ws NT S e rve r, b a s t a n t e co m p le t o s .

P o rt a l Ce rt ific a c ió n MCS E e n e s p a ñ o l
h t t p : / / www. ce rt ifica cio n m cs e . co m
8 6 6 3 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Prim e r p o rt a l e n e s p a ñ o l d e d ica d o a la s ce rt ifica cio n e s Cis co y Micro s o ft p a ra e l m u n d o
h is p a n o p a rla n t e . t e s t s , fo ro s d e d e b a t e s , ra n kin g s , e xá m e n e s , t ru co s , e n la ce s im p re s cin d ib le s ,
e t c. . .

http://www.programacion.com/direcciones.windowsnt.html (1 de 2) [20/10/2002 18:13:45]


Programación en castellano. Direcciones. Sistemas operativos. WindowsNT

Ge n e ra le s [ S u b ir]
2 d ire ccio n e s

I n t ra n e t c o n W in d o w s N T
h t t p : / / www. g lo b a ln e t . co m . m x/ in t ra n e t /
8 3 0 6 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a
Im p le m e n t a ció n d e u n a In t ra n e t p a ra e l t ra b a jo e n g ru p o s o b re Win d o ws NT. Po r Jo s é Go n zá le z
Mo re n o

W in d o w s N T Re s o u rc e S it e
h t t p : / / www. in t e rla cke n . co m / win n t / d e fa u lt . h t m
5 2 2 4 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
En In g lé s . Ut ilid a d e s p a ra la a d m in is t ra ció n d e s is t e m a s y s it e s NT. Tru co s p a ra la Ad m in is t ra ció n
d e NT, h e rra m ie n t a s p a ra lo s s e rvid o re s We b NT, e t c. As í co m o re co m e n d a cio n e s d e lib ro s .

Re v is t a s [ S u b ir]
1 d ire cció n

W in d o w s N T Ma g a z in e
h t t p : / / www. wn t m a g . co m /
6 6 1 8 vis it a s | Pu n t u a ció n : ( 8 vo t o s ) Vo t a
Pa g in a We b e s t a co n o cid a re vis t a s o b re e l s is t e m a o p e ra t ivo Win d o w NT.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.windowsnt.html (2 de 2) [20/10/2002 18:13:45]


Programación en castellano. Direcciones. Sistemas operativos. Linux

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

S is t e m a s
o p e ra t iv o s .
Lin u x
1 4 d ire ccio n e s
Re co p ila ció n d e in fo rm a ció n s o b re Lin u x

» EN ES TA P AGI N A
1 . Dis t rib u cio n e s
2 . Ge n e ra le s
3 . No t icia s
4 . Re vis t a s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Zo n a Lin u x
● An illo d e Lin u x e n ca s t e lla n o

D is t rib u c io n e s [ S u b ir]
3 d ire ccio n e s

D e b ia n / GN U Lin u x
h t t p : / / www. e s . d e b ia n . o rg /
5 4 2 4 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
In fo rm a ció n e n ca s t e lla n o s o b re e s t a d is t rib u ció n d e Lin u x.

ES w a re
h t t p : / / www. e s wa re . co m /
4 2 3 7 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Dis t rib u ció n e s p a ñ o la . Co n la lín e a d e co m a n d o s ca s t e lla n iza d a , p á g in a s m a n e n ca s t e lla n o , y
s o p o rt e t é cn ico .

Eu rie le c
h t t p : / / www. e t s it . u p m . e s / ~ e u rie le c/ lin u x/
3 7 9 1 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Dis t rib u ció n e s p a ñ o la . Ba s a d a e n la d is t rib u ció n d e Re d Ha t .

http://www.programacion.com/direcciones.linux.html (1 de 3) [20/10/2002 18:13:49]


Programación en castellano. Direcciones. Sistemas operativos. Linux

Ge n e ra le s [ S u b ir]
8 d ire ccio n e s

I N S FLUG
h t t p : / / www. in s flu g . o rg /
6 6 8 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
S it e d o n d e s e co o rd in a la t ra d u cció n "o ficia l" d e d o cu m e n t o s b re ve s , co m o lo s COMOs ( HOW- TOs )
y PUFs o Pre g u n t a s d e Us o Fre cu e n t e , la s FAQs e n in g lé s .

Lin u x S t a rt
h t t p : / / e s . lin u xs t a rt . co m / ca t e g o ry. p h p ? file = / d e ve lo p m e n t /
7 8 1 6 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Un p o rt a l d e Lin u x m u y b á s ico , cu yo m a yo r in t e ré s re s id e e n s u b u s ca d o r y, p o r s u p u e s t o , s u
ca t e g o ría d e d e s a rro llo .

An illo d e Lin u x e n c a s t e lla n o


h t t p : / / lin u x- e s . u io . n o / Lin u xrin g /
1 5 3 0 4 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
El 'An illo Lin u x e n Ca s t e lla n o ' e s u n p ro je ct o m e d ia n t e e l cu a l t o d a s la s p a g in a s s o b re Lin u x e n
ca s t e lla n o e s t a ra n e n la za d a s u n a s co n o t ra s , fo rm a n d o p a rt e d e u n a n illo d e p a g in a s co n u n t e m a
e n co m u n , Lin u x e n ca s t e lla n o .

His p a lin u x
h t t p : / / www. h is p a lin u x. e s /
4 8 1 2 vis it a s | Pu n t u a ció n : ( 6 vo t o s ) Vo t a
As o cia ció n d e u s u a rio s d e Lin u x e n e s p a ñ o l.

Lin u x d e N o v a t o a N o v a t o
h t t p : / / p e rs o n a l2 . re d e s t b . e s / t ra q u e /
1 0 5 2 7 vis it a s | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a
We b s o b re Lin u x d irig id a e s e n cia lm e n t e a lo s q u e e m p ie za n co n e s t e m a g n ifico s is t e m a o p e ra t ivo .
Ma n t e n id a p o r Fe rn a n d o Tra ve s e d o .

Lin u x Bu s c a
h t t p : / / www. lin u xb u s ca . la n e t s . n e t /
1 1 2 8 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Prim e r d ire ct o rio e n e s p a ñ o l co n m o t o r d e b ú s q u e d a s o b re re cu rs o s Lin u x.

Zo n a Lin u x
h t t p : / / www. zo n a lin u x. co m /
7 5 8 1 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Zo n a Lin u x. co m , p á g in a we b co n t o d o t ip o d e re cu rs o s d e Lin u x. No t icia s d ia ria s , d o cu m e n t a ció n ,
b o le t ín m e n s u a l, fo ro s d e d is cu s ió n , e t c. Ma n t e n id a p o r Da vid Liza n o .

Lin u x W e b Rin g
h t t p : / / lin u xwe b rin g . o rg /

http://www.programacion.com/direcciones.linux.html (2 de 3) [20/10/2002 18:13:49]


Programación en castellano. Direcciones. Sistemas operativos. Linux

2 9 4 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
An illo s o b re d e p á g in a s s o b re Lin u x e n In g le s .

N o t ic ia s [ S u b ir]
2 d ire ccio n e s

Lin u x P re v ie w
h t t p : / / lin u x. n cc. o rg . ve /
7 2 8 6 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Pá g in a we b co n n o t icia s , 're vie ws ', y e n la ce s .

S o lo Lin u x
h t t p : / / www. s o lo lin u x. co m /
5 3 9 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
No t icia s s o b re Lin u x e n ca s t e lla n o . Es t a s e cció n p e rt e n e ce a No t ica s . co m , n o t icia s in t e rco m .

Re v is t a s [ S u b ir]
1 d ire cció n

Lin u x Fo c u s e n c a s t e lla n o
h t t p : / / www. lin u xfo cu s . o rg / Ca s t e lla n o /
5 5 6 1 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Es u n a re vis t a in t e rn a cio n a l y lib re s o b re lin u x. Es u n a o rg a n iza ció n s in á n im o d e lu cro , y la re vis t a
e s lle va d a p o r vo lu n t a rio s d e t o d a s p a rt e s d e l m u n d o .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.linux.html (3 de 3) [20/10/2002 18:13:49]


Programación en castellano. Direcciones. Internet

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

I n t e rn e t
1 6 4 d ire ccio n e s
Re co p ila ció n d e s it io s q u e a lb e rg a n in fo rm a ció n p a ra p ro g ra m a r e n In t e rn e t .

● AS P ( 1 2 )
● CGI ( 1 )
● Co ld Fu s io n ( 4 )
● CS S ( 2 )
● Fla s h ( 8 )
● Ge n e ra le s ( 6 )
● HTML ( 1 0 )
● PHP ( 2 1 )
● S VG y VML ( 1 1 )
● WAP ( 3 0 )
● XHTML ( 1 )
● XML ( 3 0 )
● XS L, XS LT y Xp a t h ( 2 8 )
● Ja va @ ( 2 7 )
● Ja va s crip t @ ( 2 7 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.internet.html [20/10/2002 18:13:52]


Programación en castellano. Direcciones. Internet. HTML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

I n t e rn e t .
HTML
1 0 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re HTML y re cu rs o s a la h o ra d e re a liza r p á g in a s we b . Pa ra
p ro fu n d iza r m á s e n e s t e t e m a , re co m e n d a m o s vis it a r HTML e n ca s t e lla n o .

● De s a rro llo we b @ ( 3 7 )

» EN ES TA P AGI N A
1 . Cu rs o s
2 . Es p e cifica cio n e s
3 . Ge n e ra le s
4 . Lis t a s d e co rre o

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Tu t o r HTML
● HTML 4 . 0 1
● Tu t o ria l HTML & CS S
● We b Ma e s t ro

Cu rs o s [ S u b ir]
6 d ire ccio n e s

Tu t o ria l HTML & CS S


h t t p : / / www. xin io m . co m / u s e rs / Jo rg e / h t m l/
3 6 9 9 vis it a s | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a
Ext e n s o t u t o ria l e n fo ca d o a la s n u e va s ve rs io n e s d e HTML y CS S ( h o ja s d e e s t ilo s ) . Lib e ra d o b a jo
lo s t é rm in o s d e la Lice n cia d e Do cu m e n t a ció n Lib re GNU ( LDLG o GFDL e n in g lé s ) .

Cu rs o d e HTML d e Au la Fá c il
h t t p : / / www. a u la fa cil. o rg / Cu rs o Ht m l/ t e m a rio . h t m
1 8 7 4 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Un cu rs o a lg o co rt o y b a s t a n t e p a rco . Es t á d ivid id o e n le ccio n e s m u y p e q u e ñ a s .

Cu rs o Vis u a l d e HTML

http://www.programacion.com/direcciones.html.html (1 de 3) [20/10/2002 18:13:55]


Programación en castellano. Direcciones. Internet. HTML

h t t p : / / www1 0 . b rin ks t e r. co m / s a u s a n t / n o cio n e s _ h t m l. h t m l


5 9 0 5 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a
Cu rs o b á s ico d e HTML, co n s t a d e le ccio n e s e xp lica d a s p o r m e d io d e d ia p o s it iva s e m p le a n d o
Vie wle t s . A ve ce s p u e d e re s u lt a r u n p o co p e s a d o e s t e s is t e m a , p e ro e s p e rfe ct o p a ra lo s q u e s e
p ie rd a n co n cu rs o s m á s "á s p e ro s ".

Tu t o ria l d e HTML d e "Ap re n d e e n I n t e rn e t "


h t t p : / / www. ie s p a n a . e s / q u e ro l/ t u t o ria le s / cu rs o h t m . h t m
5 3 3 0 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Un p e q u e ñ o t u t o ria l q u e t o m a co m o p ro ye ct o la co n s t ru cció n d e u n a s e n cilla we b d e s e is p á g in a s ,
q u e va cre a n d o s e a m e d id a q u e s e a p re n d e n n u e vo s co n ce p t o s .

W e b Ma e s t ro
h t t p : / / www. a m e rica n . e d u . co / vs / cu rs o we b / d o cs / p o rt a d a . h t m l
6 4 9 4 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Co p ia d e l cu rs o , ya d e s a p a re cid o , d e Fra n cis co Aro ce n a , p o s ib le m e n t e e l m á s ce le b re d e In t e rn e t
e n n u e s t ro id io m a .

Tu t o r HTML
h t t p : / / g ia s 7 2 0 . d is . u lp g c. e s / Gia s / Cu rs o s / Tu t o ria l_ h t m l/ in d ice . h t m
4 6 5 6 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Un b u e n cu rs o d e HTML, b a s t a n t e co m p le t o .

Es p e c ific a c io n e s [ S u b ir]
2 d ire ccio n e s

HTML 3 . 2
h t t p : / / d n s . u n co r. e d u / in fo / h t m l/ re c- s p . h t m
1 5 3 6 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Ya s e h a q u e d a d o u n p o co a n t ig u a p e ro re s u lt a a lg o m á s p e q u e ñ a y m a n e ja b le q u e la 4 . 0 .

HTML 4 . 0 1
h t t p : / / h t m l. co n cla s e . n e t / w3 c/ h t m l4 0 1 - e s / co ve r. h t m l
6 1 5 6 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Es p e cifica ció n e n e s p a ñ o l d e la ú lt im a re vis ió n d e l HTML, la 4 . 0 1 . Co n vie n e t e n e rla a m a n o p a ra
re s o lve r d u d a s .

http://www.programacion.com/direcciones.html.html (2 de 3) [20/10/2002 18:13:55]


Programación en castellano. Direcciones. Internet. HTML

Ge n e ra le s [ S u b ir]
1 d ire cció n

Te je d o re s d e l w e b
h t t p : / / www. t e je d o re s d e lwe b . co m /
2 9 0 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Un o d e lo s m á s a n t ig u o s y ve n e ra b le s s it io s d e d ica d o s a e n s e ñ a r HTML y t e m a s a fin e s . S e
a ct u a liza co n fre cu e n cia co n t o d o t ip o d e cu rs o s .

Lis t a s d e c o rre o [ S u b ir]


1 d ire cció n

W e b - ES
h t t p : / / www. re d iris . e s / lis t / in fo / we b - e s . e s . h t m l
1 4 6 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
La lis t a e s p a ñ o la co n m á s s o le ra , o fre cid a p o r Re d IRIS .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.html.html (3 de 3) [20/10/2002 18:13:55]


Programación en castellano. Direcciones. Internet. XML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

I n t e rn e t .
XML
3 0 d ire ccio n e s
En e s t a s p á g in a s e n co n t ra ré is t o d o t ip o d e d o cu m e n t a ció n s o b re XML t a n t o e n in g le s co m o e n
ca s t e lla n o . Pa ra p ro fu n d iza r m á s e n e s t e t e m a , re co m e n d a m o s vis it a r HTML e n ca s t e lla n o .

» EN ES TA P AGI N A
1 . Art ícu lo s g e n e ra le s
2 . Es p e cifica cio n e s
3 . FAQs
4 . WEBs d e in fo rm a ció n g e n e ra l s o b re XML
5 . Lis t a s d e co rre o y n e ws
6 . Tu t o ria le s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● En t o rn o a S GML/ XML
● S GML- ES P
● Re cu rs o s XML e n RAMON. ORG
● De s a rro llo d e a p lica cio n e s We b co n JS P y XML

En o t ro s id io m a s
● XMLHa ck
● Ca fe co n Le ch e
● XML- DEV
● We b s o b re S GML/ XML d e Ro b in Co ve r
● XMLINFO

http://www.programacion.com/direcciones.xml.html (1 de 6) [20/10/2002 18:14:01]


Programación en castellano. Direcciones. Internet. XML

Art íc u lo s g e n e ra le s [ S u b ir]
7 d ire ccio n e s

XML Ro a d m a p
h t t p : / / www. a q s . e s / we b / file s / xm l- ro a d m a p . p d f
1 1 2 0 8 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
XML Ro a d m a p e s u n a p re s e n t a ció n d e la s d ive rs a s t e cn o lo g ía s q u e e s t á n re la cio n a d a s co n XML.
Es t e d o cu m e n t o p e rm it e e s t a b le ce r u n a b a s e d e in fo rm a ció n p a ra e n t ra r e n e l m u n d o d e XML s in
p e rd e rs e , e n co n t ra n d o la in fo rm a ció n m á s a ct u a liza d a p o s ib le . A s u ve z, m u e s t ra la s d is t in t a s
a p lica cio n e s y la s h e rra m ie n t a s n e ce s a ria s , p a ra e l á m b it o d e l d e s a rro llo e n XML.

Re c u rs o s XML e n RAMON . ORG


h t t p : / / www. ra m o n . o rg / xm l/ in d e x2 . h t m
1 0 2 4 0 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
Bu e n a re co p ila ció n d e a rt ícu lo s , t u t o ria le s y e n la ce s s o b re XML. A d e s t a ca r s u e xce le n t e cu rs o s d e
VML.

En t re v is t a a Tim Bra y
h t t p : / / www. re vis t a we b . co m / e n t re vis t e s / t b ra ye n 9 . h t m l
1 0 7 4 4 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
En t re vis t a a Tim Bra y, u n o d e lo s co e d it o re s d e la s e s p e cifica cio n e s d e l XML, e n la re vis t a WEB.

I n t ro d u c c ió n a l XML p o r Fe rn a n d o S a n t a m a ria
h t t p : / / fe s a b id 9 8 . flo rid a - u n i. e s / Co m u n ica cio n e s / f_ s a n t a m a ria / f_ s a n t a m a ria . h t m
9 9 0 7 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
In t e re s a n t e in t ro d u cció n a l XML d e la m a n o d e Fe rn a n d o S a n t a m a ria . Es t e a rt ícu lo fu e p re s e n t a d o
e n la s VI Jo rn a d a s Es p a ñ o la s d e d o cu m e n t a ció n .

Tu t o ria l d e in t ro d u c c ió n a l XML d e Os c a r Le c h u g a Go m e z .
h t t p : / / fa ce . e l. u m a . e s / im a s d / xm l/ xm l. h t m l
1 0 3 4 9 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Tu t o ria l d e in t ro d u cció n a l XML d e Os ca r Lu is Le ch u g a Gó m e z d e la Un ive rs id a d d e Má la g a .

XML y c o m e rc io e le c t ró n ic o
h t t p : / / www. m a rke t in g yco m e rcio . co m / n u m e ro 5 / 5 xm l. h t m
4 4 5 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art ícu lo s o b re XML y e l co m e rció e le ct ró n ico , p u b lica d o e n la re vis t a Ma rke t in g y co m e rcio
e le ct ró n ico .

XML, Ja v a y e l fu t u ro d e la W e b
h t t p : / / m e t a la b . u n c. e d u / p u b / s u n - in fo / s t a n d a rd s / xm l/ wh y/ xm la p p s . h t m
5 2 4 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Exce le n t e a rt ícu lo s o b re XML, s u fu t u ro y s u re la ció n co n e l Ja va . Es crit o p o r Jo n Bo s a k, u n o d e lo s
p a d re s d e l XML.

http://www.programacion.com/direcciones.xml.html (2 de 6) [20/10/2002 18:14:01]


Programación en castellano. Direcciones. Internet. XML

Es p e c ific a c io n e s [ S u b ir]
3 d ire ccio n e s

XML 1 . 0 e n c a s t e lla n o
h t t p : / / s lu g . ct v. e s / ~ o le a / s g m l- e s p / Re c- xm l. h t m l
2 0 4 7 5 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Tra d u cció n a l ca s t e lla n o d e la e s p e cifica ció n d e l XML 1 . 0

La e s p e c ific a c ió n d e l XML c o m e n t a d a .
h t t p : / / www. xm l. co m / a xm l/ a xm l. h t m l
4 5 8 5 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
La re co m e n d a ció n d e l XML co m e n t a d a p o r Tim Bra y, u n o d e s u s co e d it o re s .

XML 1 . 0
h t t p : / / www. w3 . o rg / TR/ 1 9 9 8 / REC- xm l- 1 9 9 8 0 2 1 0
3 8 9 1 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
XML 1 . 0 . Re co m e n d a ció n d e fin it iva d e l W3 C d e l 1 0 d e Fe b re ro d e 1 9 9 8 .

FAQs [ S u b ir]
4 d ire ccio n e s

P e rl XML Fa q
h t t p : / / cro n o p io . n e t / p e rl/ fa q s / p e rlxm lfa q . h t m l
3 7 7 7 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Fa q s o b re co m o t ra b a ja r co n XML d e s d e Pe rl

XML FAQ e n c a s t e lla n o


h t t p : / / s lu g . ct v. e s / ~ o le a / s g m l- e s p / xfa q 1 3 . h t m l
1 1 3 7 3 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Tra d u cció n d e l FAQ s o b re XML d e Pe t e r Flyn n .

El XML e n 2 0 p re g u n t a s
h t t p : / / b u ild e r. co m / Au t h o rin g / Xm l2 0 / in d e x. h t m l
4 7 7 5 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
2 0 p re g u n t a s y re s p u e s t a s q u e a yu d a n a s a b e r q u e e s e l XML.

XML FAQ d e P e t e r Fly n n


h t t p : / / www. u cc. ie / xm l/
3 8 1 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
FAQ s o b re XML d e Pe t e r Flyn n . Es s in d u d a e l m á s co m p le t o y u t iliza d o .

http://www.programacion.com/direcciones.xml.html (3 de 6) [20/10/2002 18:14:01]


Programación en castellano. Direcciones. Internet. XML

W EBs d e in fo rm a c ió n g e n e ra l s o b re XML [ S u b ir]


6 d ire ccio n e s

En t o rn o a S GML/ XML
h t t p : / / o rio n . d e u s t o . e s / ~ a b a it u a / ko n ze p t u / s g m l. h t m
8 5 3 7 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
We b d e Jo s e b a Ab a it u a d e d ica d a a l S GML y XML. Po s ib le m e n t e u n a d e la s p rim e ra s We b s e n
ca s t e lla n o d e d ica d o a l S GML. Mu y re co m e n d a b le s lo s a rt ícu lo s q u e t ie n e e s crit o s s o b re e l t e m a y
e n e s p e cia l s u t u t o ria l s o b re S GML.

Ca fe c o n Le c h e
h t t p : / / m e t a la b . u n c. e d u / xm l/
4 7 9 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Re co p ila ció n d e n o t icia s y re cu rs o s s o b re XML.

W e b s o b re S GML/ XML d e Ro b in Co v e r
h t t p : / / www. o a s is - o p e n . o rg / co ve r/
4 3 8 8 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
La m e jo r We b s o b re S GML/ XML q u e e xis t e . In d is p e n s a b le p a ra e s t a r a l d ia .

XML. COM
www. xm l. co m
1 8 4 0 8 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
De lo m a s co m p le t it o co n g ra n ca n t id a d d e a rt ícu lo s y re cu rs o s .

XMLHa c k
h t t p : / / www. xm lh a ck. co m
4 5 5 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Nu e vo We b d irig id o a lo s d e s a rro lla d o re s e n XML, co n n o t icia s , o p in io n e s y cu a lq u ie r in fo rm a ció n
q u e p u e d a re s u lt a r ú t il a lo s d e s a rro lla d o re s .

XMLI N FO
h t t p : / / www. xm lin fo . co m /
5 7 0 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
We b m a n t e n id a p o r Ja m e s Ta u b e rco n g ra n ca n t id a d d e re cu rs o s s o b re XML.

http://www.programacion.com/direcciones.xml.html (4 de 6) [20/10/2002 18:14:01]


Programación en castellano. Direcciones. Internet. XML

Lis t a s d e c o rre o y n e w s [ S u b ir]


2 d ire ccio n e s

S GML- ES P
h t t p : / / s lu g . ct v. e s / ~ o le a / s g m l- e s p /
1 2 5 8 3 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Es u n a lis t a d e d is t rib u cio n s o b re S GML y XML e n ca s t e lla n o .

XML- D EV
h t t p : / / www. vs m s . n o t t in g h a m . a c. u k/ vs m s / xm l/ je we ls . h t m l
8 2 7 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Es u n a lis t a d e co rre o p a ra d e s a rro lla d o re s d e a p lica cio n e s XML.

Tu t o ria le s [ S u b ir]
8 d ire ccio n e s

D e s a rro llo d e a p lic a c io n e s W e b c o n JS P y XML


h t t p : / / ja va . p ro g ra m a cio n . n e t / js p yxm l/ in d e x. p h p
8 3 8 5 vis it a s | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a
Mu y b u e n t u t o ria l d e S UN e n ca s t e lla n o s o b re co m o d e s a rro lla r a p lica cio n e s We b u t iliza n d o d e
fo rm a co m b in a d a JS P y XML.

Tu t o ria l d e XML d e An g e l Ba rb e ro
h t t p : / / www. d a t . e t s it . u p m . e s / ~ a b a rb e ro / cu rs o / xm l/ xm lt u t o ria l. h t m l
1 5 3 7 3 vis it a s | Pu n t u a ció n : ( 2 2 vo t o s ) Vo t a
Bu e n t u t o ria l d e XML d e An g e l Ba rb e ro .

XML t u t o ria l e n Zv o n
h t t p : / / zvo n . o rg / xxl/ XMLTu t o ria l/ Ge n e ra l/ b o o k_ e n . h t m l
4 9 4 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Bre ve p e ro co n cis o t u t o ria l s o b re XML e s crit o p o r Milo s va c Nic.

La s e n t id a d e s e n e l XML
h t t p : / / www. xm l. co m / xm l/ p u b / 9 8 / 0 8 / xm lq n a 0 . h t m l
4 1 7 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Co m p le t ís im a in t ro d u cció n a la co rre ct a u t iliza ció n d e la s e n t id a d e s e n e l XML. S u a u t o r e s No rm a n
Wa ls h .

Tu t o ria l d e XML d e Fra n k Bo u m p h re y


h t t p : / / www. h yp e rm e d ic. co m / s t yle / xm l/ xm lin d e x. h t m
5 2 3 2 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
En e s t a d ire cció n e n co n t ra ra s u n e s t u p e n d o t u t o ria l s o b re XML. Es t a d ivid id o e n d o s p a rt e s : u n a
p rim e ra m á s s e n cilla e n la q u e a p re n d e m o s co m o p o d e m o s co n s t ru ir n u e s t ro s d o cu m e n t o s e n
fu n ció n d e u n a DTD y co m o p o d e m o s m o s t ra rlo s y lu e g o u n a s e g u n d a p a rt e e n la q u e s e a b o rd a n
t e m a s m á s a va n za d o s co m o s o n lo s Xlin k, Xp o in t e r, RDF, n a m e s p a ce s e t c.

http://www.programacion.com/direcciones.xml.html (5 de 6) [20/10/2002 18:14:01]


Programación en castellano. Direcciones. Internet. XML

Tu t o ria l d e XML e n Mic ro s o ft


h t t p : / / m s d n . m icro s o ft . co m / lib ra ry/ d e fa u lt . a s p ? u rl= / lib ra ry/ e n - u s / xm ls d k3 0 / h t m / xm t u t xm lt u t o ria l. a s p
6 9 9 3 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Bu e n t u t o ria l s o b re XML d e Micro s o ft . In d is p e n s a b le s i q u e re m o s a p re n d e r a u t iliza r e l XML d e s d e
e l Exp lo re r.

Tu t o ria le s d e XML e n I BM
h t t p : / / www. s o ft wa re . ib m . co m / xm l/ e d u ca t io n / t u t o ria l- p ro g / a b s t ra ct . h t m l
6 0 1 7 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Ín d ice d e lo s t u t o ria le s q u e IBM t ie n e e n s u We b s o b re XML. Po d e is o b t e n e rlo s t a n t o e n fo rm a t o
HTML co m o PDF.

XML a t rib u t o s y e n t id a d e s
h t t p : / / www. h o t wire d . co m / we b m o n ke y/ 9 8 / 4 5 / in d e x3 a . h t m l? t w= e g 1 9 9 8 4 5 3
3 9 3 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Tu t o ria l e n e l q u e s e p ro fu n d iza e n la u t iliza ció n d e lo s a t rib u t o s y la s e n t id a d e s e n lo s d o cu m e n t o s
XML

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.xml.html (6 de 6) [20/10/2002 18:14:01]


Programación en castellano. Direcciones. Internet. WAP

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

I n t e rn e t .
W AP
3 0 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re WAP. .

» EN ES TA P AGI N A
1 . AS P
2 . Ge n e ra le s
3 . Ja va
4 . Lis t a s d e co rre o
5 . Ot ro s a rt ícu lo s
6 . Pe rl
7 . PHP
8 . Tu t o ria le s
9 . XML

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Wa p Co lo m b ia
● Co m u n id a d s o b re co m u n ica cio n e s m ó vile s e n ICT- NET
● WMLCLUB
● WAPe s

En o t ro s id io m a s
● De s a rro lla d o re s WAP e n No kia
● Ph o n e De ve lo p e r Zo n e
● Wire le s s De ve lo p e r Ne t wo rk

http://www.programacion.com/direcciones.wap.html (1 de 6) [20/10/2002 18:14:09]


Programación en castellano. Direcciones. Internet. WAP

AS P [ S u b ir]
5 d ire ccio n e s

Co ro b o ri
h t t p : / / www. co ro b o ri. co m / wa p /
4 2 2 7 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Bu e n a p á g in a co n u n o s cu a n t o s e je m p lo s s o b re co m o d e s a rro lla r a p lica cio n e s WAP u t iliza n d o
AS Ps . Es t a e n t re s id io m a s y e n t re e llo s e n ca s t e lla n o . Lo s e je m p lo s s e p u e d e n b a ja r e n fo rm a t o
ZIP.

An On lin e S h o p p in g Ca rt W AP Ap p lic a t io n u s in g W ML a n d AS P
h t t p : / / www. a s p t o d a y. co m / a rt icle s / 2 0 0 0 0 3 0 9 . h t m
3 4 8 8 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Es t u p e n d o a rt ícu lo d e By We i Me n g Le e s o b re co m o im p le m e n t a r u n ca rrit o d e la co m p ra
u t iliza n d o AS P y WML.

Co n fig u ra r e l I I S p a ra t ra b a ja r c o n W AP
h t t p : / / www. a n ywh e re yo u g o . co m / a yg / a yg / wa p / Art icle . p o ? t yp e = WAP_ Tu t o ria l&p a g e = 1 2 7 2 0
5 8 8 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art icu lo e n e l q u e s e e xp lica co m o d e b e m o s co n fig u ra r e l IIS p a ra p o d e r t ra b a ja r co n a p lica cio n e s
WAP.

W AP y AS P
h t t p : / / www. a s p t o d a y. co m / a rt icle s / 1 9 9 9 1 1 1 5 . h t m
3 7 8 7 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Bu e n a rt ícu lo d e in t ro d u cció n a WAP y co m o u t iliza rlo co n lo s AS Ps . Es t a e s la p rim e ra p a rt e d e
d o s a rt ícu lo s s o b re e l t e m a . Es crit o p o r Lu ca Pa s s a n i.

W AP , AS P y XML
h t t p : / / www. we b t e ch n iq u e s . co m / a rch ive s / 2 0 0 0 / 0 3 / p a s s a n i/
3 7 0 5 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Es t u p e n d o a rt ícu lo d e Lu ca Pa s s a n i s o b re g e n e ra r a p lica cio n e s WAP u t iliza n d o XML, AS P y XS L.
De s t a ca m o s d e e s t e a rt ícu lo la co m b in a ció n d e XML y XS LT p a ra la g e n e ra ció n d e WML.

Ge n e ra le s [ S u b ir]
1 2 d ire ccio n e s

Ch ile W AP
h t t p : / / www. ch ile wa p . cl
3 7 3 9 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Gra n va rie d a d d e re cu rs o s e n e s p a ñ o l s o b re WAP, t u t o ria le s , a rt ícu lo s , n o t icia s , e t c.

Py w e b.co m
h t t p : / / www. p ywe b . co m
3 4 7 2 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a

http://www.programacion.com/direcciones.wap.html (2 de 6) [20/10/2002 18:14:09]


Programación en castellano. Direcciones. Internet. WAP

We b q u e o fre ce la cre a ció n d e s it io s WAP d e s d e s u co n t e n id o HTML. PyWe b . co m t ra d u ce


d in á m ica m e n t e y g ra t is t o d o e l co n t e n id o d e p á g in a s HTML ( in clu ye n d o im á g e n e s , fo rm u la rio s ,
m a rco s , e t c. ) , o s o la m e n t e la in fo rm a ció n crít ica d e s u we b , p a ra q u e s e a a cce s ib le d e s d e t o d o s
lo s m ó vile s WAP. Ad e m a s : Un e m u la d o r WAP e s p e cia l q u e co n t ie n e n u e s t ra s h e rra m ie n t a s d e
t ra d u cció n , p a ra fija r la s ve rs io n e s WML d e cu a lq u ie r s it io , e s t é e n HTML o WML. Un co n s t ru ct o r
d e WBMP p a ra a yu d a rle d e n t ro d e la cre a ció n d e lo s a rg u m e n t o s u t iliza d o s co n n u e s t ra e t iq u e t a
"t ra d u ct o r d e im á g e n e s ".

W a p Co lo m b ia
h t t p : / / wa p co lo m b ia . u ca u ca . e d u . co
7 7 4 8 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Es Un p o rt a l d in á m ico e n Wa p cu yo p rin cip a l o b je t ivo e s cre a r u n a co m u n id a d p a ra Co lo m b ia d e
d e s a rro lla d o re s in t e re s a d o s e n la t e cn o lo g ía Wa p

Co m u n id a d s o b re c o m u n ic a c io n e s m ó v ile s e n I CT- N ET
h t t p : / / www. ict n e t . e s / e s p / co m u n id a d e s / m o vil/
3 8 3 8 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Co m u n id a d s o b re co m u n ica cio n e s m o vile s e n ICT- NET. Gra n ca n t id a d d e a rt ícu lo s , d o cu m e n t a ció n
y e n la ce s . Ma n t e n id a p o r Lu is Po n t .

Big w a p s it e
h t t p : / / www. g a t e - ke e p e r. o rg . u k/
1 8 5 3 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Un t u t o ria l s e n cillo y co m p re n s ib le , FAQ, d e s ca rg a s y, s o b re t o d o , u n d ire ct o rio d e e n la ce s s o b re
WAP co n ca s i d o s cie n t a s d ire ccio n e s .

a n y w h e re y o u g o
h t t p : / / www. a n ywh e re yo u g o . co m / a yg / a yg / In d e x. p o ?
5 1 5 6 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Mu y b u e n a re co p ila ció n d e in fo rm a ció n s o b re Wire le s , WAP y Blu e t o o t h .

D e s a rro lla d o re s W AP e n N o k ia
h t t p : / / www. fo ru m . n o kia . co m / m a in / 1 , 6 6 6 8 , 1 _ 1 , 0 0 . h t m l
3 9 4 4 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Zo n a d e No kia d e la We b d e WAP d e d ica d a a lo s d e s a rro lla d o re s .

Eric s s o n W AP d e v e lo p e r Zo n e
h t t p : / / www. e rics s o n . co m / d e ve lo p e rs zo n e /
3 1 9 6 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Zo n a d e la We b d e Erics s o n d e d ica d a a lo s d e s a rro lla d o re s WAP

P h o n e D e v e lo p e r Zo n e
h t t p : / / u p d e v. p h o n e . co m /
3 4 0 6 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
S e cció n d e Ph o n e d e d ica d a a lo s d e s a rro lla d o re s WAP.

W AP Fo ru m
h t t p : / / www. wa p fo ru m . co m /
3 1 0 7 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Pá g in a o ficia l d e WAP. Es t a We b e s t a fo rm a d a p o r la s o rg a n iza cio n e s y e m p re s a s e n ca rg a d a s d e
d e s a rro lla r la s e s p e cifica cio n e s re la cio n a d a s co n e s t e t e m a .

http://www.programacion.com/direcciones.wap.html (3 de 6) [20/10/2002 18:14:09]


Programación en castellano. Direcciones. Internet. WAP

W a p h o le s u n
h t t p : / / www. wa p h o le s u n . co m /
7 2 1 2 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
We b s o b re WAP e n in g le s d e s a rro lla d a p o r e l e s p a ñ o l Ca rlo s Fe rn á n d e z. In d is p e n s a b le p a ra lo s
q u e e s t e n in t e re s a d o s e n d e s a rro lla r ju e g o s p a ra m ó vile s .

W ire le s s D e v e lo p e r N e t w o rk
h t t p : / / www. wire le s s d e vn e t . co m /
3 4 9 3 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
We b d e in d is p e n s a b le vis it a p a ra e s t a r a l d ía e n e l d e s a rro llo d e a p lica cio n e s Wire le s s .

Ja v a [ S u b ir]
3 d ire ccio n e s

Ge n e ra r W ML d e s d e u n S e rv le t
h t t p : / / ja va . p ro g ra m a cio n . n e t / t a lle r/ wm ls e rvle t . h t m
3 2 6 5 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art ícu lo e n ca s t e lla n o d e s d e e l q u e s e e xp lica co m o g e n e ra r WML d e s d e u n s e rvle t .

Bu ild in g S e rv le t s t o Ou t p u t W ML Co n t e n t
h t t p : / / www. a n ywh e re yo u g o . co m / a yg / a yg / wa p / Art icle . p o ? t yp e = WAP_ Tu t o ria l&p a g e = 1 0 7 4 3
4 9 7 5 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art icu lo e n e l q u e s e e xp lica co m o g e n e ra r WML d e s d e u n s e rvle t .

D e v e lo p in g W ire le s s Ap p lic a t io n s w it h W AP , W ML, a n d JS P


h t t p : / / www. xm l. co m / p u b / 2 0 0 0 / 0 6 / 2 6 / xm ld e vco n / wire le s s a p p s . h t m l
3 1 8 2 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art ícu lo e n e l q u e Da vid S im s e xp lica la s ve n t a ja s d e d e s a rro lla r a p lica cio n e s WAP u t iliza n d o JS P,
XML y XS LT.

Lis t a s d e c o rre o [ S u b ir]


2 d ire ccio n e s

W AP e s
h t t p : / / e s . e g ro u p s . co m / g ro u p / wa p e s
4 6 8 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Lis t a s o b re t e cn o lo g ía WAP e n ca s t e lla n o .

w m lp ro g ra m m in g
h t t p : / / www. e g ro u p s . co m / g ro u p / wm lp ro g ra m m in g
3 0 0 8 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Lis t a e n in g le s s o b re WML y WMLS crip t d irig id a a d e s a rro lla d o re s d e a p lica cio n e s WAP.

http://www.programacion.com/direcciones.wap.html (4 de 6) [20/10/2002 18:14:09]


Programación en castellano. Direcciones. Internet. WAP

Ot ro s a rt íc u lo s [ S u b ir]
1 d ire cció n

Co n fig u ra r Ap a c h e p a ra W ire le s s Bro w s e rs


h t t p : / / m ika l. o rg / in t e re s t s / a rt icle s / a rt icle 0 0 0 1 . js p
3 2 8 3 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Art ícu lo e n e l q u e s e e xp lica co m o d e b e m o s co n fig u ra r n u e s t ro s e rvid o r Ap a ch e p a ra q u e p u e d a
s e rvir p á g in a s WML.

P e rl [ S u b ir]
1 d ire cció n

Z- Y- G- O
h t t p : / / wa p . z- y- g - o . co m / t o o ls /
3 1 2 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Lib re ria d e e je m p lo s e n Pe rl p a ra t ra b a ja r co n WML: WML t o WMLc, HTML t o WML, e t c.

P HP [ S u b ir]
1 d ire cció n

HAW HAW
h t t p : / / www. h a wh a w. d e
3 2 8 1 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Lib re ría d e cla s e s PHP p a ra g e n e ra r fa cilm e n t e t a n t o p á g in a s HTML co m o p á g in a s WML.

Tu t o ria le s [ S u b ir]
3 d ire ccio n e s

ABC d e l W AP
h t t p : / / u s u a rio s . lyco s . e s / m a n u a le s wa p
1 2 7 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Ma n u a l d e WAP, m á s e n fo ca d o a l p ro t o co lo e n s í q u e a lo s le n g u a je s WML y WMLS crip t .

W a p fa c il
h t t p : / / wa p fa cil. e s g ra t is . n e t /
9 9 8 5 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a

http://www.programacion.com/direcciones.wap.html (5 de 6) [20/10/2002 18:14:09]


Programación en castellano. Direcciones. Internet. WAP

Un a d e la s p rim e ra s We b s s o b re Wa p e n ca s t e lla n o . Tie n e u n t u t o ria l d e WML, e je m p lo s d e


WMLS crip t y u n a re co p ila ció n d e m a n u a le s y d o cu m e n t o s s o b re WAP t ra d u cid o s a l ca s t e lla n o .

W MLCLUB
h t t p : / / www. wm lclu b . co m
4 7 0 0 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
In t e re s a n t e We b co n g ra n ca n t id a d d e in fo rm a ció n s o b re WAP. Tie n e u n t u t o ria l d e WML, o t ro d e
WMLS crip t y u n m o n t ó n d e s e ccio n e s : e n la ce s , o fe rt a s d e t ra b a jo , u n e s t u p e n d o FAQ, e t c. .

XML [ S u b ir]
2 d ire ccio n e s

A Mo b ile W in d o w o n o u r P o rt a l
h t t p : / / www. xm l. co m / p u b / 2 0 0 0 / 0 5 / 3 1 / s t yle / in d e x. h t m l
3 1 5 0 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
In t e re s a n t is im o a rt ícu lo d e Did ie r Ma rt in s o b re co m o g e n e ra r u n p o rt a l WAP y HTML u t iliza n d o
XML y XS LT.

Co n t e n t Ma n a g e m e n t a n d D is t rib u t io n Us in g XML
h t t p : / / www. wire le s s d e vn e t . co m / a rt icle s / ju n 2 0 0 0 / xm lca s t . h t m l
3 0 7 3 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Mu y b u e n a rt ícu lo s o b re co m o p o d e m o s cre a r co n t e n id o p a ra n u e s t ra We b e n d ife re n t e s fo rm a t o s
( HTML, RS S , WML) u t iliza n d o XML.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.wap.html (6 de 6) [20/10/2002 18:14:09]


Programación en castellano. Direcciones. Teoría

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Te o ría
9 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re t e o ría d e la p ro g ra m a ció n .

● Alg o rit m o s ( 3 )
● Me t o d o lo g ía ( 2 )
● Re d e s ( 1 )
● Te o ría d e b a s e s d e d a t o s ( 1 )
● UML ( 2 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.teoria.html [20/10/2002 18:14:12]


Programación en castellano. Direcciones. Teoría. Metodología

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Te o ría .
Me t o d o lo g ía
2 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re m e t o d o lo g ía d e la p ro g ra m a ció n .

» EN ES TA P AGI N A
1 . Cu rs o s

Cu rs o s [ S u b ir]
2 d ire ccio n e s

I n t ro P ro g ra
h t t p : / / a r. g e o cit ie s . co m / lu is _ p irir/
5 4 7 9 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Pe q u e ñ o cu rs o , n o d e m a s ia d o co m p le t o , d e in t ro d u cció n a la p ro g ra m a cio n , ce n t ra d a e n la
e la b o ra ció n d e a lg o rit m o s .

Cu rs o d e Me t o d o lo g ía d e la p ro g ra m a c ió n
h t t p : / / 6 4 . 2 2 6 . 1 8 8 . 2 6 / s ivn e t wo rk- www/ cu rs o s _ g ra t is / In d ice % 2 0 Me t o . h t m
2 4 6 4 0 vis it a s | Pu n t u a ció n : ( 7 5 vo t o s ) Vo t a
Co m p le t o cu rs o d e m e t o d o lo g ía d e la p ro g ra m a ció n . Id e a l p a ra a q u e llo s q u e n o h a ya n p ro g ra m a d o
n u n ca .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.metodologia.html [20/10/2002 18:14:14]


Programación en castellano. Direcciones. Teoría. UML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Te o ría . UML
2 d ire ccio n e s
Dire ccio n e s s o b re Un ifie d Mo d e lin g La n g u a g e , e l e s t á n d a r d e re p re s e n t a ció n d e d is e ñ o o rie n t a d o a
o b je t o s , n a cid o d e la s ce n iza s d e OMT y Bo o ch .

» EN ES TA P AGI N A
1 . Do cu m e n t a cio n

D o c u m e n t a c io n [ S u b ir]
2 d ire ccio n e s

Ta lle r UML e n Vic o . o rg


h t t p : / / www. vico . o rg
2 3 0 6 5 vis it a s | Pu n t u a ció n : ( 6 8 vo t o s ) Vo t a
Co n cre t a y p rá ct ica re co p ila ció n d e in fo rm a ció n s o b re UML. Mu y in t e re s a n t e s la s p la n t illa s q u e
o fre ce p a ra : m a t ricu la r ca s o s d e u s o , p ro ye ct o s , e t c.

Cu rs o d e An á lis is y D is e ñ o Orie n t a d o a Ob je t o s
h t t p : / / www. d s ic. u p v. e s / ~ u m l/
2 5 9 1 2 vis it a s | Pu n t u a ció n : ( 5 1 vo t o s ) Vo t a
Re co p ila ció n e n d ife re n t e s fo rm a t o s ( PDF, Po we rPo in t ) d e u n cu rs o d e UML im p a rt id o p o r d o s
p ro fe s o re s d e la Un ive rs id a d Po lit e cn ica d e Va le n cia . Dis p o n e d e p rá ct ica s a re a liza r co n la
h e rra m ie n t a Ra t io n a l Ro s e .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.uml.html [20/10/2002 18:14:16]


Programación en castellano. Direcciones. Teoría. Algoritmos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Te o ría .
Alg o rit m o s
3 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s co n a lg o rit m o s o s o b re cre a ció n d e a lg o rit m o s ( a lg o rít m ica ) .

» EN ES TA P AGI N A
1 . Re co p ila cio n e s d e a lg o rit m o s

Re c o p ila c io n e s d e a lg o rit m o s [ S u b ir]


3 d ire ccio n e s

ALGORI TMI A
h t t p : / / www. a lg o rit m ia . cjb . n e t
1 8 0 9 1 vis it a s | Pu n t u a ció n : ( 7 4 vo t o s ) Vo t a
Re co p ila ció n d e lo s a lg o rit m o s m á s h a b it u a le s d e t a lla d a m e n t e e xp lica d o s y o rg a n iza d o s p o r
s e ccio n e s .

Alg o rit h m Arc h iv e


h t t p : / / wa n n a b e . g u ru . o rg / a lg /
2 0 8 7 5 vis it a s | Pu n t u a ció n : ( 2 7 vo t o s ) Vo t a
In t e re s a n t e y b ie n o rd e n a d o ín d ice d e a lg o rit m o s d e lo m á s d ive rs o , q u e va n d e la o rd e n a ció n a la
In t e lig e n cia Art ificia l e n lo s ju e g o s . De s a fo rt u n a d a m e n t e , e s t á b a s t a n t e in co m p le t o .

N u m e ric a l Re c ip e s in C
h t t p : / / www. n r. co m
1 0 5 6 1 vis it a s | Pu n t u a ció n : ( 1 6 vo t o s ) Vo t a
Ve rs ió n o n lin e ( e n PS y PDF) d e l fa m o s o lib ro d e a lg o rit m o s d e cá lcu lo n u m é rico . No s e p u e d e
b a ja r p o r co m p le t o , s in o a lg o rit m o p o r a lg o rit m o , lo q u e lo h a ce m á s a d e cu a d o p a ra re s o lve r
a lg ú n p ro b le m a e n co n cre t o . Ad e m á s lo s a lg o rit m o s n o s e p u e d e n u s a r s in p e rm is o d e lo s a u t o re s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.algoritmos.html [20/10/2002 18:14:18]


Programación en castellano. Direcciones. Lenguajes imperativos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Le n g u a je s
im p e ra t iv o s
4 5 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re le n g u a je s im p e ra t ivo s .

● Ad a ( 8 )
● C (9)
● Clip p e r & xBa s e ( 9 )
● Co b o l ( 4 )
● En s a m b la d o r ( 6 )
● Eu p h o ria ( 1 )
● Fo rt ra n ( 1 )
● Pa s ca l ( 5 )
● Qu ickBa s ic ( 2 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.imperativos.html [20/10/2002 18:14:20]


Programación en castellano. Direcciones. Lenguajes imperativos. C

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Le n g u a je s Nuestras zonas

im p e ra t iv o s . C
9 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re e l p o p u la r le n g u a je C.

» EN ES TA P AGI N A
1 . Cu rs o s
2 . Ge n e ra le s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Go rka ´ s We b Pa g e
● Le n g u a je C

En o t ro s id io m a s
● UNIX S ys t e m Ca lls a n d S u b ro u t in e s u s in g C

Cu rs o s [ S u b ir]
4 d ire ccio n e s

Cu rs o d e 'P e re g rin o a s u e ld o '


h t t p : / / www. g e o cit ie s . co m / S ilico n Va lle y/ Drive / 1 0 3 5 /
1 1 9 1 7 vis it a s | Pu n t u a ció n : ( 1 4 vo t o s ) Vo t a
Un b u e n y co m p le t o cu rs o d e C, a u n q u e p a re ce d e d ica r u n e s p a cio e xce s ivo a la p ro g ra m a ció n
g rá fica e n u n s is t e m a co n cre t o ( e l DOS ) , q u e e s d e in t e ré s a lg o m á s m a rg in a l.

Go rk a ´ s W e b P a g e
h t t p : / / www. g e o cit ie s . co m / g _ u rru t ia /
8 1 2 5 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Co n t ie n e u n b u e n cu rs o d e C, d e s a fo rt u n a d a m e n t e in co m p le t o , y d ive rs a s p á g in a s s o b re e l
co m p ila d o r DJGPP, in clu ye n d o a yu d a p a ra s u in s t a la ció n e in fo rm a ció n s o b re s u t ra d u cció n a l
ca s t e lla n o .

P ro g ra m a c ió n e n C, p o r Virg ilio Gó m e z
h t t p : / / www. g e o cit ie s . co m / S ilico n Va lle y/ Ga ra g e / 8 2 1 1 / fro n t a l/ p ro g c. h t m
1 4 4 8 8 vis it a s | Pu n t u a ció n : ( 1 3 vo t o s ) Vo t a

http://www.programacion.com/direcciones.c.html (1 de 2) [20/10/2002 18:14:23]


Programación en castellano. Direcciones. Lenguajes imperativos. C

Lo m e jo r d e e s t e m a n u a l e s la a yu d a q u e o fre ce a l p rin cip ia n t e e n s e ñ a n d o a lg u n o s co n ce p t o s


b á s ico s .

UN I X S y s t e m Ca lls a n d S u b ro u t in e s u s in g C
h t t p : / / www. cs . cf. a c. u k/ Da ve / C/
5 9 9 1 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Un lib ro co m p le t o d is p o n ib le e n HTML e n e l q u e n o s ó lo e n s e ñ a C, s in o co m o a cce d e r d e s d e e s t e
le n g u a je a la s lla m a d a s d e l s is t e m a d e Un ix.

Ge n e ra le s [ S u b ir]
5 d ire ccio n e s

Le n g u a je C
h t t p : / / www. je a n p a u l. co m . a r
2 7 2 3 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Pá g in a co n e n la ce s a m a n u a le s , t u t o ria le s e in fo rm a cio n d ive rs a s o b re p ro g ra m a cio n e n C y t e m á s
a fin e s ( C+ + , vis u a l C+ + , C# , Op e n GL, Dire ct X, Lin u x, e t c. ) .

Mu n d o C. n e t
h t t p : / / www. m u n d o c. n e t
3 5 4 3 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Po rt a l d e d ica d o a C y C+ + co n u n b u e n cu rs o d e C y u n b u e n n ú m e ro d e e je m p lo s d e có d ig o
fu e n t e y a lg u n a s u t ilid a d e s , va rio s co m p ila d o re s , t ru co s , fo ro , ch a t e , in clu s o , o fe rt a s d e e m p le o .

Le n g u a je C
h t t p : / / www. le n g u a je - c. e s . vg
6 1 5 5 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Pá g in a e n la q u e p o d rá e n co n t ra r in fo rm a ció n , m a n u a le s , a rt ícu lo s , e t c, s o b re e l Le n g u a je C

El Rin c ó n d e l C
h t t p : / / www. e lrin co n d e lc. co m
1 2 9 2 9 vis it a s | Pu n t u a ció n : ( 1 8 vo t o s ) Vo t a
Cu rs o s d e p ro g ra m a ció n e n C , m u ch o có d ig o fu e n t e , b o le t in e s , lis t a s d e co rre o e in fo rm a ció n
s o b re co m p ila d o re s d e C/ C+ + . El p u n t o d e e n cu e n t ro d e lo s p ro g ra m a d o re s d e C.

D JGP P
h t t p : / / www. d e lo rie . co m / d jg p p /
9 7 9 5 vis it a s | Pu n t u a ció n : ( 1 5 vo t o s ) Vo t a
La p á g in a d e l fa m o s o co m p ila d o r d e C p a ra DOS / Win d o ws . Es u n a ve rs ió n d e l GNU C p re s e n t e e n
m u ch o s Un ix p a ra e s t o s s is t e m a s o p e ra t ivo s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.c.html (2 de 2) [20/10/2002 18:14:23]


Programación en castellano. Direcciones. Lenguajes imperativos. Pascal

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Le n g u a je s Nuestras zonas

im p e ra t iv o s . P a s c a l
5 d ire ccio n e s
Re co p ila ció n d e d ire ccio n e s s o b re e l le n g u a je Pa s ca l y s u s u ce s o r, Tu rb o Pa s ca l.

» EN ES TA P AGI N A
1 . Cu rs o s
2 . Ge n e ra le s

Cu rs o s [ S u b ir]
3 d ire ccio n e s

Eje rc ic io s re s u e lt o s
h t t p : / / u s u a rio s . lyco s . e s / Vict o rS a n ch e z2 / t u t o ria le s / t u t o ria le s . h t m
4 7 1 0 vis it a s | Pu n t u a ció n : ( 2 1 vo t o s ) Vo t a
Pá g in a d o n d e p u e d e s e n co n t ra r m á s d e 2 0 0 e je rcicio s re s u e lt o s e n Pa s ca l. Ad e m á s , s i t ie n e s
a lg u n a d u d a p u e d e s p re g u n t a r a s u a u t o r p a ra q u e in t e n t e e ch a rt e u n a m a n o .

Tu t o ria l d e Tu rb o P a s c a l 7 . 0
h t t p : / / www. t e rra . e s / p e rs o n a l/ ra u l_ zm /
1 1 5 0 8 vis it a s | Pu n t u a ció n : ( 4 0 vo t o s ) Vo t a
Pa rco t u t o ria l s o b re Tu rb o Pa s ca l 7 . 0 . No e n t ra e n p ro fu n d id a d e n la s p o s ib ilid a d e s d e l le n g u a je n i
e xp lica d e m a s ia d o lo s co n ce p t o s , p o r lo q u e s ó lo re s u lt a a d e cu a d o p a ra lo s ya in icia d o s e n e l
m u n d o d e la p ro g ra m a ció n .

Tu t o ria l d e Tu rb o P a s c a l
h t t p : / / m e m b e rs . xo o m . co m / t u t o ria le s
1 1 3 5 0 vis it a s | Pu n t u a ció n : ( 2 1 vo t o s ) Vo t a
Mu y b u e n t u t o ria l d e Tu rb o Pa s ca l.

http://www.programacion.com/direcciones.pascal.html (1 de 2) [20/10/2002 18:14:25]


Programación en castellano. Direcciones. Lenguajes imperativos. Pascal

Ge n e ra le s [ S u b ir]
2 d ire ccio n e s

P á g in a d e P a s c a l d e N a c h o Ca b a n e s
h t t p : / / m e m b e rs . e s . t rip o d . d e / n ca b a n e s / p a s ca l. h t m
7 9 8 0 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Un b u e n p u n t o d e in t ro d u cció n a l Pa s ca l, co n cu rs o s y e n la ce s a co m p ila d o re s in clu id o s .

Fre e p a s c a l
h t t p : / / www. fre e p a s ca l. o rg /
8 4 0 8 vis it a s | Pu n t u a ció n : ( 2 2 vo t o s ) Vo t a
Pá g in a q u e a lb e rg a e l p ro ye ct o Fre e p a s ca l, q u e in t e n t a cre a r u n co m p ila d o r g ra t u it o y
m u lt ip la t a fo rm a d e Ob je ct Pa s ca l, la ve rs ió n o rie n t a d a a o b je t o d e l le n g u a je Pa s ca l cre a d a p o r
Bo rla n d .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.pascal.html (2 de 2) [20/10/2002 18:14:25]


Programación en castellano. Direcciones. Varios

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Va rio s
2 7 d ire ccio n e s
Ca t e g o ría q u e e n g lo b a a q u e lla s d ire ccio n e s d e p ro g ra m a ció n q u e n o p u d ie ro n s e r ca t a lo g a d a s e n
o t ra s p á g in a s .

● Ge n e ra le s ( 1 4 )
● Grá fica ( 5 )
● His t o ria ( 4 )
● Pe rs o n a le s ( 1 )
● Pu b lica cio n e s ( 1 )
● S o ft wa re lib re ( 2 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.varios.html [20/10/2002 18:14:26]


Programación en castellano. Direcciones. Varios. Generales

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Va rio s .
Ge n e ra le s
1 4 d ire ccio n e s
Dire ccio n e s q u e e n g lo b a n d e m a s ia d o s a s p e ct o s d e la p ro g ra m a ció n co m o p a ra p o d e r s e r
re s t rin g id o s e n u n a s o la ca t e g o ría .

» EN ES TA P AGI N A
1 . Bu s ca d o re s
2 . Cu rs o s
3 . Ge n e ra le s
4 . Lis t a s d e co rre o

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● La we b d e l p ro g ra m a d o r
● El Gu ru Pro g ra m a d o r
● Ma g iOS

Bu s c a d o re s [ S u b ir]
1 d ire cció n

Bu s c a d o c
h t t p : / / b u s ca d o c. o d s . o rg
2 0 8 9 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Bu s ca d o r d e d o cu m e n t a cio n in fo rm á t ica s o la m e n t e e n ca s t e lla n o . Tie n e in d e xa d a s la m a yo ria d e
we b s e n ca s t e lla n o q u e o fre ce n d o cu m e n t a ció n in fo rm a t ica ( in clu ye n d o la n u e s t ra ) .

http://www.programacion.com/direcciones.generales.html (1 de 4) [20/10/2002 18:14:30]


Programación en castellano. Direcciones. Varios. Generales

Cu rs o s [ S u b ir]
2 d ire ccio n e s

Cy b e rt u t o s . c o m
h t t p : / / www. cyb e rt u t o s . co m
5 8 6 7 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Dis p o n e d e a lg u n o s t u t o ria le s y m a n u a le s d e lo s m a s u s a d o s le n g u a je s d e p ro g ra m a cio n ,
h e rra m ie n t a s d e d is e ñ o we b y g ra fico y a lg u n o s e n la ce s re la cio n a d o s . Es ca s o d e m a t e ria l.

Ap re n d a I n fo rm á t ic a c o m o s i e s t u v ie ra e n P rim e ro
h t t p : / / fca p ra . ce it . e s / Ayu d a In f/
9 9 1 6 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Dive rs o s cu rs o s e n fo rm a t o PDF o fre cid o s a s u s e s t u d ia n t e s p o r la Un ive rs id a d d e Na va rra . Cla ro s
y co m p le t o s , e n o ca s io n e s p u e d e n re s u lt a r d ifícile s a l le ct o r n o in icia d o .

Ge n e ra le s [ S u b ir]
1 0 d ire ccio n e s

El Tu t o ria l
h t t p : / / www. e lt u t o ria l. co m
6 4 4 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Po rt a l d e d o cu m e n t a ció n t é cn ica . Co n s is t e b á s ica m e n t e e n u n b u e n n ú m e ro d e e n la ce s b ie n
o rg a n iza d o s a a rt ícu lo s , t u t o ria le s , lib ro s , e t c. . Ta m b ié n d is p o n e d e fo ro s p ro p io s y u n g lo s a rio d e
t é rm in o s t é cn ico s .

Ma g iOS
h t t p : / / www. m a g io s . co m
1 0 4 6 vis it a s | Pu n t u a ció n : ( 1 7 vo t o s ) Vo t a
Po rt a l e n cre cim ie n t o d e d ica d o a la p ro g ra m a ció n y la s e g u rid a d in fo rm á t ica , co n n o t icia s , a rt ícu lo s
y a lg ú n t u t o ria l.

El Gu ru P ro g ra m a d o r
h t t p : / / www. e lg u ru p ro g ra m a d o r. co m . a r
2 5 5 3 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Ag ra d a b le p á g in a d e d ica d a a la p ro g ra m a cio n y e l d e s a rro llo we b . Tie n e b a s t a n t e s a rt icu lo s ,
a lg u n o s t u t o ria le s , fo ro s , y e n la ce s . Zo n a s e s p e cia liza d a s d e AS P, Vis u a l Ba s ic, Fla s h , Ja va S crip t ,
S QL, XML, HTML y o t ro s le n g u a je s .

CGR S o ft w a re . c o m
h t t p : / / www. cg rs o ft wa re . co m
1 1 9 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
"Me g a b a s e " ( s e g ú n s u s a u t o re s ) d e re cu rs o s p a ra p ro g ra m a d o re s . In clu ye m a n u a le s , e je m p lo s d e
có d ig o , p ro g ra m a s y re cu rs o s va rio s p a ra p ro g ra m a d o re s .

El Rin c ó n d e l P ro g ra m a d o r ( b is )
h t t p : / / www. e lrin co n d e lp ro g ra m a d o r. co m

http://www.programacion.com/direcciones.generales.html (2 de 4) [20/10/2002 18:14:30]


Programación en castellano. Direcciones. Varios. Generales

1 3 6 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Art ícu lo s , n o t icia s , t ru co s y d ive rs o s re cu rs o s p a ra lo s p ro g ra m a d o re s . Dis p o n e d e ca n a le s
e s p e cia liza d o s d e AS P, C y C+ + , De lp h i, Ja va , HTML, Fla s h y m u ch o s o t ro s . Na d a q u e ve r co n e l
o t ro rin có n d e l p ro g ra m a d o r, q u e s e s e p a .

El Rin c ó n d e l P ro g ra m a d o r
h t t p : / / rin co n p ro g . m e t ro p o li2 0 0 0 . co m /
4 8 5 3 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Un rin có n p a ra t o d o s a q u e llo s in t e re s a d o s p o r la in fo rm á t ica e n g e n e ra l, y p o r la p ro g ra m a ció n e n
p a rt icu la r, co n in t e re s a n t e s t u t o ria le s s o b re Pyt h o n , C, Pro g ra m a ció n g rá fica , e t c.

La w e b d e l p ro g ra m a d o r
h t t p : / / www. la we b d e lp ro g ra m a d o r. co m /
5 2 7 0 vis it a s | Pu n t u a ció n : ( 7 vo t o s ) Vo t a
Po s ib le m e n t e , la we b m á s vis it a d a d e p ro g ra m a ció n e n ca s t e lla n o . Po s e e u n g ra n ín d ice d e
re cu rs o s y d o cu m e n t a ció n p a ra e l p ro g ra m a d o r. S u m a yo r d e fe ct o e s u n a e s t ru ct u ra q u e d ificu lt a
la n a ve g a ció n . Ult im a m e n t e h a a ñ a d id o u n b u s ca d o r.

la Va ria b le
h t t p : / / www. la va ria b le . co m
3 1 3 2 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
En la Va ria b le . co m s e p u e d e n e n co n t ra r t ru co s , a rt ícu lo s y t u t o ria le s s o b re AS P, CGI, XML, Ja va ,
S QL, Ja va S crip t , VBS crip t y o t ra s n u e va s t e cn o lo g ía s .

COD E. BOX. S K
h t t p : / / co d e . b o x. s k
2 5 7 3 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
Un b u e n lu g a r p a ra p ro g ra m a d o re s , co n fo ro s , e n la ce s y t u t o ria le s . Es p e cia lm e n t e in t e re s a n t e s
a lg u n a s d e s u s s e ccio n e s , co m o la d e PHP.

P ro g ra m m e r's h e a v e n
h t t p : / / www. p ro g ra m m e rs h e a ve n . co m /
3 3 0 4 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Un a e xce le n t e re co p ila ció n d e e n la ce s ( u n o s 2 4 0 0 ) y fich e ro s d e u t ilid a d p a ra e l p ro g ra m a d o r
( e je m p lo s , h e rra m ie n t a s ) t o t a lm e n t e g ra t u it o s .

Lis t a s d e c o rre o [ S u b ir]


1 d ire cció n

La t iu m S o ft w a re
h t t p : / / www. la t iu m s o ft wa re . co m
1 0 1 6 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
El p rin cip a l in t e ré s d e e s t a we b s o n s u s b o le t in e s . Po s e e d e Pa s ca l ( De lp h i, Kylix) , Vis u a l Ba s ic, y
u n o g e n é rico p a ra t o d o t ip o d e p ro g ra m a d o re s .

http://www.programacion.com/direcciones.generales.html (3 de 4) [20/10/2002 18:14:30]


Programación en castellano. Direcciones. Varios. Generales

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.generales.html (4 de 4) [20/10/2002 18:14:30]


Programación en castellano. Direcciones. Varios. Gráfica

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D ire c c io n e s . Nuestras zonas

Va rio s .
Grá fic a
5 d ire ccio n e s
Dire ccio n e s s o b re p ro g ra m a ció n g rá fica , lib re ría s , 3 D, e t c. . S in re s t ricció n d e le n g u a je s u t iliza d o s .

» EN ES TA P AGI N A
1 . Ge n e ra le s
2 . Cu rs o s

» I MP RES CI N D I BLE VI S I TAR


En ca s t e lla n o
● Pro g ra m a ció n Grá fica
● 3 Du p . co m - El Po rt a l d e l Dis e ñ o 3 D y Mu lt im e d ia

Ge n e ra le s [ S u b ir]
3 d ire ccio n e s

El m u n d o d e l c a o s
h t t p : / / www. e lm u n d o d e lca o s . t k/
1 5 5 1 vis it a s | Pu n t u a ció n : ( 4 vo t o s ) Vo t a
Pá g in a d e d ica d a a la p ro g ra m a ció n g rá fica e n C y C+ + , co n e s p e cia l h in ca p ié e n la p ro g ra m a ció n
d e fra ct a le s ( fu n cio n e s m a t e m á t ica s e n va ria b le co m p le ja ) .

3 D u p . c o m - El P o rt a l d e l D is e ñ o 3 D y Mu lt im e d ia
h t t p : / / e s . 3 d u p . co m
5 4 4 6 vis it a s | Pu n t u a ció n : ( 4 6 vo t o s ) Vo t a
Ve rs ió n e n Es p a ñ o l d e l Po rt a l e s p e cia liza d o e n Dis e ñ o 3 D y Mu lt im e d ia q u e cu e n t a co n Mo t o r d e
Bú s q u e d a , No t icia s , We b s y Co rre o Gra t u it o s , Fo ru m s , Ch a t s , Tie n d a On lin e , Ga le ría d e Art is t a s y
Zo n a d e Do wn lo a d co n Te xt u ra s , Mo d e lo s 3 D y Plu g in s .

P ro g ra m a c ió n Grá fic a
h t t p : / / www. g e o cit ie s . co m / va lco e y/ in d e x. h t m l
8 4 7 8 vis it a s | Pu n t u a ció n : ( 9 vo t o s ) Vo t a
Co m p le t a p á g in a co n n u m e ro s o s a rt ícu lo s s o b re p ro g ra m a ció n g rá fica e n Vis u a lC+ + , Op e n GL y
Vis u a l Ba s ic. Ta m b ié n e xa m in a a fo n d o la t e o ría d e fra ct a le s , g rá fico s 2 D y 3 D y la s m a t e m á t ica s
n e ce s a ria s p a ra p o d e r e n t e n d e r t o d o lo d e m á s , a u n q u e s e a p o co .

http://www.programacion.com/direcciones.grafica.html (1 de 2) [20/10/2002 18:14:34]


Programación en castellano. Direcciones. Varios. Gráfica

Cu rs o s [ S u b ir]
2 d ire ccio n e s

Bre v e Tu t o ria l d e p ro g ra m a c ió n c o n Mo t if
h t t p : / / www. co m p u lin u x. co m / d ie g o / d a t a / 1 1 0 / g m _ in d ice . h t m l
2 1 1 4 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Bre ve Tu t o ria l d e p ro g ra m a ció n co n Mo t if co n e je m p lo s y t e xt o s s e n cillo s y d id á ct ico s .

Tu t o ria l d e 3 D
h t t p : / / u s u a rio s . m a p t e l. e s / jo s e cp u jo l/
4 9 8 3 vis it a s | Pu n t u a ció n : ( 1 0 vo t o s ) Vo t a
Bu e n t u t o ria l s o b re lo s fu n d a m e n t o s d e la p ro g ra m a ció n e n 3 D. Au n q u e p u e d a e ch a r p a ra a t rá s e l
h e ch o d e q u e lo s e je m p lo s y p ro g ra m a s e s t é n h e ch o s e n Tu rb o Pa s ca l, co n vie n e e ch a rle u n
vis t a zo p a ra e n t e n d e r có m o fu n cio n a a b a jo n ive l la p ro g ra m a ció n e n 3 D.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/direcciones.grafica.html (2 de 2) [20/10/2002 18:14:34]


Programación en castellano. Los últimos enlaces

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Lo s ú lt im o s Nuestras zonas
e n la c e s
En e s t a p á g in a
p o d rá s a cce d e r a
lo s ú lt im o s e n la ce s
a ñ a d id o s a n u e s t ra
ba se de da tos.

P HP y fu n c io n e s d e FTP En In t e rn e t / PHP
h t t p : / / p ro g ra m a cio n . co m / p h p / a rt icu lo . fli_ p h p ft p . h t m l
1 4 3 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Art icu lo e n ca s t e lla n o d o n d e s e e xp lica co m o re a liza r FTP d e s d e a p lica cio n e s e n PHP.

Tu t o ria l d e XP a t h . Ve r. 1 . 0 En In t e rn e t / XS L, XS LT y Xp a t h
h t t p : / / g e n e u ra . u g r. e s / ~ vict o r/ cu rs illo s / xm l/ XPa t h /
1 3 9 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Tu t o ria l in t ro d u ct o rio a la t e cn o lo g ía XPa t h .

Ge n e ra c ió n d e p á g in a s W e b u s a n d o XS LT y XML En In t e rn e t / XS L, XS LT y Xp a t h
h t t p : / / g e n e u ra . u g r. e s / ~ jm e re lo / XS LT/
3 2 4 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Pe q u e ñ o t u t o ria l s o b re XS LT y có m o g e n e ra r we b s a p a rt ir d e fich e ro s XML u s a n d o S a xo n o Xa la n .

W e b d e fLI P I S En In t e rn e t / PHP
h t t p : / / www. flip is . n e t
6 9 4 vis it a s | Pu n t u a ció n : ( 1 vo t o ) Vo t a
La p á g in a d e l e n ca rg a d o d e PHP e n ca s t e lla n o ; co n s t a p rin cip a lm e n t e d e a rt ícu lo s y t u t o ria le s
s o b re PHP y t e cn o lo g ía s a fin e s .

I n d ic e P ERL En Le n g u a je s d e s crip t / Pe rl
h t t p : / / lm s a iza rro b a . t rip o d . co m / In d ice PERL. h t m l
8 1 8 vis it a s | Pu n t u a ció n : ( 2 vo t o s ) Vo t a
Pe q u e ñ a p á g in a d o n d e s e in d ica d o n d e co n s e g u ir PERL y s e d a n a lg u n o s e je m p lo s d e u s o .

P HP p a ra t o rp e s En In t e rn e t / PHP
h t t p : / / p h p - h is p a n o . n e t
2 2 9 7 vis it a s | Pu n t u a ció n : ( 2 0 vo t o s ) Vo t a
We b d e l ca n a l # p h p _ p a ra _ t o rp e s d e l IRC- His p a n o . Dis p o n e d e t u t o ria le s , s crip t s y fo ro s , co n
co n t e n id o s p ro p io s . De s a fo rt u n a d a m e n t e h a y q u e re g is t ra rs e p a ra a cce d e r.

Cu rs o d e Ha s k e ll d e Je ro e n Fo k k e r

http://www.programacion.com/ultimos.php (1 de 2) [20/10/2002 18:14:40]


Programación en castellano. Los últimos enlaces

h t t p : / / www. cs . u u . n l/ p e o p le / je ro e n / co u rs e s / fp - s p . p d f En Ot ro s le n g u a je s / Ha s ke ll
1 0 0 4 vis it a s | Pu n t u a ció n : ( 5 vo t o s ) Vo t a
Cu rs o e m p le a d o e n la s cla s e s d e la Un ive rs id a d d e Ut re ch t . Aú n cu a n d o s e re fie ra a Go fe r, e n
re a lid a d e l le n g u a je e s Ha s ke ll, q u e p o r lo vis t o t ie n e h a s t a a p o d o s . Es m u y s e n cillo y e s t á m u y
b ie n t ra d u cid o .

S is t e m a s Op e ra t iv o s En S is t e m a s o p e ra t ivo s
h t t p : / / e xa . u n n e . e d u . a r/ d e p a r/ a re a s / in fo rm a t ica / S is t e m a s Op e ra t ivo s / S OF. h t m
2 0 5 3 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Co m p le t o lib ro o n lin e cu yo s co n t e n id o s co rre s p o n d e n a u n cu rs o u n ive rs it a rio d e S is t e m a s
Op e ra t ivo s Co n ve n cio n a le s y Dis t rib u id o s . S e p u e d e d e s ca rg a r e l cu rs o e n PDF. La p á g in a
p rin cip a l, n o o b s t a n t e , e s t á s o b re ca rg a d a a la e xt e n u a ció n .

Tu t o ria l HTML & CS S En In t e rn e t / HTML


h t t p : / / www. xin io m . co m / u s e rs / Jo rg e / h t m l/
3 6 9 9 vis it a s | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a
Ext e n s o t u t o ria l e n fo ca d o a la s n u e va s ve rs io n e s d e HTML y CS S ( h o ja s d e e s t ilo s ) . Lib e ra d o b a jo
lo s t é rm in o s d e la Lice n cia d e Do cu m e n t a ció n Lib re GNU ( LDLG o GFDL e n in g lé s ) .

P la n e t a S iliu s En Va rio s / Pe rs o n a le s
h t t p : / / we lco m e . t o / p la n e t a s iliu s
3 6 6 vis it a s | Pu n t u a ció n : ( 3 vo t o s ) Vo t a
Dis p o n e d e va rio s p ro g ra m a s cre a d o s p o r e l a u t o r, h is t o ria d e a lg u n o s le n g u a je s , co m p ila d o re s ,
t u t o ria le s e n ZIP, crip t o g ra fía , e je m p lo s d e có d ig o , p rá ct ica s d e s u ca rre ra , e t c.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/ultimos.php (2 de 2) [20/10/2002 18:14:40]


Java en castellano. New 2 Java: Construir una Aplicación: 4.- Leer y Escribir Ficheros y Manejar Excepciones

Do cu m e n t a ció n | Re cu rs o s | Ta lle r Ja va

N e w 2 Ja v a : Co n s t ru ir u n a Ap lic a c ió n : 4 . - Le e r y
Es c rib ir Fic h e ro s y Ma n e ja r Ex c e p c io n e s
Au t o r: S u n
Tra d u c t o r: Ju a n An t o n io Pa lo s ( Ozit o )

Le e r co m e n t a rio s ( 0 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

P u e d e s e n c o n t ra r la Ve rs io n Orig in a l e n I n g le s e n ( h t t p :/ / ja v a . s u n . c o m )

I n d ic e d e c o n t e n id o s

● In t ro d u cció n
❍ Em p e za n d o
❍ Pre p a ra rn o s p a ra lo s Pro b le m a s
● Ma n e ja r Exce p cio n e s
❍ Ma n e ja r Exce p cio n e s
❍ En t ra d a y S a lid a e n Ja va
● Cre a r e l Co n s t ru ct o r
❍ Cre a r e l Co n s t ru ct o r
❍ La cla s e Re a d e r
❍ Le e r e l Fich e ro d e n t ro d e l Te xt Are a
● Ma n e ja r la s Exce p cio n e s La n za d a s
❍ Ma n e ja r la s Co n d icio n e s La n za d a s
■ Có d ig o e n e l b lo q u e Ca t ch
■ Blo q u e fin a lly
❍ De s p le g a r Ca ja s d e Diá lo g o
● Co m p le t a r la Cla s e No rt h Pa n e l
❍ Co m p le t a r la cla s e No rt h Pa n e l
❍ La cla s e Ce n t e rPa n e l
■ Áre a d e Te xt o Ed it a b le y co n Ba rra s d e De s p la za m ie n t o
● Co n t ro l d e Dis t rib u ció n
❍ La cla s e Bo x y la Dis t rib u ció n
❍ Es crib ir Fich e ro s co n JFile Ch o o s e r
❍ Es crib ir a Fich e ro s

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .

http://www.programacion.com/java/tutorial.new2java4.html [20/10/2002 18:14:42]


Java en castellano. Operaciones avanzadas con JDBC y Java

Do cu m e n t a ció n | Re cu rs o s | Ta lle r Ja va

Op e ra c io n e s a v a n z a d a s c o n JD BC y Ja v a
Au t o r: IBM
Tra d u c t o r: Ju a n An t o n io Pa lo s ( Ozit o )

Le e r co m e n t a rio s ( 5 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 3 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

P u e d e s e n c o n t ra r la Ve rs io n Orig in a l e n I n g le s e n (
h t t p :/ / ib m . c o m / d e v e lo p e rw o rk s )

I n d ic e d e c o n t e n id o s

● In t ro d u ció n a l Tu t o ria l
❍ ¿ De b e ría le e r e s t e Tu t o ria l?
❍ ¿ S o b re q u é va e s t e Tu t o ria l?
❍ He rra m ie n t a s
● Dis e ñ o d e la Ap lica ció n
❍ S is t e m a d e Ba s e d e Da t o s a Ut iliza r
❍ In icia liza ció n d e la Co n e xió n a la Ba s e d e Da t o s
❍ El d e s crip t o r d e d e s p lie g u e
❍ El Re p o s it io rio d e Co n e xio n e s
● Es q u e m a d e la Ap lica ció n
❍ Cre a ció n d e l Es q u e m a
❍ Ma n e jo d e Erro re s
❍ Lim p ie za d e Es q u e m a
❍ Re lle n a r la Ta b la
❍ Ve r lo s Re s u lt a d o s
❍ Le e r la Ta b la u s u a rio s d e s d e la Ba s e d e Da t o s
● S e n t e n cia s Pre p a ra d a s
❍ In t ro d u cció n a la s S e n t e n cia s Pre p a ra d a s
❍ "In s e rt " Pre p a ra d o
❍ "Qu e ry" Pre p a ra d o
● S e n t e n cia s Ca lla b le
❍ In t ro d u cció n a lo s Ob je t o s Ca lla b le S t a t e m e n t
❍ Cre a r u n Pro ce d im ie n t o Alm a ce n a d o
❍ Lla m a r a u n Pro ce d im ie n t o Alm a ce n a d o
● Tip o s d e Da t o s Ava n za d o s
❍ In t ro d u ció n a lo s Tip o s d e Da t o s Ava n za d o s
❍ In s e rt a r Blo b s
❍ S e le ccio n a r u n Blo b
❍ In s e rt a r u n Clo b
❍ S e le ccio n a r u n Clo b

http://www.programacion.com/java/tutorial.jdbcadv.html (1 de 2) [20/10/2002 18:14:45]


Java en castellano. Operaciones avanzadas con JDBC y Java

Le e r co m e n t a rio s ( 5 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 3 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

I m p rim ir e n Ja v a ( 1 9 / 1 0 / 2 0 0 2 )
Po r Ju a n An t o n io Pa lo s ( Ozit o )

Ho la , e n e l t u t o ria l h t t p : / / p ro g ra m a cio n . co m / ja va / t u t o ria l. 2 d . h t m l p o d rá s e n co n t ra r u n ca p ít u lo


co m p le t o s o b re im p re s ió n e n Ja va

t o d o b u e n o p e ro fa lt a . . . . ( 1 7 / 1 0 / 2 0 0 2 )
Po r o m a r ve le z

He s id o fie l a le e r lo s t u t o ria le s d e OZITO y m e p a re ce n d e lo m e jo r y h a n s id o p a rt e d e u n a


b u e n a p ro g ra m a cio n e n ja va , p e ro fa lt a , fa lt a u n m a n u a l co m p le t o d e im p re s io n e s e n ja va , p a ra
p o d e r p ro g ra m a r u n re p o rt e s 1 0 / 1 0

p ro g ra m a s ( 1 5 / 1 0 / 2 0 0 2 )
Po r m yria m

m e g u s t o s u p a g in a s o b re e s t e p ro g ra m a , q u is ie ra p o r fa vo r s i m e p o d ria n m a n d a r a lg u n o s
p ro g ra m a s e n ja va . . . g ra cia s

p ro g ra m a s ( 1 5 / 1 0 / 2 0 0 2 )
Po r m yria m

m e g u s t o s u p a g in a s o b re e s t e p ro g ra m a , q u is ie ra p o r fa vo r s i m e p o d ria n m a n d a r a lg u n o s
p ro g ra m a s e n ja va . . . g ra cia s

Mu y in t e re s a n t e ( 0 9 / 1 0 / 2 0 0 2 )
Po r Ma n u e l

Gra cia s . El t u t o ria l m e h a re s u lt a d o m u y u t il.


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .

http://www.programacion.com/java/tutorial.jdbcadv.html (2 de 2) [20/10/2002 18:14:45]


Programación en castellano. Modelo relacional

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Mo d e lo Nuestras zonas

re la c io n a l
Au t o r: Cla u d io
Ca s a re s

Le e r co m e n t a rio s ( 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n d ic e d e c o n t e n id o s

● In t ro d u cció n
● Pro ce s o d e n o rm a liza ció n
❍ De fin ició n d e la cla ve
❍ Prim e ra fo rm a n o rm a l ( 1 NF)
❍ S e g u n d a fo rm a n o rm a l ( 2 NF)
❍ Te rce ra fo rm a n o rm a l ( 3 NF)
❍ Cu a rt a fo rm a n o rm a l ( 4 NF)
❍ Ot ra s fo rm a s n o rm a le s
● La s in t e rre la cio n e s
❍ In t e rre la cio n e s u n o a u n o
❍ In t e rre la cio n e s u n o a va rio s
❍ In t e rre la cio n e s va rio s a va rio s
❍ Pro b le m a s co n la s in t e rre la cio n e s
❍ At rib u t o s d e la s in t e rre la cio n e s
● Alg e b ra re la cio n a l
❍ Un ió n
❍ In t e rs e cció n
❍ Dife re n cia
❍ Pro d u ct o
❍ S e le cció n
❍ Pro ye cció n
❍ Re u n ió n
❍ Divis ió n
❍ As ig n a ció n
● Cá lcu lo re la cio n a l
❍ Cu a n t ifica d o re s e xis t e n cia le s
❍ Cu a n t ifica d o re s u n ive rs a le s

Le e r co m e n t a rio s ( 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a

http://www.programacion.com/tutorial.modrel.html (1 de 2) [20/10/2002 18:14:47]


Programación en castellano. Modelo relacional

Últ im o s c o m e n t a rio s [ S u b ir]

BUS CO EN TOD A LA W EB ( 1 5 / 1 0 / 2 0 0 2 )
Po r Ca n s a d a

Po r q u e n o p u e d e n h a ce r u n t u t o ria l co m p le t o d o n d e s e p u e d a e n co n t ra r d e fin icio n e s q u e s o n


b á s ica s .
Qu e e s t ra n s a ccio n a lid a d ? ?
Qu e t ip o d e in fo co n t ie n e u n a rch ivo d e u n a b a s e d e d a t o s ? ?

A m e d ia s ( 0 7 / 1 0 / 2 0 0 2 )
Po r Da n ie l

S i, MyS QL s ig u e e l m o d e lo re la cio n a l, p e ro n o im p le m e n t a m u ch a s fu n cio n e s t íp ica s d e lo s


m is m o s , co m o p u e d a n s e r la s cla ve s e xt ra n je ra s .

My S QL ( 0 4 / 1 0 / 2 0 0 2 )
Po r An g e l

¿ MyS QL e s u n a b a s e ra la cio n a d a ?
¿ Ha y a lg u n lib ro e n e l m e rca d o s o b re e l t e m a ?

Gra cia s
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.modrel.html (2 de 2) [20/10/2002 18:14:47]


Programación en castellano. Curso avanzado de Prolog

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o Nuestras zonas

avanzado
d e P ro lo g
Au t o r: An g e l
Fe rn á n d e z Pin e d a

Le e r co m e n t a rio s ( 0 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 5 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n d ic e d e c o n t e n id o s

● In t ro d u cció n y lice n cia d e u s o


❍ Re q u is it o s
❍ Cré d it o s y lice n cia
● Me t a p ro g ra m a ció n y o rd e n s u p e rio r
❍ Ord e n S u p e rio r
❍ Me t a p ro g ra m a ció n
● Pre d ica d o s d in á m ico s
❍ De cla ra ció n d e p re d ica d o s d in á m ico s
❍ Añ a d ie n d o clá u s u la s
❍ Elim in a n d o clá u s u la s
❍ Fin a lid a d d e lo s p re d ica d o s d in á m ico s
❍ Eje m p lo
❍ No t a s o b re la co h e re n cia ló g ica d e lo s p ro g ra m a s
● Me t a p ro g ra m a n d o
❍ Ma n ip u la ció n d e t é rm in o s
❍ Ma n ip u la ció n d e a rg u m e n t o s co n "a rg "
❍ Ma n ip u la ció n d e a rg u m e n t o s co n "u n iv"
❍ Lla m a d a s d e o rd e n s u p e rio r
● Pre d ica d o s s t a n d a rd d e o rd e n s u p e rio r
❍ El p re d ica d o m a p / 3
❍ La fa m ilia d e p re d ica d o s "fin d a ll"
● Eje m p lo d e m e t a p re d ica d o

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.prolog3.html [20/10/2002 18:14:50]


Java en castellano. Manejar Conexiones a Bases de Datos con JDBC 3.0

Do cu m e n t a ció n | Re cu rs o s | Ta lle r Ja va

Ma n e ja r Co n e x io n e s a Ba s e s d e D a t o s c o n JD BC 3 . 0
Au t o r: IBM
Tra d u c t o r: Ju a n An t o n io Pa lo s ( Ozit o )

Le e r co m e n t a rio s ( 2 2 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 3 7 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n d ic e d e c o n t e n id o s

● In t ro d u ció n a l Tu t o ria l
❍ ¿ De b e ría le e r e s t e Tu t o ria l?
❍ ¿ S o b re q u é va e s t e Tu t o ria l?
❍ He rra m ie n t a s
● Arq u it e ct u ra d e la Ap lica ció n
❍ Arq u it e ct u ra r Nu e s t ro S is t e m a
❍ El Mo d e lo d e Do s Ca p a s
❍ El Mo d e lo d e n - Ca p a s
● Fu n d a m e n t o s d e lo s Drive rs JDBC
❍ In t ro d u cció n a lo s Drive rs JDBC
❍ Re g is t ra r u n Drive r JDBC
❍ URLs d e Drive rs JDBC
❍ Drive rs d e l Tip o 1
■ Co d ifica ció n p a ra Drive rs d e l Tip o 1
❍ Drive rs d e l Tip o 2
❍ Drive rs d e l Tip o 3
❍ Drive rs d e l Tip o 4
■ Un Eje m p lo Co m p le t o d e Drive r d e l Tip o 4
● Tra n s a cio n e s co n Ba s e s d e Da t o s
❍ Tra n s a cio n e s Bá s ica s
❍ Má s s o b re Tra n s a cio n e s
❍ Nive le s d e Tra n s a ció n
❍ Lo t e s y Tra n s a cio n e s
❍ Co n t ro l Fin o d e la s Tra n s a cio n e s
● Fu e n t e s d e Da t o s
❍ Fu e n t e s d e Da t o s Bá s ica s
❍ Re p a s o Rá p id o d e JNDI
❍ Re g is t ra r u n a Fu e n t e d e Da t o s
❍ Us a r u n a Fu e n t e d e Da t o s
❍ Re - Un ir u n a Fu e n t e d e Da t o s
❍ Bo rra r u n a Fu e n t e d e Da t o s
● Alm a ce n e s d e Co n e xio n e s
❍ ¿ Po r q u é n e ce s it a m o s Alm a ce n e s d e Co n e xio n e s

http://www.programacion.com/java/tutorial.jdbcbas.html (1 de 3) [20/10/2002 18:14:52]


Java en castellano. Manejar Conexiones a Bases de Datos con JDBC 3.0

❍ ¿ Qu é e s u n a Po o le d Co n n e ct io n ?
❍ In icia lia r u n Alm a ce n d e Co n e xio n e s
❍ Us a r u n Alm a ce n d e Co n e xio n e s
● Op t im iza r la s Co m u n ica cio n e s co n Ba s e s d e Da t o s
❍ Mé t o d o s JDBC Da t a S o u rce y Drive r
❍ Mé t o d o s JDBC Co n n e ct io n

Le e r co m e n t a rio s ( 2 2 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 3 7 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

Ap p le t ( 1 0 / 1 0 / 2 0 0 2 )
Po r De s p e ra d o

Ho la ,
He e s t a d o s ig u ie n d o e s t e m a n u a l y t o d o p e rfe ct o h a s t a q u e h e q u e rid o p ro b a r e l a cce s o a la b b d d
m e d ia n t e u n a p p le t .
Alg u ie n s e h a e n co n t ra d o co n e s e p ro b le m a ? ?
Me p u e d e a yu d a r? ?
Gra cia s p o r a d e la n t a d o .

Du d a s (03/ 10/ 2002)


Po r Ra ym u n d o Ga lva n Nie ve s

Tra b a jo e n e l a re a d e o p e ra cio n d e s is t e m a s , q u ie ro d e s a rro lla r a lg o p a ra lle va r cie rt o s co n t ro le s


a n t e lo s re q u e rim ie n t o s y n e ce s id a d e s d e lo s u s u a rio s , t ip o u n h e lp d e s k, n o q u ie ro in ve rt ir m u ch o
t ie m p o e n p ro g ra m a cio n , JAVA m e p u e d e s s e rvir ? , JAVA m a n e ja b a s e d e d a t o s o t e n g o q u e
in t e ra ct u a r co n o t ra q u e e xis t a e n e l m e rca d o ? q u e t a n fa cil y ra p id o e s p ro g ra m a r co n JAVA? ,
q u e re q u ie ro e n d e t e rm in a d o m o m e n t o p a ra in icia r ? , d o n d e lo co n s ig o ? .
Gra cia s y d is cu lp a t a n t a s p re g u n t a s .

Ex c e le n t e ( 0 6 / 0 9 / 2 0 0 2 )
Po r Ga lo

Mu y b u e n o p e ro s e ria fo rm id a b le a u n m a s co n u n a p e q u e ñ a a p lica cio n


g ra cia s d e t o d a s m a n e ra s

Ba s t a n t e c o m p le t o ( 2 9 / 0 8 / 2 0 0 2 )
Po r Ig n a cio Alcá za r Co n t e ll

Po d ría m e jo ra rs e co n e je m p lo s m á s co n cre t o s . No s é s i h a y a lg ú n t u t o ria l d e JDBC 2 . 0 , p e ro s i n o


e s a s í t a m b ié n m e jo ra ría co n lo s t ip o s d e Re s u lt S e t , lla m a d a a p ro ce d im ie n t o s a lm a ce n a d o s ,
s e n t e n cia s p re p a ra d a s , e t c

Mu y a g ra d e c id o ( 2 8 / 0 8 / 2 0 0 2 )
Po r Jo rg e

http://www.programacion.com/java/tutorial.jdbcbas.html (2 de 3) [20/10/2002 18:14:52]


Java en castellano. Manejar Conexiones a Bases de Datos con JDBC 3.0

Ho la s o y Jo rg e d e s d e Arg e n t in a y q u ie ro d e cirle s q u e s o y n u e vo e n e l a s u n t o d e la cre a ció n y


d is e ñ o d e p á g in a s we b , y s u s t ru t o ria le s m e h a n s id o d e g ra n a yu d a . Es p e ro q u e s ig a n
p u b licá n d o lo s y q u e a yu d e n a m u ch a s p e rs o n a s co m o yo q u e e s t a m o s in t e re s a d a s e n a p re n d e r
a lg m á s .
De s d e Arg e n t in a lo s fe licit o y le s d ig o : "s ig a n a d e la n t e "
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .

http://www.programacion.com/java/tutorial.jdbcbas.html (3 de 3) [20/10/2002 18:14:52]


Programación en castellano. Curso de XML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o d e Nuestras zonas

XML
Au t o r: Jo a q u in
Bra vo Mo n t e ro

Le e r co m e n t a rio s ( 3 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 5 0 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n d ic e d e c o n t e n id o s

● In t ro d u cció n
❍ Oríg e n e s d e l XML
■ HTML
■ XML
■ HTML, XML ve rs u s S GML
❍ Ve n t a ja s d e u t iliza r XML e n la s a p lica cio n e s We b .
■ S e n cille z
■ Va rie d a d d e e s t ru ct u ra s d e d a t o s
❍ Are a s d e a p lica ció n d e l XML
■ Me t a in fo rm a ció n
■ Ba s e s d e d a t o s
■ Me n s a je ría
● Ap lica cio n e s p a ra t ra b a ja r co n XML
❍ Pa rs e rs XML
❍ Bro ws e rs XML
❍ Ed it o re s d e XML y DTDs
❍ Pro ce s a d o re s XS LT
❍ Ot ra s h e rra m ie n t a s
● Ap lica cio n e s q u e u t iliza re m o s d u ra n t e e l cu rs o
● Em p e za n d o a t ra b a ja r co n XML
❍ Ma rca d o y d a t o s
❍ Co m p o n e n t e s d e u n d o cu m e n t o XML
■ Ele m e n t o s
■ At rib u t o s
■ Pró lo g o
■ Ot ra s co n s t ru ccio n e s d e m a rca d o
❍ Do cu m e n t o s b ie n fo rm a d o s y d o cu m e n t o s vá lid o s
● Do cu m e n t o s XML b ie n fo rm a d o s
● La re g la "d o cu m e n t "
❍ Eje rcicio : Do cu m e n t o XML q u e in cu m p le la re g la Do cu m e n t
● S in t a xis co rre ct a y re s t riccio n e s d e b u e n a fo rm a ció n

http://www.programacion.com/tutorial.joa_xml.html (1 de 3) [20/10/2002 18:14:54]


Programación en castellano. Curso de XML

❍ Eje rcicio : Do cu m e n t o XML n o va lid o


❍ Eje rcicio : Es crib ir u n d o cu m e n t o XML b ie n fo rm a d o q u e re p re s e n t e u n
ca t á lo g o d e lib ro s
❍ Eje rcicio : Va lid a r e l d o cu m e n t o XML u t iliza d o p a rs e r d e XML
❍ La s e n t id a d e s
● Do cu m e n t o s XML vá lid o s . La s DTD
❍ ¿ Qu e e s u n a DTD?
● De cla ra n d o la DTD
● De fin ició n d e lo s e le m e n t o s
❍ Añ a d ie n d o a t rib u t o s a lo s e le m e n t o s
● Es crib ie n d o n u e s t ra s p ro p ia s DTD
● DTD d e a rt ícu lo s
❍ Re p re s e n t a ció n e n u n a DTD d e e s t a e s t ru ct u ra ló g ica
❍ Eje rcicio : Eje m p lo m ín im o d e XML p a ra la DTD a rt ícu lo .
❍ Eje rcicio : Art ícu lo e n XML
● DTD d e b o o km a rks
❍ Eje rcicio : Es crib ir DTD p a ra e l e le m e n t o d ire ccio n .
❍ Eje rcicio : Es crib ir la DTD d e b o o km a rks
❍ Mín im o XML p a ra la DTD d e b o o km a rks
❍ Bo o km a rk e n XML s o b re e l t e m a s e le ccio n a d o .
● La DTD d e n o ve d a d e s
❍ Eje rcicio : DTD p a ra la s n o ve d a d e s
❍ Eje rcicio : Do cu m e n t o XML d e n o ve d a d e s
● DTD. En t id a d e s
❍ De cla ra ció n d e u n a e n t id a d
❍ Tip o s d e e n t id a d e s
❍ En t id a d g e n e ra l in t e rn a a n a liza d a .
❍ En t id a d g e n e ra l e xt e rn a a n a liza d a
■ Eje rcicio : Re e s crit u ra d e XML
❍ En t id a d p a rá m e t ro
■ Eje rcicio : Re e s crib ir la DTD d e a rt ícu lo s u t iliza n d o e n t id a d e s .
■ Eje rcicio : De fin ir u n a e n t id a d p a ra m é t rica e xt e rn a
● DTD e xis t e n t e s
❍ Ot ra s DTDs
● Do cb o o k
● Ma t h ML
❍ Eje rcicio : Fich e ro e n Ma t h ML
● S VG y VML
❍ S VG
❍ VML
● QAML
❍ Eje rcicio : FAQ e n XML
● In t ro d u cció n a lo s Na m e s p a ce s
❍ Pre s e n t a ció n
❍ ¿ Qu é e s e xa ct a m e n t e u n "n a m e s p a ce "?
■ De fin ició n d e "n a m e s p a ce "
■ De cla ra ció n d e u n "n a m e s p a ce "
■ Am b it o d e l "n a m e s p a ce "
❍ Dire ccio n e s

http://www.programacion.com/tutorial.joa_xml.html (2 de 3) [20/10/2002 18:14:54]


Programación en castellano. Curso de XML

Le e r co m e n t a rio s ( 3 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 5 0 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

Bu e n o ( 1 8 / 1 0 / 2 0 0 2 )
Po r THEMAS TER

Ha s t a a h o ra e m p e cé va m o s a ve r s i a p re n d o a lg u it o y p u e d o g a n a r d in e ro co n e s t e n u e vo
co n o cim ie n t o .

Bu e n is im o ( 1 0 / 1 0 / 2 0 0 2 )
Po r Jo rg e

Es t a b u e n o . . .

Alg u n a p e g a t e n ia q t e n e r ( 0 9 / 1 0 / 2 0 0 2 )
Po r Fre d d y

Me u n o a lo s co m e n t a rio s a n t e rio re s , d e b e ria s t e n e r u n . p d f . zip o a lg o p a re cid o p o d e r d e s ca rg a r


e s t e m a n u a l. Re s p e ct o a l m a n u a l m e p a re ce m u y b u e n o p a ra la g e n t e q n o s a b e n a d a d XML, e s
u n a b u e n a re fe re n cia .

m uy bue no (04/ 10/ 2002)


Po r a lfo n s o

e s t a m u y b u e n o p e ro h a ce fa lt a la o p ció n d e ca rg a .
s i lo h icie ra n s e ria e xce le n t e .

Ag re g a r Op c ió n ( 0 2 / 1 0 / 2 0 0 2 )
Po r Lu is Jo s e

Po r q u e n o a g re g a n u n a o p cio n p a ra la d e s ca rg a co m p le t a * . zip o u n p d f. , lu e g o t o d o e s t a
e xce le n t e .
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.joa_xml.html (3 de 3) [20/10/2002 18:14:54]


Java en castellano. New 2 Java: Suplementos

Do cu m e n t a ció n | Re cu rs o s | Ta lle r Ja va

N e w 2 Ja v a : S u p le m e n t o s
Au t o r: S u n
Tra d u c t o r: Ju a n An t o n io Pa lo s ( Ozit o )

Le e r co m e n t a rio s ( 5 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 2 7 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

P u e d e s e n c o n t ra r la Ve rs io n Orig in a l e n I n g le s e n (
h t t p :/ / d e v e lo p e r. ja v a . s u n . c o m / d e v e lo p e r/ o n lin e Tra in in g / n e w 2 ja v a / s u p p le m e n t s / )

I n d ic e d e c o n t e n id o s

● S u p le m e n t o Nº 1 d e Ne w 2 Ja va ( Ju l- 2 0 0 1 )
❍ Le n g u a je Ja va Bá s ico
■ Cre a r u n Arra y:
❍ Pro g ra m a Eje rcicio
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La cla s e S ys t e m Exp lica d a
❍ Un p o co d e Ja va
■ ¿ Qu é e s la Pla t a fo rm a Ja va ?
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 2 d e Ne w 2 Ja va ( Ag o - 2 0 0 1 )
❍ Le n g u a je Ja va Bá s ico
■ Cla s e s , Ob je t o s y Co n s t ru ct o re s . ¿ Cu á l e s la Dife re n cia ?
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La cla s e Arra yLis t Exp lica d a :
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ ¿ Po r q u é lo s Arg u m e n t o s d e la Lín e a d e Co m a n d o s n o s o n Te cn o lo g ía 1 0 0 %
Pu ra Ja va ?
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 3 d e Ne w 2 Ja va ( S e p - 2 0 0 1 )
❍ Le n g u a je Ja va Bá s ico
■ S e n t e n cia s if/ e ls e y s wit ch
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La cla s e S t rin g Exp lica d a
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ Lo s d o s Tip o s
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 4 d e Ne w 2 Ja va ( Oct - 2 0 0 1 )
❍ Le n g u a je Ja va Bá s ico

http://www.programacion.com/java/tutorial.new2javasuple.html (1 de 3) [20/10/2002 18:14:57]


Java en castellano. New 2 Java: Suplementos

■ Co n ve rt ir u n S t rin g a u n Va lo r Nu m é rico
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La Cla s e Nu m b e rFo rm a t
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ AWT co n t ra S win g
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 5 d e Ne w 2 Ja va ( No v- 2 0 0 1 )
❍ Le n g u a je Ja va Bá s ico
■ ¿ Có m o u s a r Bu cle s fo r?
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La Cla s e S t rin g Bu ffe r
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ At a jo s e n la Pro g ra m a ció n Ja va
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 6 d e Ne w 2 Ja va ( Dic- 2 0 0 1 )
❍ Le n g u a je Ja va Bá s ico
■ Exce p cio n e s y Co m o Ma n e ja rla s
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ File In p u t S t re a m y File Ou t p u t S t re a m
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ Ja va 2 Pla t fo rm , S t a n d a rd Ed it io n ( J2 S E) ve rs u s Ja va 2 Pla t fo rm , En t e rp ris e
Ed it io n ( J2 EE) ¿ Cu á l e s la Dife re n cia ?
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 7 d e Ne w 2 Ja va ( En e - 2 0 0 2 )
❍ Le n g u a je Ja va Bá s ico
■ Us a r la s Pa la b ra s Cla ve s t h is y s u p e r
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La Cla s e JFra m e
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ He re n cia d e Cla s e s
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 8 d e Ne w 2 Ja va ( Fe b - 2 0 0 2 )
❍ Le n g u a je Ja va Bá s ico
■ Ám b it o d e Va ria b le s
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ La s Cla s e s File y Bu ffe re d Re a d e r
❍ Pro g ra m a Eje rcicio
❍ Un p o co d e Ja va
■ Má s At a jo s d e Pro g ra m a ció n
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2
● S u p le m e n t o Nº 9 d e Ne w 2 Ja va ( Ma r- 2 0 0 2 )
❍ Le n g u a je Ja va Bá s ico
■ Ca s t in ( Fo rza d o )
❍ En t e n d e r la Lib re ría d e Cla s e s Ja va
■ In t e rfa ce s Co lle ct io n , It e ra t o r, y Lis t

http://www.programacion.com/java/tutorial.new2javasuple.html (2 de 3) [20/10/2002 18:14:57]


Java en castellano. New 2 Java: Suplementos

❍ Pro g ra m a Eje rcicio


❍ Un p o co d e Ja va
■ Bu e n a s Prá ct ica s d e Pro g ra m a ció n
❍ S o lu ció n a l Pro g ra m a d e Eje rcicio
❍ De s ca rg a r la Pla t a fo rm a Ja va 2

Le e r co m e n t a rio s ( 5 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 2 7 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

D ES CARGAR JAVA ( 1 9 / 1 0 / 2 0 0 2 )
Po r ION MAÑAS

NECES ITO DES CARGARME EL JAVA. ME LE BAJO YO Y S IEMPRE ME DA ERROR. TENGO WINDOWS
XP. GRACIAS .

Mu c h a s Gra c ia s ( 0 9 / 1 0 / 2 0 0 2 )
Po r Ra ú l

Qu ie ro d a r la s GRACIAS a la s p e rs o n a s q u e e s t á n d e d ica n d o s u t ie m p o a la e la b o ra ció n d e t o d o e s t e


m a t e ria l. S u t ra b a jo e s IMPRES IONANTE. MUCHAS GRACIAS p o r s u e s fu e rzo y e s p e ro q u e s ig a n m u ch o
m á s t ie m p o e n e s t a la b o r.

c o m o a s ig n a r u n v a lo r a u n a v a ria b le ( 0 4 / 1 0 / 2 0 0 2 )
Po r fe lip e

e s t o y co n o cie n d o ja va y m e p a re ce m u y in t e re s a n t e
p e ro n o e p o d id o s a b e r co m o ca p t u ro u n va lo r d e t e cla d o , m e g u s t a ria s a b e rlo . . . . . g ra cia s

c u a n d o e s t a rá d is p o n o b le la 4 t a p a rt e ( 1 4 / 0 9 / 2 0 0 2 )
Po r h e rn a n

h a s t a a h o ra m e a p a re cid o u n e xe le n t e t u t o ria l( e l m e jo r) , p e ro q u ie ro s a b e r p o rq u é s e e s t a n t o m a n d o
t a n t o t ie m p o e n la 4 t a p a rt e d e e s t e t u t o ria l d o n d e s e im p le m e n t a n la s d e m a s cla s e s fa lt a n t e s d e la
a p lica cio n d ive lo g

URGEN TE ( 1 1 / 0 9 / 2 0 0 2 )
Po r a n d re w

n e ce s it o s a b e r e n q u e p a g in a p u e d o d e s ca rg a r ja va
p a ra win d o ws e s d e ca ra ct e r URGENTE

GRACIAS . . . . . . . . . . . . . . . . . . . . . .
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .

http://www.programacion.com/java/tutorial.new2javasuple.html (3 de 3) [20/10/2002 18:14:57]


Programación en castellano. Curso práctico de Corba en GNU/Linux

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o p rá c t ic o d e Co rb a e n Nuestras zonas

GN U/ Lin u x
Au t o r: Alva ro d e l Ca s t illo

Le e r co m e n t a rio s ( 1 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n d ic e d e c o n t e n id o s

● GNU Fre e Do cu m e n t Lice n s e 1 . 1 ( GFDL)


❍ Lice n cia d e Do cu m e n t a ció n Lib re GNU
■ Pre á m b u lo
■ Ap lica b ilid a d y d e fin icio n e s
■ Co p ia lit e ra l
■ Co p ia e n ca n t id a d
■ Mo d ifica cio n e s
■ Co m b in a n d o d o cu m e n t o s
■ Co le ccio n e s d e d o cu m e n t o s
■ Ag re g a ció n co n t ra b a jo s in d e p e n d ie n t e s
■ Tra d u cció n
■ Te rm in a ció n
■ Re vis io n e s fu t u ra s d e e s t a lice n cia
❍ Có m o u s a r e s t a Lice n cia p a ra s u s d o cu m e n t o s
❍ No t a s
● In t ro d u cció n
❍ Pre s e n t a ció n
❍ Ob je t ivo s
❍ Qu é h a ce fa lt a p a ra s e g u ir e l cu rs o
❍ Do cu m e n t a ció n a d icio n a l n e ce s a ria
❍ Qu é d e b e co n o ce r e l le ct o r
● ¿ Qu é e s CORBA?
❍ De fin ició n
❍ Eje m p lo d e u s o
❍ ¿ Pa ra q u é CORBA?
❍ ¿ Có m o s e d e s a rro lla co n CORBA?
❍ De la in t e rfa z IDL a la im p le m e n t a ció n
● Pro fu n d iza n d o e n CORBA
❍ CORBA : Co m m o n Ob je ct Re q u e s t Bro ke r Arq u it e ct u re
❍ El ORB d e CORBA
❍ In vo ca cio n e s re m o t a s d e s d e e l clie n t e
❍ La in t e rfa z d e in vo ca ció n d in á m ica

http://www.programacion.com/tutorial.acscorba.html (1 de 3) [20/10/2002 18:14:59]


Programación en castellano. Curso práctico de Corba en GNU/Linux

❍ La Im p le m e n t a ció n d e lo s Ob je t o s
❍ El Re p o s it o rio d e Im p le m e n t a cio n e s ( IR)
❍ El Ad a p t a d o r d e Ob je t o s
❍ Co n clu s io n e s
❍ Re fe re n cia s
● Le n g u a je OMG/ IDL
❍ An á lis is d e la a p lica ció n
❍ Es ce n a rio
❍ Ob je t o s d e la a p lica ció n
❍ Dis e ñ o d e la a p lica ció n . In t e rfa ce s IDL
■ In t e rfa z d e l s e rvid o r
■ In t e rfa z d e l clie n t e
■ In t e rfa z d e l o p e ra d o r
■ In t e rfa z co m ú n
❍ Co n clu s io n e s d e A&D
● De s crip ció n d e l le n g u a je OMG/ IDL
❍ De s crip ció n d e l le n g u a je
❍ Mó d u lo s e in t e rfa ce s
❍ Op e ra cio n e s y t ip o s d e d a t o s
❍ Exce p cio n e s
❍ He re n cia
● Tra d u ccio n e s d e OMG/ IDL a C, C+ + y Ja va
❍ Ma p p in g a C
❍ Ma p p in g a C+ +
❍ Ma p p in g a Ja va
❍ Re s u m e n
● Im p le m e n t a ció n d e CORBA 2 . 2 e n Ja va : Ja va ORB
❍ Co n clu s io n e s
❍ Re fe re n cia s
● Un e je m p lo
❍ He rra m ie n t a s n e ce s a ria s
❍ La IDL d e l e je m p lo
● De s a rro llo d e l clie n t e
● El s e rvid o r CORBA
● Im p le m e n t a ció n d e Ca lcu la t o r
❍ Am p lia n d o e l e je m p lo
❍ Co n clu s io n e s d e l d e s a rro llo
❍ Re fe re n cia s
● GNOME y CORBA
❍ In t ro d u cció n
❍ CORBA e n GNOME
❍ La lib re ría d e CORBA d e GNOME: lib g n o rb a
■ In icia liza ció n d e CORBA e n GNOME
■ S e rvid o r d e No m b re s e n GNOME
■ GOAD: De m o n io d e Act iva ció n d e Ob je t o s e n GNOME
■ Co n clu s io n e s d e lib g n o rb a
❍ El e s crit o rio GNOME
● Bo n o b o
❍ El m o d e lo d e co m p o n e n t e s
❍ De s a rro llo d e co m p o n e n t e s

http://www.programacion.com/tutorial.acscorba.html (2 de 3) [20/10/2002 18:14:59]


Programación en castellano. Curso práctico de Corba en GNU/Linux

❍ Po r d ó n d e s e g u ir
❍ Co n clu s io n e s

Le e r co m e n t a rio s ( 1 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 1 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

t ie n e n ra z o n ( 2 7 / 0 9 / 2 0 0 2 )
Po r m a rt in

p o r fa vo r. . . h a g a n u n zip o p d f d e e s t e t u t o ria l

Ha g a n u n p d f o z ip ( 1 8 / 0 9 / 2 0 0 2 )
Po r Ma n u G.

Po r fa vo r, p a s e n e l cu rs o a p d f o co m p rím a n lo e n zip .

S o b re Co rb a ( 3 0 / 0 8 / 2 0 0 2 )
Po r s e rg io

¿ Po r q u e d ice s q u e co rb a t ie n e lo s d ia s co n t a d o ?
n o cu e s t io n o t u co m e n t a rio p o r m o le s t a r s i n o p a ra s a b e r s i va le la p e n a e s t u d ia rlo o n o . O
h icis t e s e l co m e n t a rio s o lo p o r m o le s t a r. p o r lo q u e t e p id o , q u e s i a lg u n o d e u s t e d e s t ie n e
a rg u m e n t o s m a s s o lid o s s o b re e l fu t u ro d e co rb a , p o d ria p o n e rlo s co m o co m e n t a rio s , p a ra s a b e r
s i va le la p e n a e s t u d ia rlo .

Ve rd a d ( 1 7 / 0 7 / 2 0 0 2 )
Po r fre d d y re n t e

Es Ve rd a d d e b e h a ce r u n . zip o u n p d f g ra cia s p o r la in fo r.
S u e rt e

Ad h ie ro a l re s t o ( 1 6 / 0 7 / 2 0 0 2 )
Po r Die g o

No s e a n t a n h a ra g a n e s y h a g a n u n zip o p d f.
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.acscorba.html (3 de 3) [20/10/2002 18:14:59]


Programación en castellano. XML Schema y DTDs

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

XML Nuestras zonas

Sche m a y
D TD s
Au t o r: Ad va n ce d
Qu a lit y S o lu t io n s

Le e r co m e n t a rio s ( 2 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 6 vo t o s ) Vo t a


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n d ic e d e c o n t e n id o s

● In t ro d u cció n
❍ Ob je t ivo
❍ His t o ria
❍ ¿ QUÉ S ON LAS DTDS ?
❍ ¿ QUÉ ES XML S CHEMA?
● DTD Vs S ch e m a
❍ DTD Vs S ch e m a
● De la s DTDs a l XML S ch e m a
❍ De la s DTDs a l XML S ch e m a
● Ot ra o p ció n : RELAX NG
❍ Re la x NG
● Co n clu s io n e s
❍ Co n clu s io n e s
❍ BIBLIOGRAFÍA

Le e r co m e n t a rio s ( 2 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 6 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

q u ie ro c u rs o s ( 0 5 / 0 6 / 2 0 0 2 )
Po r in m a cu la d a

No h a y a lg u n a fo rm a d e d e s ca rg a rs e lo s cu rs o s co m p le t o s ?

En d a v a n t ! ( 1 6 / 0 4 / 2 0 0 2 )
Po r Me rcè Vá zq u e z

En d a va n t , n o is ! Això e s t à m o lt b é .

http://www.programacion.com/tutorial.schemaydtd.html (1 de 2) [20/10/2002 18:15:01]


Programación en castellano. XML Schema y DTDs

Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.schemaydtd.html (2 de 2) [20/10/2002 18:15:01]


PHP en castellano

Do cu m e n t a cio n | Dire ccio n e s | Ta lle r PHP

Novedades y más información en nuestra lista de correo

S e c c io n e s En nuestro sitio Registrate


Tutoriales Nombre:
Búsqueda avanzada Buscar
Taller PHP Password:
Recursos D o c u m e n t a c ió n p ro p ia
Formación Tutoriales | Taller PHP Enviar
Buscador
Downloads SMTP utilizando Sockets en PHP Ultimos Tutoriales
Por: Alejandro Almunia
Foros
Vamos a ver, paso a paso, la creación de una clase que nos permita Bases de datos en la Web
mandar sencillos correos de texto (sin ficheros adjuntos), usando
Tu t o ria le s PHP y las funciones de sockets que lleva incorporadas. Asimismo, Webs dinámicos con PHP
Tutoriales propios usaremos comandos SMTP para comunicarnos con el servidor de
correo.Publicado el 17 de Octubre 2002 Tutorial de PHP y MySQL

Ta lle r P HP PHP y funciones FTP


Por: Alejandro Almunia
Artículos propios
Entre las casi innumerables librerías de PHP, disponemos de una Los mejores libros en:
que nos permite conectarnos por FTP. Estudiaremos las funciones de
Fo ro s dicha librería en este nuevo artículo.Publicado el 9 de Octubre 2002
Foro PHP Trabajar con PHP y ficheros
Por: Alejandro Almunia
Premio IBEST2001 a la
mejor página personal En este artículo se nos explica como trabajar con ficheros desde
PHP. Como podemos escribirlos, leerlos, subirlos a la web,
etc.Publicado el 10 de Septiembre 2002
Paginar los resultados de una consulta en PHP (II)
Por: Daniel Rodriguez Herrera
Explicamos otra manera de paginar empleando una sola consulta y
también indicamos como reducir el número de enlaces a otras
páginas, cuando tenemos muchos registros.Publicado el 20 de Agosto
2002
Paginar los resultados de una consulta en PHP
Por: Daniel Rodriguez Herrera
Realizar una consulta a una base de datos MySQL desde PHP y
presentarla es sencillo. El problema viene cuando debemos presentar
3000 registros; para solucionarlo utilizamos la paginación.Publicado
el 3 de Abril 2002
Como interactuar con una base de datos MySQL usando PHP
Por: Agustín Dondo
Realizar una consulta a una base de datos MySQL desde PHP y
presentarla es sencillo. El problema viene cuando debemos presentar
3000 registros; para solucionarlo utilizamos la paginación.Publicado
el 2 de Marzo 2002

Tutoriales | Taller PHP

http://programacion.com/php/ (1 de 2) [20/10/2002 18:15:07]


PHP en castellano

Re c u rs o s

Enlaces a direcciones en las que encontrara recursos y aplicaciones


que haran más fácil la elaboración de tus aplicaciones utilizando
PHP.

Más

Prin cip io Pá g in a

© 1 9 9 8 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Ma n t e n id a p o r: Ale ja n d ro y Da n ie l.
PHP e n ca s t e lla n o .
Es t a d ís t ic a s e n :

Re D In t e rn e t : Me lo d ia s Mo vile s , Lo g o s No kia | e n vio s m s g ra t is | S a lva p a n t a lla s y fo n d o s | Me lo d ia s e ric s s o n | m e lo d ia s


m o vile s g ra t is | lo g o s m o t o ro la

http://programacion.com/php/ (2 de 2) [20/10/2002 18:15:07]


Programación en castellano. Zona de downloads

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Zo n a d e d o w n lo a d Nuestras zonas
Re co p ila ció n d e lo s t u t o ria le s , a rt ícu lo s , e t c. q u e e s t á n e n n u e s t ra We b y q u e s e p u e d e n
d e s ca rg a r e n fo rm a t o zip . Pa ra p o d e rlo s d e s ca rg a r e s n e c e s a rio e n t ra r c o m o u s u a rio
re g is t ra d o .

Art íc u lo s 2 0 0 0 ( 0 1 / 0 2 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1
5 5 4 1 5 d e s ca rg a s (595277 kb)
To d o s lo s a rt ícu lo s q u e h e m o s p u b lica d o a lo s la rg o d e l 2 0 0 0 e n u n ú n ico fich e ro PDF. In clu ye
t a n t o lo s a rt ícu lo s d e la zo n a p rin cip a l co m o d e ca d a u n a d e la s zo n a s .
On lin e e n : h t t p : / / www. p ro g ra m a cio n . co m

Cu rs o d e Ja v a s c rip t 1 . 2 ( 1 9 / 0 2 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 2
4 1 3 4 9 d e s ca rg a s (83129 kb)
Cu rs o d e Ja va s crip t 1 . 2 d e HTML e n ca s t e lla n o , e n fo rm a t o HTML co m p rim id o e n u n fich e ro
ZIP.
On lin e e n : h t t p : / / h t m l. p ro g ra m a cio n . n e t / js /

Cu rs o d e HTML 4 . 0 ( 1 9 / 0 2 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 3
6 2 5 8 3 d e s ca rg a s (102038 kb)
Cu rs o d e HTML 4 . 0 d e HTML e n ca s t e lla n o , e n fo rm a t o HTML co m p rim id o e n u n fich e ro ZIP.
On lin e e n : h t t p : / / h t m l. p ro g ra m a cio n . n e t / cu rs o /

Cu rs o d e XHTML 1 . 0 ( 1 9 / 0 2 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 4
1 6 0 7 2 d e s ca rg a s (41304 kb)
Cu rs o d e XHTML 1 . 0 d e HTML e n ca s t e lla n o , e n fo rm a t o HTML co m p rim id o e n u n fich e ro ZIP.
On lin e e n : h t t p : / / h t m l. p ro g ra m a cio n . n e t / xh t m l/

I n t ro d u c c ió n a AS P ( 3 0 / 0 3 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 5
2 8 5 7 5 d e s ca rg a s (31661 kb)
Cu rs o d e in ica ció n a la t e cn o lo g ía AS P: s u s re q u is it o s t é cn ico s , lo s t ip o s d e e le m e n t o s q u e
co m p o n e n la s p á g in a s AS P y s u co rre ct a u t iliza ció n .
On lin e e n : h t t p : / / a s p . p ro g ra m a cio n . n e t / t u t o ria le s / a s p _ b a s ics

VBS CRI P T ( 3 0 / 0 3 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 9
2 1 4 8 1 d e s ca rg a s (140835 kb)

http://www.programacion.com/pagdownloads.php (1 de 4) [20/10/2002 18:15:11]


Programación en castellano. Zona de downloads

Vis u a l Ba s ic S crip t e s e l le n g u a je d e s crip t co n e l q u e s e e s crib e n la s p á g in a s AS P. Ap re n d e s u


s in t a xis e n e s t e cu rs o .
On lin e e n : h t t p : / / a s p . p ro g ra m a cio n . n e t / t u t o ria le s / vb s crip t /

AS P y W AP ( 3 0 / 0 3 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 8
1 6 3 4 5 d e s ca rg a s (283124 kb)
Im p le m e n t a ció n d e u n a a p lica ció n WAP u t iliza n d o t e cn o lo g ía AS P.
On lin e e n : h t t p : / / a s p . p ro g ra m a cio n . n e t / t u t o ria le s / a s p ywa p /

S e rv le t s y JS P ( 1 3 / 0 5 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 2
2 8 7 0 4 d e s ca rg a s (689991 kb)
Lo s S e rvle t s s o n la s re s p u e s t a d e la t e cn o lo g ía Ja va a la p ro g ra m a ció n CGI. S o n p ro g ra m a s
q u e s e e je cu t a n e n u n s e rvid o r We b y co n s t ru ye n p á g in a s We b . Ja va S e rve r Pa g e s ( JS P) e s
u n a t e cn o lo g ía q u e n o s p e rm it e m e zcla r HTML e s t á t ico co n HTML g e n e ra d o d in á m ica m e n t e
m e d ia n t e co d ig o ja va .
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / s e rvle t s _ js p

Ap i Ja v a Ma il ( 0 1 / 0 6 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 3
1 7 0 2 4 d e s ca rg a s (109708 kb)
In t ro d u cció n a l API Ja va Ma il p a ra e n via r y re cib ir e - m a ils d e s d e p ro g ra m a s Ja va
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / ja va m a il/

Tu t o ria l d e in t ro d u c c io n a Ja v a ( 0 7 / 0 5 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 0
3 3 5 1 5 d e s ca rg a s (64439 kb)
Tu t o ria l d e in t ro d u cció n a Ja va .
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / in t ja va /

Ja v a : P ro g ra m a c ió n e n Re d ( 1 3 / 0 5 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 1
2 1 6 8 8 d e s ca rg a s (43881 kb)
Tu t o ria l s o b re p ro g ra m a ció n e n Re d u t iliza n d o Ja va .
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t /

Cu rs o d e Fro n t P a g e 2 0 0 0 ( 0 5 / 0 6 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 5
1 6 7 9 0 d e s ca rg a s (1013206 kb)
Cu rs o co m p le t o d e cre a ció n d e p á g in a s we b co n Fro n t Pa g e 2 0 0 0 , e n fo rm a t o Wo rd .
On lin e e n : h t t p : / / h t m l. p ro g ra m a cio n . n e t / fro n t p a g e /

P rim e ra t a z a e n Ja v a ( 2 3 / 0 6 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 6
3 2 5 8 9 d e s ca rg a s (146 kb)
Fich e ro PDF d e u n a p re s e n t a ció n m u y g rá fica d e lo s p rim e ro s p a s o s e n Ja va p a ra la s
p la t a fo rm a s Win d o ws , UNIX/ Lin u x y MAC OS .
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / p rim e ra _ t a za / in d e x. p h p

Tu t o rJa v a n iv e l b á s ic o ( 2 3 / 0 6 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 7

http://www.programacion.com/pagdownloads.php (2 de 4) [20/10/2002 18:15:11]


Programación en castellano. Zona de downloads

3 8 7 6 8 d e s ca rg a s (389 kb)
Fich e ro PDF d e u n a ce rca m ie n t o a lo s co n ce p t o s b á s ico s s o b re Ob je t o s , Cla s e s e In t e rfa ce s ,
a s í co m o la e xp lica ció n d e lo s p rin cip a le s p a q u e t e s Ja va .
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / ja va _ b a s ico / in d e x. p h p

Ma n e jo d e Erro re s Ut iliz a n d o Ex c e p c io n e s Ja v a ( 2 3 / 0 6 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 8
2 3 6 0 6 d e s ca rg a s (132 kb)
In t ro d u cció n a la s e xce p cio n e s e n e l le n g u a je Ja va . Ma n e jo y co n t ro l d e e rro re s . En PDF.
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / e xce p cio n e s / in d e x. p h p

Tra b a jo e n Re d ( 0 4 / 0 9 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 1 9
1 5 4 4 0 d e s ca rg a s (273 kb)
In icio a la p ro g ra m a ció n e n Re d e n e l le n g u a je Ja va , in clu ye n d o S o cke t s , Da t a g ra m a s , e t c. e n
fo rm a t o PDF co n lo s fich e ro s fu e n t e a d ju n t a d o s
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / re d / in d e x. p h p

S e rv le t s ( 0 4 / 0 9 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 2 0
2 1 3 6 1 d e s ca rg a s (219 kb)
In icio a la p ro g ra m a ció n d e s e rvle t s e n le n g u a je Ja va , in clu ye n d o la s p a rt e s b á s ica s p a ra
co m u n ica r p ro g ra m a s clie n t e / s e rvid o re s . Fo rm a t o PDF co n lo s fich e ro s fu e n t e a d ju n t a d o s
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / s e rvle t s _ b a s ico / in d e x. p h p

Ja v a N a t iv e I n t e rfa c e ( JN I ) ( 0 4 / 0 9 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 2 1
1 1 9 4 3 d e s ca rg a s (220 kb)
Exp lica ció n d e co m o co m u n ica r p ro g ra m a s e s crit o s e n Ja va co n p ro g ra m a s e s crit o s e n o t ro s
le n g u a je s co m o C+ + . . . Fo rm a t o PDF co n lo s fich e ro s fu e n t e a d ju n t a d o s
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / jn i/ in d e x. p h p

I n v o c a c ió n Re m o t a d e Mé t o d o s ( RMI ) ( 0 4 / 0 9 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 2 2
1 2 0 5 9 d e s ca rg a s (117 kb)
Exp lica e l m o d o d e lla m a r a m é t o d o s d e o t ra s a p lica cio n e s q u e s e e s t á n e je cu t a n d o e n o t ra s
m á q u in a s d e la re d . ( p ro g ra m a ció n d is t rib u id a )
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / rm i/ in d e x. p h p

Be a n s ( b á s ic o ) ( 0 4 / 0 9 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 2 3
1 5 2 8 8 d e s ca rg a s (197 kb)
In t ro d u cció n a lo s co m p o n e n t e s re u t iliza b le s ( Be a n s ) e n Ja va
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / b e a n s / in d e x. p h p

Grá fic o s e n Ja v a 2 D ( 0 4 / 0 9 / 2 0 0 1 )
h t t p : / / www. p ro g ra m a cio n . n e t / d o wn lo a d . p h p ? id = 2 4
2 0 6 9 9 d e s ca rg a s (856 kb)
Pro g ra m a ció n d e g rá fico s e n 2 D, u t iliza n d o lo s n u e vo s APIs q u e la p la t a fo rm a Ja va p re s e n t a a
p a rt ir d e l JDK 1 . 2 .
On lin e e n : h t t p : / / ja va . p ro g ra m a cio n . n e t / 2 d / in d e x. p h p

http://www.programacion.com/pagdownloads.php (3 de 4) [20/10/2002 18:15:11]


Programación en castellano. Zona de downloads

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Jo a q u in Bra vo , Da n ie l Ro d rig u e z, Da vid Ca rre ro y Ale x Mo ra le s
Pro g ra m a ció n e n ca s t e lla n o .

http://www.programacion.com/pagdownloads.php (4 de 4) [20/10/2002 18:15:11]


Programación en castellano

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s Nuestras zonas
1 0 8 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Ba s e s d e d a t o s ( 5 )
● En t o rn o s d e d e s a rro llo ( 1 )
● He rra m ie n t a s ( 2 )
● In t e rn e t ( 2 6 )
● Le n g u a je s d e s crip t ( 4 )
● Le n g u a je s o rie n t a d o s a o b je t o ( 6 5 )
● Ot ro s le n g u a je s ( 3 )
● S is t e m a s o p e ra t ivo s ( 1 )
● Te o ría ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.html [20/10/2002 18:15:14]


Programación en castellano

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s Nuestras zonas


1 0 7 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Ba s e s d e d a t o s ( 2 )
● En t o rn o s d e d e s a rro llo ( 2 )
● He rra m ie n t a s ( 2 )
● In t e rn e t ( 5 0 )
● Le n g u a je s d e s crip t ( 2 3 )
● Le n g u a je s im p e ra t ivo s ( 1 )
● Le n g u a je s o rie n t a d o s a o b je t o ( 2 7 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.html [20/10/2002 18:15:15]


Programación en castellano. Formación

Añ a d ir u n a d ire cció n | Tu t o ria le s | Art ícu lo s | Fo rm a ció n

Fo rm a c ió n e n la Re d Nuestras web
De s d e e s t a p á g in a p o d ra s a cce d e r a cu rs o s d e fo rm a ció n e n in fo rm á t ica y n u e va s t e cn o lo g ía s .

CEN TROS COLABORAD ORES


Ciberaula | BIT

Cib e ra u la

Cib e ra u la e s u n a e m p re s a d e d ica d a a la fo rm a ció n o n - lin e e n


in fo rm á t ica y n u e va s t e cn o lo g ía s e n Es p a ñ a e His p a n o a m é rica . Po r ¿ N e c e s it a s o t ro
s e r u s u a rio re g is t ra d o d e Pro g ra m a ció n e n ca s t e lla n o o b t e n d ra s c u rs o ?
1 0 1 e u ro s d e d e s cu e n t o e n lo s s ig u e n t e s cu rs o s : Bu s c a lo e n n u e s t ro
BUS CAD OR d e
PHP - MyS QL - Co m e rcio e le ct ró n ico FORMACI ÓN .
AS P - S QL - Co m e rcio e le ct ró n ico
XML Ir al buscador
We b m a s t e r Nive l I
Ph o t o s h o p 6 . 0
Formación en nuevas
tecnologías
Co n d icio n e s d e la o fe rt a

BI T

CARRERAS 2 0 0 2

P RECI OS ES P ECI ALES


p a ra la s in s crip cio n e s a n t e rio re s a l 3 1 Dicie m b re 2 0 0 1
Ah ó rre s e h a s t a 8 4 . 0 0 0 Pt s .

An a lis t a Pro g ra m a d o r d e a p lica cio n e s in fo rm á t ica s


An a lis t a Pro g ra m a d o r e n e n t o rn o Vis u a l
An a lis t a Pro g ra m a d o r e n e n t o rn o In t e rn e t ( JAVA y C# )
Té cn ico e n Micro in fo rm á t ica
Té cn ico e n Micro in fo rm á t ica
Dis e ñ a d o r We b S it e
Pro g ra m a d o r We b S it e ( AS P)
An á lis is y d is e ñ o e s t ru ct u ra d o + UML
Re s p o n s a b le d e Xa rxa
Ge s t o r d e Te le co m u n ica cio n e s

http://www.programacion.com/formacion.htm (1 de 2) [20/10/2002 18:15:24]


Programación en castellano. Formación

Co n d icio n e s d e la o fe rt a

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 1 , Jo a q u in Bra vo , Da n i Ro d rig u e z, Da vid Ca rre ro y Ale x Mo ra le s
Pro g ra m a ció n e n ca s t e lla n o .

http://www.programacion.com/formacion.htm (2 de 2) [20/10/2002 18:15:24]


Programación en castellano. Foros de debate

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Bu s ca r: Dale

Es t o s s o n lo s fo ro s d is p o n ib le s e n Pro g ra m a ció n e n ca s t e lla n o :

Fo ro Me n s a je s Últ im o m e n s a je

AS P 1929 1 9 d e o ct u b re d e 2 0 0 2

Ba s e s d e d a t o s y S QL 655 1 8 d e o ct u b re d e 2 0 0 2

C / C+ + 372 1 9 d e o ct u b re d e 2 0 0 2

De lp h i / Kylix / C+ + Bu ild e r 203 1 9 d e o ct u b re d e 2 0 0 2

Ge n e ra l 316 1 7 d e o ct u b re d e 2 0 0 2

HTML 1001 1 7 d e o ct u b re d e 2 0 0 2

Ja va ( b á s ico ) 2515 2 0 d e o ct u b re d e 2 0 0 2

Ja va ( S e rvle t s y JS P) 902 1 9 d e o ct u b re d e 2 0 0 2

Ja va y XML 181 1 7 d e o ct u b re d e 2 0 0 2

Ja va s crip t 719 1 0 d e o ct u b re d e 2 0 0 2

Pe t ició n d e fo ro s n u e vo s 227 1 9 d e o ct u b re d e 2 0 0 2

PHP 645 1 9 d e o ct u b re d e 2 0 0 2

S e rvid o re s d e Ap lica cio n e s J2 EE 101 1 8 d e o ct u b re d e 2 0 0 2

Vis u a l Ba s ic 473 2 0 d e o ct u b re d e 2 0 0 2

Vis u a l Fo xPro 153 1 6 d e o ct u b re d e 2 0 0 2

XML 180 1 7 d e o ct u b re d e 2 0 0 2

Qu e lo s d is fru t e s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/foros.php [20/10/2002 18:15:27]


PHP en castellano. SMTP utilizando Sockets en PHP

Cu rs o s | Dire ccio n e s | Ta lle r PHP

Ta lle r P HP . S MTP u t iliz a n d o S o c k e t s e n P HP


Au t o r: Ale ja n d ro Alm u n ia

Le e r co m e n t a rio s ( 0 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 vo t o ) Vo t a


1 . El p rim e r s crip t u s a n d o s o cke t s y S MTP
2 . Co m a n d o s S MTP y re s p u e s t a s d e l s e rvid o r
3 . Es crib ie n d o la cla s e S MTP
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

El p rim e r s c rip t u s a n d o s o c k e t s y S MTP


Co m e n za re m o s p o r m o s t ra r co m o s e u s a la fu n ció n fs o cko p e n ( ) , p o rq u e la va m o s a n e ce s it a r a n t e s
d e co n e ct a rn o s a l s e rvid o r S MTP. Es t a fu n ció n t o m a d o s a rg u m e n s t o s m á s t re s o p cio n a le s , p e ro a
n o s o t ro s s o lo n o s in t e re s a n lo s d o s o b lig a t o rio s . El p rim e ro e s la IP o n o m b re d e l s e rvid o r a l q u e
co n e ct a r, y e l s e g u n d o e s e l p u e rt o . As í, n o s o t ro s , u s a re m o s e l p u e rt o 2 5 , y, co m o s e rvid o r, u n o
q u e co n o zca m o s q u e fu n cio n e .

As í p u e s , p rim e ro va m o s a ve r u n e je m p lo d e co m o a b rir u n s o cke t , y lu e g o e n ca p s u la re m o s e n u n a


cla s e la s fu n cio n e s q u e va m o s a n e ce s it a r e n la cla s e a cre a r. En e s t e s e n cillo e je m p lo , s o lo va m o s a
co n e ct a r a u n s e rvid o r d e co rre o y d e cirle "Ho la ", e n s u le n g u a je . El có d ig o e s co m o s ig u e :

<?

//Abrimos la conexión
$Conexion = fsockopen("programacion.com","25");

//Sacamos el contenido de lo que nos devuelve el servidor antes de seguir


$str_recibe = fgets($Conexion,256);
echo "<pre>";
print_r($str_recibe);
echo "</pre>";

//Esta es la cadena que dice "Hola". Fíjate en en \r\n final que marca
//un "Enter", para confirmar el comando
$str_hola = "EHLO programacion.com\r\n";

//Le soltamos la cadena al socket


if(!fputs($Conexion,$str_hola))
{
echo "Imposible decirle \"hola\" al servidor.";
exit;
}
else

http://www.programacion.com/php/articulo.fli_phpsmtp.html (1 de 4) [20/10/2002 18:15:30]


PHP en castellano. SMTP utilizando Sockets en PHP

$str_recibimos = fgets($Conexion,256);
echo "<pre>";
print_r($str_recibimos);
echo "</pre>";

//Salimos de la sesión, primero diciendo "Adios" al servidor


//y luego cerrando el socket con fclose()
if(!fputs($Conexion,"QUIT\r\n"))
{
echo "No se pudo salir de la sesión con el servidor SMTP";
exit;
}
else
{
fclose($Conexion);
echo "Cerrado y terminado";
exit;
}

?>

Co m o ve m o s , n o e s t a n co m p lica d o co m o p a re ce . A co n t in u a ció n va m o s a m o s t ra r u n a lis t a d e


co m a n d o s S MTP q u e n o s s e rá n im p re s cin d ib le s a la h o ra d e t ra t a r co n u n s e rvid o r d e co rre o .
As im is m o , ve re m o s lo s d is t in t o s có d ig o s q u e n o s p u e d e d e vo lve r e l s e rvid o r.

Co m a n d o s S MTP y re s p u e s t a s d e l s e rv id o r
A co n t in u a ció n , m u e s t ro u n a lis t a d e co m a n d o s S MTP ju n t o co n s u s ig n ifica d o .

Co m a n d o S ig n ific a d o
Ho la s e n cillo . Es e l m o d o m á s a n t ig u o y s e g u ro d e d e cir "h o la ". S i
HELO e l s e rvid o r e s ca p a z d e re s p o n d e r a é l, s o p o rt a la s
fu n cio n a lid a d e s b á s ica s q u e va m o s a ve r e n e s t e t u t o ria l.
Ho la e xt e n d id o . Es e l m o d o d e d e cirle h o la a l s e rvid o r m á s
m o d e rn o . S i e s ca p a z d e re s p o n d e r, s ig n ifica q u e p o s e e m u ch a s
EHLO m á s ca ra ct e rís t ica s q u e s i s o lo p u d ie s e re s p o n d e r a HELO.
Mu ch a s d e e lla s s o n m u y a va n za d a s y n o la s va m o s a ve r e n e s t e
t u t o ria l.
Co n e s t e co m a n d o s e e s p e cifica d e q u ié n p ro vie n e e l co rre o a
MAI L FROM: e n via r. A m e n u d o e l d o m in io h a d e s e r u n o vá lid o , p u e s cie rt o s
c o rre o @d o m in io s e rvid o re s co m p ru e b a n la e xis t e n cia d e l m is m o , d e vo lvie n d o u n
m e n s a je d e e rro r s i n o p u e d e n s e r id e n t ifica d o s .

http://www.programacion.com/php/articulo.fli_phpsmtp.html (2 de 4) [20/10/2002 18:15:30]


PHP en castellano. SMTP utilizando Sockets en PHP

Co n e s t e co m a n d o s e e s p e cifica e l re ce p t o r ( o re ce p t o re s , p u e s e l
co m a n d o p u e d e s e r re p e t id o t a n t a s ve ce s co m o re ce p t o re s
h a ya ) , d e l m e n s a je e n via d o . Es im p o rt a n t e t e n e r e n cu e n t a q u e
cie rt o s s e rvid o re s p o s e e n u n a t a b la d e d o m in io s a lo s q u e p u e d e n
RCP T TO: e n t re g a r e l co rre o . Po r e je m p lo , m u ch a g e n t e co n fig u ra e l
c o rre o @d o m in io s e rvid o r p a ra q u e s o lo p u e d a a d m it ir co rre o p a ra la m á q u in a ,
re ch a za n d o t o d a s la s o t ra s d ire ccio n e s cu yo s re g is t ro s DNS n o s e
e n cu e n t re n e n la m is m a . Co m o re g la g e n e ra l, e s s e g u ro u s a r e l
s e rvid o r d e co rre o d e l d o m in io a l cu a l p e rt e n e ce e l co rre o d e la
p e rs o n a a la q u e va d irig id a e l m e n s a je .
Es t e co m a n d o , p e s e a s u a p a rie n cia co m p le ja , n o lo e s t a n t o e n
re a lid a d . Prim e ro va la p a la b ra cla ve DATA, q u e in d ica a l s e rvid o r
d e co rre o q u e s e in icia la t ra n s fe re n cia d e lo s d a t o s d e l co rre o e n
s i. Tra s e s t a s e n t e n cia , y, a n t e s d e l co rre o , p o d e m o s in clu ir
D ATA\ r\ n
ca b e ce ra s , s ie n d o la m á s co m ú n S u b je ct : , p a ra in d ica r e l t e m a .
( S u b je c t : \ r\ n )
Tra s t o d o e l m e n s a je , d e b e e s crib irs e \ r\ n . \ r\ n . S i e s o e s . Un
\ r\ n . \ r\ n
"En t e r", s e g u id o d e u n p u n t o y o t ro "En t e r". As í s e le d ice a l
s e rvid o r q u e e l m e n s a je h a t e rm in a d o . Un a ve z p u ls e m o s e l
ú lt im o "En t e r", e l m e n s a je s e rá e n via d o a la co la d e p ro ce s o , lis t o
p a ra s u e n t re g a .

Pu e s ya ve s q u e n o s o n t a n t o s . En re a lid a d s o lo cin co , p a ra h a ce r e l t ra b a jo m á s b á s ico . Co n e s t o s e


p u e d e n m a n d a r e - m a ils e n fo rm a t o d e t e xt o s im p le , s in fich e ro s a d ju n t o s . No e s m u ch o , p e ro , p a ra
e s t a r t ra b a ja n d o a e s t e n ive l, ya e s .

A co n t in u a ció n , u n a lis t a d e lo s có d g o s n u m é rico s m á s u s u a le s d e u n s e rvid o r S MTP.

Có d ig o S ig n ific a d o
No im p le m e n t a d o . Es e l e rro r q u e d e vu e lve cu a n d o u n o d e lo s
502 co m a n d o s n o e s t á im p le m e n t a d o e n e l s e rvid o r. Po r e je m p lo ,
p ro g ra m a cio n . co m re s p o n d e 5 0 2 a EHLO.
To d o co rre ct o . El co m a n d o in t ro d u cid o h a fu n cio n a d o
co rre ct a m n t e y la a cció n re q u e rid a h a s id o re a liza d a s in
250
p ro b le m a s . Ta m b ié n e s lo q u e d e vu e lve e l s e rvid o r cu a n d o u n
m e n s a je h a s id o e n via d o co rre ct a m e n t e a la co la d e p ro ce s o .
El Re cip ie n t e d e l m e n s a je ( RCPT TO: ) , n o e s t á in clu id o e n la lis t a
553 d e d o m in io s a lo s q u e e l s e rvid o r e s t é co n fig u ra d o p a ra e n t re g a r
e l co rre o .
S ig u e a d e la n t e e n via n d o e l m e n s a je . Es t o e s lo q u e d e vu e lve e l
354
s e rvid o r t ra s in t ro d u cirle co rre ct a m e n t e la p a la b ra DATA.
221 S ig n ifica "Ad io s " e n la je rg a S MTP

Y, p a ra d e m o s t ra r q u e t o d o lo a n t e rio r e s cie rt o , a q u í e s t á la t ra n s crip ció n d e m i s e s ió n t e ln e t co n e l


s e rvid o r d e p ro g ra m a cio n . co m

220 us-8.34web.com ESMTP


EHLO programacion.com
502 unimplemented (#5.5.1)
HELO programacion.com
250 us-8.34web.com

http://www.programacion.com/php/articulo.fli_phpsmtp.html (3 de 4) [20/10/2002 18:15:30]


PHP en castellano. SMTP utilizando Sockets en PHP

MAIL FROM:flipis@flipis.net
250 ok
RCPT TO:multivac@internautas.org
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
RCPT TO:info@programacion.com
250 ok
DATA
354 go ahead
Subject: Esto es una prueba del webmaster de la seccion de php fLIPIS
Este es el mensaje de prueba
.
250 ok 1033728059 qp 1944
quit
221 Goodbye

Es c rib ie n d o la c la s e S MTP
Lle g a d o s a e s t e p u n t o , h e m o s vis t o cu a l e s la s e cu e n cia d e co m a n d o s n e ce s a ria p a ra m a n d a rle a l
s e rvid o r lo q u e n o s h a ce fa lt a p a ra e n via r u n co rre o s e n cillo , d e s o lo t e xt o . Da d o q u e e l có d ig o d e la
cla s e e s co n s id e ra b le m e n t e la rg o , n o lo in clu yo a q u í. De s ca rg a d lo e n e l s g u ie n t e lin k. Ha y d o s
s crip t s , u n o d e e je m p lo y o t ro q u e e s la cla s e e n s i.

De s ca rg a t e lo s fich e ro s d e l a rt ícu lo

© 1 9 9 8 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Ma n t e n id a p o r: Ale ja n d ro y Da n ie l.
PHP e n ca s t e lla n o .

http://www.programacion.com/php/articulo.fli_phpsmtp.html (4 de 4) [20/10/2002 18:15:30]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

Do cu m e n t a ció n | Re cu rs o s | Ta lle r Ja va

Ta lle r Ja v a . D e s p le g a r S e rv le t s y Ap lic a c io n e s W e b e n To m c a t
y W e b Lo g ic S e rv e r
Au t o r: S u n
Tra d u c t o r: Ju a n An t o n io Pa lo s ( Ozit o )

Le e r co m e n t a rio s ( 0 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a


1 . In t ro d u cció n
2 . De s a rro llo d e S e rvle t s
2 . 1 . S e rvle t s Ge n é rico s
2 . 2 . S e rvle t s HTTP
2 . 3 . Un S e rvle t d e Eje m p lo : Re q u e s t De t a ils
2 . 4 . Co m p ila r e l S e rvle t
3 . Cre a r u n a Ap lica ció n We b
3 . 1 . Es t ru ct u ra d e Dire ct o rio s d e la Ap lica ció n We b
3 . 2 . Mo d ifica r e l De s crip t o r d e De s p lie g u e
3 . 3 . Cre a r WARs
4 . De s p le g a r Ap lica cio n e s We b e n To m ca t 3 . 2
4 . 1 . Pro b a r e l S e rvle t
5 . De s p le g a r Ap lica cio n e s We b e n We b Lo g ic S e rve r 6 . 0
5 . 1 . De s p le g a r WARs Us a n d o la Co n s o la
5 . 2 . De s p le g a r Ap lica cio n e s We b Ma n u a lm e n t e
5 . 3 . Pro b a r e l S e rvle t
5 . 4 . Re co n fig u ra r Ap lica cio n e s We b
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

I n t ro d u c c ió n
En e s t e a rt ícu lo re vis a re m o s lo s p a s o s im p lica d o s e n e l d e s p lie g u e d e u n s e rvle t , d e s crib e có m o t o m a r
u n s e rvle t y cre a r u n a a p lica ció n We b - t a n t o e n fo rm a t o e xp a n d id o co m o e n u n WAR. Ilu s t ra có m o
d e s p le g a r u n a a p lica ció n We b e n Ap a ch e To m ca t y e n We b Lo g ic S e rve r 6 . 0 , u n co m p le t o s e rvid o r d e
a p lica cio n e s J2 EE.

Em p e za re m o s co n u n a b re ve re ca p it u la ció n s o b re lo s fu n d a m e n t o s d e l d e s a rro llo d e S e rvle t s , lu e g o


m o s t ra re m o s co m o co n s t ru ir u n a a p lica ció n We b p a ra co n t e n e rlo s . Exp lica re m o s e l u s o d e W e b
Ap p lic a t io n Arc h iv e s ( WARs ) , y lu e g o ve re m o s co m o d e s p le g a r u n a a p lica ció n we b e n lo s e n t o rn o s
a n t e rio rm e n t e n o m b ra d o s .

D e s a rro llo d e S e rv le t s
Lo s s e rvle t s fu e ro n d is e ñ a d o s p a ra p e rm it ir la e xt e n s ió n d e u n s e rvid o r p ro p o rcio n a n d o cu a lq u ie r
s e rvicio . S in e m b a rg o , a ct u a lm e n t e s ó lo s e s o p o rt a n HTTP y p á g in a s JS P. En e l fu t u ro , u n d e s a rro lla d o r
p o d ría e xt e n d e r u n s e rvid o r FTP o u n s e rvid o r S MTP u s a n d o s e rvle t s .

S e rv le t s Ge n é ric o s
http://www.programacion.com/java/articulo.desp_servlets.html (1 de 12) [20/10/2002 18:15:38]
Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

Un s e rvle t a m p lía la s fu n cio n a lid a d e s d e u n s e rvid o r o fre cie n d o u n s e rvicio e s p e cífico d e n t ro d e u n


m a rco d e t ra b a jo b ie n d e fin id o . Es u n a p e q u e ñ a p ie za d e có d ig o Ja va - n o rm a lm e n t e u n a s ó la cla s e - -
q u e p o rp o rcio n a u n s e rvicio e s p e cífico . Po r e je m p lo , u n s e rvle t HTTP p o d ría p ro p o rcio n a a u n clie n t e d e
u n b a n co lo s d e t a lle s d e s u s d e p o s it o s y re in t e g ro s re cie n t e s . Ot ro s e rvle t HTTP p o d ría p e rm it ir a u n
clie n t e , ve r, e in clu s o e d it a r s u d ire cció n d e co rre o .

Pa ra d e s p le g a r u n s e rvle t , n o rm a lm e n t e s e re q u ie re la co n fig u ra ció n d e u n s e rvid o r d e a p lica cio n e s .


Cu a n d o e l s e rvid o r e n cu e n t ra u n t ip o p a rt icu la r d e s o licit u d , in vo ca a l s e rvle t , p a s á n d o le lo s d e t a lle s
s o b re la s o licit u d y u n o b je t o response p a ra d e vo lve r e l re s u lt a d o .

To d o s lo s e rvle t s im p le m e n t a n e l in t e rfa ce javax.servlet.Servlet b ie n d ire ct a m e n t e - - e n e l ca s o d e


lo s s e rve lt s g e n é rico s - - o in d ire ct a m e n t e , e n e l ca s o d e lo s s e rvle t s HTTP o JS P. El in t e rfa ce
javax.servlet.Servlet in clu ye lo s s ig u ie n t e s m é t o d o s im p o rt a n t e s :

● init():
De fin e cu a lq u ie r có d ig o d e in icia liza ció n q u e d e b e ría e je cu t a rs e cu a n d o s e
ca rg a e l s e rvle t e n m e m o ria .
● service():
El m é t o d o p rin cip a l, lla m a d o cu a n d o e l s e rvle t re cib e u n a s o licit u d d e s e rvicio .
De fin e u n p a q u e t e d e ló g ica d e p ro ce s a m ie n t o p ro p o rcio n a d o p o r e l s e rvle t .
● destroy():
De fin e cu a lq u ie r có d ig o d e lim p ie za re q u e rid o a n t e s d e e lim in a r e l s e rvle t d e
la m e m o ria .

Cu a n d o e l co n t e n e d o r s e rvle t ca rg a p o r p rim e ra ve z u n s e rvle t in vo ca a l m é t o d o init() d e l s e rvle t


p a ra in icia liza rlo . Lu e g o s e g ú n s e h a ce n s o licit u d e s p a ra e je cu t a r e l s e rvle t , e l co n t e n e d o r s e rvle t lla m a
re p e t id a m e n t e la m é t o d o service() d e l s e rvle t . Fin a lm e n t e , cu a n d o e l co n t e n e d o r s e rvle t n o n e ce s it a
e l s e rvle t , lla m a a l m é t o d o destroy() d e l s e rvle t y lo d e s ca rg a d e la m e m o ria . Ob s e rva q u e d u ra n t e e l
t ie m p o d e vid a d e u n s im p le e je m p la r s e rvle t , lo s m é t o d o s init() y destroy() s ó lo s o n in vo ca d o s u n a
ve z, m ie n t ra s q u e e l m é t o d o service() s e rá in vo ca d o m u ch a s ve ce s - - u n a ca d a ve z q u e s e h a g a u n a
s o licit u d p a ra e je cu t a r e l s e rvle t .

S e rv le t s HTTP

Lo s s e rvle t s HTTP e xt ie n d e n la cla s e javax.servlet.http.HttpServlet. Es t a cla s e e xt ie n d e la cla s e


javax.servlet.GenericServlet, q u e a s u ve z im p le m e n t a javax.servlet.Servlet. La cla s e
HttpServlet s o b re e s crib e e l m é t o d o service() d e fo rm a q u e p u e d e m a n e ja r d ife re n t e s t ip o s d e
s o licit u d e s HTTP: D ELETE, GET, OP TI ON S , P OS T, P UT, y TRACE. Po r ca d a u n o d e e s t o s t ip o s d e
s o licit u d , la cla s e HttpServlet p ro p o rcio n a s u co rre s p o n d ie n t e m é t o d o doXXX().

Au n q u e p o d e m o s s o b re e s crib ir e l m é t o d o service() e n n u e s t ra cla s e s e rvle t , ra ra m e n t e h a y a lg u n a


n e ce s id a d d e h a ce rlo . Má s fre cu e n t e m e n t e q u e rre m o s s o b re e s crib ir m é t o d o s doXXX() in d ivid u a le s . S i
s o b re e s crib im o s e l m é t o d o service(), d e b e m o s t e n e r cu id a d o d e q u e lo s m é t o d o s doXXX() p o r
d e fe ct o , s ó lo s e a n lla m a d o s s i lla m a m o s a super.service o lo s in vo ca m o s d ire ct a m e n t e .

Pa ra la m a yo ría d e la s a p lica cio n e s q u e rre m o s s o b re e s crib ir lo s m é t o d o s doPost() y doGet(), ya q u e


e llo s m a n e ja n n o rm a lm e n t e lo s d a t o s e n via d o s p o r u n fo rm u la rio d e u s u a rio d e s d e u n FORM HTML.

Pa ra s u m a riza r, cu a n d o e s crib a m o s n u e s t ro s s e rvle t s HTTP, d e b e ría m o s :

1 . Im p o rt a r co m o m ín im o la s cla s e s s e rvle t s :

http://www.programacion.com/java/articulo.desp_servlets.html (2 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

❍javax.servlet.ServletException
❍ javax.servlet.http.HttpServlet
❍ javax.servlet.http.HttpServletRequest
❍ javax.servlet.http.HttpServletResponse
2 . Ha ce r la cla s e public
3 . Ha ce r q u e la cla s e e xt ie n d a HttpServlet
4 . S o b re e s crib ir lo s m é t o d o s doXXX() a p ro p ia d o s p a ra im p le m e n t a r n u e s t ra
ló g ica d e s o licit u d / re s p u e s t a . .

Un S e rv le t d e Eje m p lo : Re q u e s t D e t a ils

En e l e je m p lo d e a b a jo h e m o s ilu s t ra d o u n s im p le s e rvle t HTTP. La p rim e ra lín e a s im p le m e n t e d e fin e a


q u é p a q u e t e p e rt e n e ce e l s e rvle t . El s ig u ie n t e b lo q u e d e có d ig o im p o rt a la s cla s e s u s a d a s e n e s t e
s e rvle t . Lu e g o vie n e la d e fin ició n d e la cla s e s e rvle t . Co m o p u e d e s ve r, la cla s e RequestDetails
e xt ie n d e HttpServlet.

El cu e rp o d e RequestDetails d e fin e d o s m é t o d o s : doGet() y doPost(). El m é t o d o doGet() d e fin e la


fu n cio n a lid a d p rin cip a l d e e s t e s e rvle t . El m é t o d o doPost()s im p le m e n t e lla m a a doGet(). Po r lo t a n t o ,
e l s e rvle t m a n e ja la s p e t icio n e s GET y P OS T d e la m is m a fo rm a .

El m é t o d o doGet() co n s t ru ye u n a p á g in a HTML q u e co n t ie n e d e t a lle s s o b re la s o licit u d HTTP e n via d a a l


s e rvid o r. Ob s e rva la s d o s p rim e ra s lín e a s d e l m é t o d o . La p rim e ra lín e a s e le ccio n a e l t ip o d e co n t e n id o
d e la re s p u e s t a . En g e n e ra l, co n s t ru ire m o s u n a p á g in a HTML, e n cu yo ca s o e l t ip o d e co n t e n id o d e b e
co n fig u ra rs e co m o text/html. La s e g u n d a lín e a d e l m é t o d o doGet() o b t ie n e u n a re fe re n cia a u n
s t re a m d e s a lid a PrintWriter. To d a la s a lid a a d e vo lve r p a ra e l clie n t e s e e s crib e e n e s t e s t re a m d e
s a lid a :

package org.stevengould.javaworld;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* This class provides a simple example of a servlet, and
* illustrates some of the information available from an
* HTTP request.
*/
public class RequestDetails extends HttpServlet {
/**
* Handler for all GET requests. We simply dump out the
* requestheader information, followed by the body of
* the request.
* @param request the HTTP request submitted to the
* server for processing. It is this object that
* contains the details of the requested URL, and

http://www.programacion.com/java/articulo.desp_servlets.html (3 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

* it is the details of this object that we


* output as a response.
* @param response the response object to be used to
* send a result back to the client.
* @exception IOException thrown if a communications
* error occurs.
*@exception ServletException if the GET request could
* could not be handled
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Request Details Example</title>");
out.println("</head>");
out.println("<body>");

out.println("<h3>HTTP Request Header</h3>");


out.println("<table border='1'>");
out.println(" <tr bgcolor=#e0e0e0>");
out.println(" <td><strong>Name</strong></td>");
out.println(" <td><strong>Value</strong></td>");
out.println(" </tr>");
Enumeration e = request.getHeaderNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = request.getHeader(name);
out.println(" <tr>");
out.println(" <td bgcolor=#e0e0e0>"+name+"</td>");
out.println(" <td>"+value+"</td>");
out.println(" </tr>");
}
out.println("</table>");

out.println("<h3>HTTP Request Information</h3>");


out.println("<table border='1'>");
out.println(" <tr bgcolor=#e0e0e0>");
out.println(" <td><strong>Name</strong></td>");
out.println(" <td><strong>Value</strong></td>");
out.println(" </tr>");
out.println(" <tr>");
out.println(" <td bgcolor=#e0e0e0>Method:</td>");
out.println(" <td>"+request.getMethod()+"</td>");
out.println(" </tr>");
out.println(" <tr>");
out.println(" <td bgcolor=#e0e0e0>Request URI:</td>");
out.println(" <td>"+request.getRequestURI()+"</td>");
out.println(" </tr>");
out.println(" <tr>");
out.println(" <td bgcolor=#e0e0e0>Protocol:</td>");
out.println(" <td>"+request.getProtocol()+"</td>");

http://www.programacion.com/java/articulo.desp_servlets.html (4 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

out.println(" </tr>");
out.println(" <tr>");
out.println(" <td bgcolor=#e0e0e0>PathInfo:</td>");
out.println(" <td>"+request.getPathInfo()+"</td>");
out.println(" </tr>");
out.println(" <tr>");
out.println(" <td bgcolor=#e0e0e0>Remote Address:</td>");
out.println(" <td>"+request.getRemoteAddr()+"</td>");
out.println(" </tr>");
out.println("</table>");

out.println("<hr>");
Date date = new Date();
out.println("<p align=center>Page generated on "+date);

out.println("</body>");
out.println("</html>");

out.close();
}

/**
* For POST requests, we will simply perform the same
*operations as for GET requests. The best way to do this
* is to simply invoke the doGet() method with the appropriate
* parameters.
* @param request the HTTP request submitted to the server
* for processing. It is this object that contains
* the details of the requested URL, and it is the
* details of this object that we output as a
* response.
* @param response the response object to be used to send a
* result back to the client.
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
}
}

Co m p ila r e l S e rv le t

Co m o lo s s e rvle t s u s a n cla s e s d e e xt e n s ió n Ja va ( cla s e s q u e n o fo rm a n p a rt e d e l JDK p rin cip a l) d e b e s


a s e g u ra rt e d e s e le ccio n a r co rre ct a m e n t e e l CLAS S PATH a n t e s d e in t e n t a r co m p ila r cu a lq u ie r s e rvle t . El
co m p ila d o r Ja va n e ce s it a p o d e r e n co n t ra r la s cla s e s y p a q u e t e s javax.servlet.* ( q u e s e e n cu e n t ra e n
e l fich e ro j2 e e . ja r e n e l J2 EES DK 1 . 4 ) . A p a rt e d e e s t o , la co m p ila ció n s e re a liza ig u a l q u e co n o t ro
p ro g ra m a Ja va :

javac RequestDetails.java

Cre a r u n a Ap lic a c ió n W e b

http://www.programacion.com/java/articulo.desp_servlets.html (5 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

Ah o ra q u e h e m o s cre a d o e l s e rvle t , n e ce s it a m o s p e n s a r e n d e s p le g a rlo . La e s p e cifica ció n Ja va S e rvle t


2 . 2 p re s e n t ó a l m e n o s d o s ca ra ct e rís it ica s im p o rt a n t e s : u n a a p lica ció n We b y u n a rch ivo d e a p lica ció n
We b ( WAR) . d e a cu e rd o a la s e s p e cifica cio n e s S e rvle t s 2 . 2 :

No ta :
Un a a p lica ció n We b e s u n a co le cció n d e s e rvle t s , p á g in a s HTML, cla s e s , y o t ro s re cu rs o s q u e s e
p u e d e n e m p a q u e t a r y e je cu t a r e n va rio s co n t e n e d o re s d e d is t in t o s ve n d e ro re s .

Lo s WARs s im p le m e n t e s o n a rch ivo s Ja va d e u n a a p lica ció n We b co n u n a e xt e n s ió n d ife re n t e p a ra


d ife re n cia rlo s d e lo s co m u n m e n t e u s a d o s JARs .

An t e s d e la e s p e cifica ció n S e rvle t 2 . 2 , e ra b a s t a n t e d ife re n t e d e s p le g a r S e rvle t s e n t re d ife re n t e s


co n t e n e d o re s s e rvle t s - - a n t e rio rm e n t e t a m b ié n lla m a d o s m o t o re s s e rvle t . La e s p e cifica ció n 2 . 2
e s t a n d a rizó e l d e s p lie g u e e n t re co n t e n e d o re s , lle va n d o a s í la p o rt a b ilid a d d e l có d ig o Ja va u n p a s o m á s
a llá . Ve re m o s e l p o d e r d e e s t o m á s a d e la n t e e n e s t e a rt ícu lo , cu a n d o ilu s t re m o s la cre a ció n d e u n a
s e n cilla a p lica ció n We b q u e s e d e s p lie g u e t a n t o e n Ap a ch e To m ca t co m o e n We b Lo g ic S e rve r s in
n in g u n a m o d ifica ció n o re co m p ila ció n .

Es t ru c t u ra d e D ire c t o rio s d e la Ap lic a c ió n W e b

La e s p e cifica ció n S e rvle t 2 . 2 d e fin e la e s t ru ct u ra d e d ire ct o rio s p a ra lo s fich e ro s d e u n a a p lica ció n We b .


El d ire ct o rio s u p e rio r - - o d ire ct o rio ra íz - - d e b e ría t e n e r e l n o m b re d e la a p lica ció n y d e fin irá la ra íz d e
d o c u m e n t o s p a ra n u e s t ra a p lica ció n We b . To d o s lo s fich e ro s d e b a jo d e e s t a ra íz p u e d e n s e rvirs e a l
clie n t e e xce p t o a q u e llo s fich e ro s q u e e s t á n b a jo lo s d ire ct o rio s e s p e cia le s META-INF y WEB-INF e n e l
d ire ct o rio ra íz. To d o s lo s fich e ro s p riva d o s - - co m o lo s fich e ro s cla s s d e lo s s e rvle t s - - d e b e ría n
a lm a ce n a rs e b a jo e l d ire ct o rio WEB-INF.

En la s ig u ie n t e fig u ra p o d e m o s ve r la e s t ru ct u ra d e d ire ct o rio s d e u n a a p lica ció n We b :

Pa ra cre a r u n a a p lica ció n We b , e m p e za m o s cre a n d o e s t a e s t ru ct u ra d e d ire ct o rio . To m a t u fich e ro d e la


cla s e d e l s e rvle t co m p ila d o y s it ú a la e n e l d ire ct o rio WEB-INF/classes. S i h e m o s d e fin id o q u e n u e s t ro
s e rvle t p e rt e n e ce a u n p a q u e t e , d e b e m o s s e g u ir la s re g la s e s t a n d a r d e Ja va y cre a r lo s s u b d ire ct o rio s
a p ro p ia d o s p a ra q u e la JVM p u e d a n e n co n t ra r n u e s t ra s cla s e s . Po r e je m p lo , s i n u e s t ro s e rvle t e s t á
d e fin id o e n u n p a q u e t e com.mycompany.myproject, d e b e ría m o s cre a r la s ig u ie n t e e s t ru ct u ra d e
d ire ct o rio s :

.../WEB-INF
|--
classes
|--
com
|--
mycompany
|--
myproject

http://www.programacion.com/java/articulo.desp_servlets.html (6 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

S it ú a t u s cla s e s Ja va e n e l s u b d ire ct o rio myproject.

Un a a lt e rn a t iva ú t il p a ra co p ia r lo s fich e ro s d e cla s e s a l d ire ct o rio a p ro p ia d o e s co n fig u ra r n u e s t ro


e n t o rn o d e co n s t ru cció n ( u n Ma ke file o IDE) p a ra s a lva r la s cla s e s co m p ila d a s d ire ct a m e n t e e n lo s
d ire ct o rio s re q u e rid o s . Ha ce r e s t o n o s a h o rra rá e s t e p a s o d u ra n t e e l d e s a rro llo .

Mo d ific a r e l D e s c rip t o r d e D e s p lie g u e

Ah o ra d e b e ría m o s t e n e r t o d o s n u e s t ro s fich e ro s e n s u lu g a r p a ra cre a r n u e s t ra p rim e ra a p lica ció n We b .


En e s t e p u n t o , n e ce s it a m o s re a liza r o t ra t a re a : a ct u a liza r e l d e s crip t o r d e d e s p lie g u e p a ra re g is t ra r
n u e s t ro s s e rvle t s co n e l co n t e n e d o r. Pa ra cre a r fá cilm e n t e u n d e s crip t o r d e d e s p lie g u e , s im p le m e n t e
e d it a m o s u n o e xis t e n t e . Ab a jo t e n e m o s u n e s q u e le t o d e u n fich e ro web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC


"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

<!-- Tus definiciones van aquí -->

</web-app>

In s e rt a m o s n u e s t ro s d e s crip t o re s d e d e s p lie g u e d e s e rvle t s e n t re la s e t iq u e t a s <web-app> y </web-


app> d e e s t e fich e ro . El d e s crip t o r d e d e s p lie g u e d e u n s e rvle t d e b e in clu ir la s s ig u ie n t e s e t iq u e t a s ( e n
e s t e o rd e n ) :

<servlet>

<servlet-name>nombre</servlet-name>

<servlet-class>package.nombre.MiClass</servlet-class>

</servlet>

Ta m b ié n e s t á n p e rm it id a s a n t e s d e la e t iq u e t a d e cie rre </servlet> va ria s e t iq u e t a s o p cio n a le s , q u e


d e fin e n la s p ro p ie d a d e s d e e je cu ció n d e l s e rvle t , . Es t a s e t iq u e t a s d e fin e n p ro p ie d a d e s co m o p a rá m e t ro s
d e in iciliza ció n , s i e l s e rvle t d e b e ría o n o ca rg a rs e e n la a rra n a d a , lo s ro le s d e s e g u id a d , y la s
p ro p ie d a d e s d e p a n t a lla ( in clu ye n d o ico n o s g ra n d e s y p e q u e ñ o s , n o m b re d e p a n t a lla y u n a
d e s crip ció n ) .

Ha s t a a h o ra , n u e s t ro d e s crip t o r d e d e s p lie g u e h a d e s crit o e l s e rvle t a l co n t e n e d o r d e s e rvle t s . Lu e g o ,


d e b e m o s d e s crib ir cu á n d o e l co n t e n e d o r d e s e rvle t s d e b e in vo ca r a l s e rvle t - - n o s re fe rim o s a e s t o
co m o m a p e o . En o t ra s p a la b ra s , d e b e m o s d e s crib ir có m o s e m a p e a u n a URL a l s e rvle t . En e l fich e ro
web.xml, la s URLs s e m a p e a n d e e s t a fo rm a :

<servlet-mapping>

<servlet-name>nombre</servlet-name>

<url-pattern>pattern</url-pattern>

http://www.programacion.com/java/articulo.desp_servlets.html (7 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

</servlet-mapping>

OK, s u ficie n t e t e o ría . Ve a m o s u n e je m p lo d e u n d e s crit o r d e d e s p lie g u e d e u n a a p lica ció n Re a l. Ab a jo


p o d e m o s ve r e l fich e ro web.xml m ín im o q u e d e s crib e n u e s t ro s e rvle t d e e je m p lo RequestDetails:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC


"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

<servlet>
<servlet-name>RequestDetails</servlet-name>
<servlet-class>org.stevengould.javaworld.RequestDetails</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>RequestDetails</servlet-name>
<url-pattern>SampleServlet</url-pattern>
</servlet-mapping>

</web-app>

Co m o p u e d e s ve r e n la e t iq u e t a d e m a p e o , h e m o s e le g id o la URL /SampleServlet p a ra m a p e a r n u e s t ro
s e rvle t RequestDetails.

Ya e s t á ! He m o s cre a d o n u e s t ra p rim e ra a p lica ció n We b q u e co n t ie n e u n s ó lo s e rvle t . Ah o ra d e b e ría m o s


p o d e r d e s p le g a r e s t a a p lica ció n e n cu a lq u ie r co n t e n e d o r s e rvle t co m p a t ib le co n la e s p e cifica ció n 2 . 2 .

De e s t a fo rm a s a b re m o s co m o t ra b a ja r co n e lla s y co m o d e s p le g a r n u e s t ra s a p lica cio n e s We b e n u n


m o d o d e d e s a rro llo . S in e m b a rg o , e n u n e n t o rn o d e p ro d u cció n , m a n t e n e r ju n t o s lo s fich e ro s
re la cio n a d o s e s m á s co n ve n ie n t e . En la s ig u ie n t e s e cció n , ve re m o s co m o cre a r fich e ro s a rch ivo s d e
a p lica cio n e s We b ( WARs ) q u e h a ce n e xa ct a m e n t e e s t o .

Cre a r W ARs

Co m o s e m e n cio n ó a n t e rio rm e n t e , u n fich e ro WAR s im p le m e n t e e s u n fich e ro JAR co n la e xt e n s ió n


ca m b ia d a p a ra re fle ja r s u p ro p ó s it o d ife re n t e . Ya h e m o s vis t o la e s t ru ct u ra d e d ire ct o rio s re q u e rid a
p a ra u n a a p lica ció n We b . Pa ra cre a r u n fich e ro WAR, u s a m o s e s t a m is m a e s t ru ct u ra d e d ire ct o rio .

Pa ra cre a r u n WAR p a ra n u e s t ra a p lica ció n , va m o s a l d ire ct o rio ra íz q u e co n t ie n e n u e s t ra a p lica ció n


We b y t e cle a m o s e l s ig u ie n t e co m a n d o :

jar cv0f myWebApp.war .

Ob s e rva e l p u n t o o b lig a t o rio q u e h a y a l fin a l d e la lín e a ; le d ice a l p ro g ra m a ja r q u e a rch ive e l


d ire ct o rio a ct u a l.

El co m a n d o jar a n t e rio r cre a rá u n fich e ro WAR lla m a d o myWebApp.war. Lu e g o , ve re m o s co m o


d e s p le g a r e s t e fich e ro WAR e n To m ca t 3 . 2 y e n We b Lo g ic S e rve r 6 . 0 .

http://www.programacion.com/java/articulo.desp_servlets.html (8 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

D e s p le g a r Ap lic a c io n e s W e b e n To m c a t 3 . 2
To m ca t 3 . 2 s irve co m o im p le m e n t a ció n d e re fe re n cia p a ra la e s p e cifica ció n Ja va S e rvle t 2 . 2 . Pa ra e l
p ro p ó s it o d e e s t e a rt ícu lo h e m o s a s u m id o q u e e s t á s u s a n d o To m ca t 3 . 2 . 1 o p o s t e rio r.

Pa ra d e s p le g a r n u e s t ra a p lica ció n We b e n To m ca t , co p ia m o s e l d ire ct o rio ra íz d e n u e s t ra a p lica ció n - - e l


q u e co n t ie n e web.xml y s u s s u b id re ct o rio s - - a l s u b d ire ct o rio webapps/ROOT/ d e n u e s t ra in s t a la ció n d e
To m ca t . Po d ría m o s q u e re r s a lva r u n a co p ia d e la a p lica ció n We b p o r d e fe ct o a n t e s d e s o b re e s crib irla .

Ba jo Un ix, p o r e je m p lo , s i h e m o s in s t a la d o To m ca t e n e l d ire ct o rio /opt/jakarta-tomcat-3.2.1,


d e b e ría m o s co p ia r la s cla s e s d e l s e rvle t d e b a jo d e l d ire ct o rio :

/opt/jakarta-tomcat-3.2.1/webapps/ROOT/

S i e je cu t a m o s To m ca t b a jo Win d o ws y lo s h e m o s in s t a la d o e n e l d ire ct o rio C:\Program Files\Jakarta-


Tomcat-3.2.1, d e b e ría m o s co p ia r la s cla s e s d e l s e rvle t b a jo e l d ire ct o rio :

C:\Program Files\Jakarta-Tomcat-3.2.1\webapps\ROOT\

El s u b d ire ct o rio webapps/ROOT/WEB-INF/classes e s e l d ire ct o rio p o r d e fe ct o e n e l q u e To m ca t b u s ca rá


n u e s t ra s cla s e s Ja va . S i h e m o s d e fin id o q u e n u e s t ro s s e rvle t s p e rt e n e ce n a u n p a q u e t e , d e b e ría m o s
s e g u ir la s re g la s e s t á n d a r d e Ja va y cre a r lo s s u b d ire ct o rio s a p ro p ia d o s p a ra q u e la JVM p u e d a
e n co n t ra r n u e s t ra s cla s e s , co m o h icim o s a n t e rio rm e n t e . Po r e je m p lo , s i d e fin im o s n u e s t ro s e rvle t e n u n
p a q u e t e com.mycompany.myproject, e n t o n ce s d e b e ría m o s t e n e r la e s t ru ct u ra d e d ire ct o rio s q u e s e ve
e n la s ig u ie n t e fig u ra :

Nu e s t ra s cla s e s Ja va e s t a rá n e n e l s u b d ire ct o rio myproject.

Es t o e s t o d o lo n e ce s a rio . No h a y m á s co n fig u ra ció n p o s t e rio r. S ig u ie n d o co n e l e je m p lo


RequestDetails, in t e n t a co p ia r lo s fich e ro s d e la a p lica ció n We b e n la a p lica ció n We b p o r d e fe ct o d e
To m ca t .

P ro b a r e l S e rv le t

Pa ra p ro b a r n u e s t ro s e rvle t , a rra n ca e l s e rvid o r To m ca t , a b re t u n a ve g a d o r We b , y e s crib e u n a URL co n


la s ig u ie n t e fo rm a :

http://:/

Do n d e :

● address e s e l n o m b re o d ire cció n IP d e la m á q u in a q u e e s t á e je cu t a n d o

http://www.programacion.com/java/articulo.desp_servlets.html (9 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

To m ca t . Po d e m o s u s a r localhost s i e l n a ve g a d o r s e e s t á e je cu t a n d o s o b re
la m is m a m á q u in a q u e To m ca t .
● port e s e l p u e rt o e n e l q u e e s cu ch a To m ca t . Po r d e fe ct o , e s e l p u e rt o 8 0 8 0 .
● servletName e s e l n o m b re d e l s e rvle t q u e q u e re m o s in vo ca r. De b e ría
co rre s p o n d e r a l va lo r co n t e n id o e n la s e t iq u e t a s <url-pattern></url-
pattern> d e l fich e ro d e s crip t o r d e d e s p lie g u e .

Po r e je m p lo , s i To m ca t s e e s t á e je cu t a n d o e n la m is m a m á q u in a q u e e l n a ve g a d o r y e s t á e s cu ch a n d o e l
p u e rt o p o r d e fe ct o ( 8 0 8 0 ) , p o d e m o s p ro b a r n u e s t ro s e rvle t d e e je m p lo RequestDetails ( q u e e s t á
m a p e a d o a la URL SampleServlet) a b rie n d o la s ig u ie n t e URL:

http://localhost:8080/SampleServlet

Ob s e rva e l p o co t ra b a jo n e ce s a rio p a ra d e s p le g a r u n a a p lica ció n We b . Co p ia r a lg u n o s fich e ro s y p ro b a r.


Es t a fa cilid a d d e u s o la h a ce n p o s ib le la e s p e cifica ció n Ja va S e rvle t 2 . 2 y e l u s o d e lo s d e s crip t o re s d e
d e s p lie g u e .

Ah o ra q u e h e m o s vis t o co m o d e s p le g a r s e rvle t s e n To m ca t , ve a m o s co m o d e s p le g a r u n s e rvle t e n


We b Lo g ic S e rve r.

D e s p le g a r Ap lic a c io n e s W e b e n W e b Lo g ic S e rv e r 6 . 0
Au n q u e We b Lo g ic S e rve r 5 . 1 fu e la p rim e ra ve rs ió n d e We b Lo g ic S e rve r e n p ro p o rcio n a r s o p o rt e p a ra
la e s p e cifica ció n Ja va S e rvle t 2 . 2 y a p lica cio n e s We b , We b Lo g ic S e rve r 6 . 0 t ie n e a lg u n a s m e jo ra s
im p o rt a n t e s q u e s im p lifica n e l d e s p lie g u e d e a p lica cio n e s We b ( t a n t o e n fo rm a t o e xp a n d id o co m o
e m p a q u e t a d a s co m o u n fich e ro WAR) .

D e s p le g a r W ARs Us a n d o la Co n s o la

Co n n u e s t ro e je m p la r d e We b Lo g ic S e rve r e je cu t á n d o s e , a rra n ca m o s la W e b Lo g ic S e rv e r Co n s o le .
As u m ie n d o u n a in s t a la ció n p o r d e fe ct o , la co n s o la s e p u e d e t ra e r d e s d e la m á q u in a localhost a b rie n d o
la s ig u ie n t e URL e n u n n a ve g a d o r We b :

http://localhost:7001/console

S e n o s p e d íra e l n o m b re y la p a s s wo rd d e l u s u a rio s ys t e m a n t e s d e p e rm it irn o s e l p a s o a la Co n s o la .

Pa ra d e s p le g a r n u e s t ro fich e ro WAR, u n a ve z q u e h e m o s a cce d id o a la Co n s o la :

1 . Pu ls a m o s s o b re le n o d o W e b Ap p lic a t io n s e n e l p a n e l izq u ie rd o d e la
Co n s o la .
2 . En e l p a n e l d e re ch o , p u ls a m o s "I n s t a ll a n e w W e b Ap p lic a t io n . . . "
3 . Te cle a m o s e l p a t h co m p le t o y e l n o m b re d e fich e ro d e n u e s t ro WAR, o
u s a m o s e l b o t ó n Bro w s e . . . p a ra lo ca liza rlo .
4 . Pu ls a m o s e l b o t ó n Up lo a d .

Es t o e s t o d o . S i t o d o fu e co rre ct a m e n t e , d e b e ría s ve r n u e s t ra a p lica ció n We b lis t a d a b a jo W e b


Ap p lic a t io n s e n e l p a n e l izq u ie rd o d e la Co n s o la . Po d ría s n e ce s it a r re fre s ca r la vis t a p a ra q u e
a p a re cie ra .

http://www.programacion.com/java/articulo.desp_servlets.html (10 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

Co m o a lt e rn a t iva a l u s o d e la W e b Lo g ic S e rv e r Co n s o le , e s p o s ib le co p ia r la e s t ru ct u ra d e d ire ct o rio s


co m p le t a d e la a p lica ció n We b co m o lo h icim o s cu a n d o la d e s p le g a m o s e n To m ca t .

D e s p le g a r Ap lic a c io n e s W e b Ma n u a lm e n t e

No rm a lm e t n e cu a n d o u n o p ie n s a e n h a ce r la s t a re a s m a n u a lm e n t e , o a m a n o , la re a cció n a u t o m á t ica
e s e s p e ra r q u e la t a re a s e a u n p o q u it o m á s co m p lica d a q u e s u e q u iva le n t e a u t o m á t ico . En e l ca s o d e
d e s p le g a r a p lica cio n e s We b b a jo We b Lo g ic S e rve r 6 . 0 , la a p ro xim a ció n m a n u a l e s t a n fa cíl, s i n o m á s ,
q u e u t iliza r la Co n s o la .

S im p le m e n t e co p ia m o s n u e s t ro fich e ro WAR o la e s t ru ct u ra d e d ire ct o rio s d e n u e s t ra a p lica ció n We b


co m p le t a a l s u b d ire ct o rio config/mydomain/applications d e n u e s t ra d is t rib u ció n d e We b Lo g ic S e rve r
( d o n d e mydomain e s e l n o m b re d e n u e s t ro d o m in io We b Lo g ic S e rve r) . Ta n p ro n t o co m o n u e s t ro s
fich e ro s h a ya n s id o co p ia d o s , We b Lo g ic S e rve r d e s p lie g a la a p lica ció n We b .

P ro b a r e l S e rv le t

Pa ra p ro b a r n u e s t ro s e rvle t , a b re t u n a ve g a d o r We b , y e s crib e u n a URL co n la s ig u ie n t e fo rm a :

http://:/

Do n d e :

● address e s e l n o m b re o d ire cció n IP d e la m á q u in a q u e e s t á e je cu t a n d o


We b Lo g ic S e rve r. Po d e m o s u s a r localhost s i e l n a ve g a d o r s e e s t á
e je cu t a n d o s o b re la m is m a m á q u in a q u e We b Lo g ic S e rve r.
● port e s e l p u e rt o e n e l q u e e s cu ch a We b Lo g ic S e rve r. Po r d e fe ct o , e s e l
p u e rt o 7 0 0 1 .
● servletName e s e l n o m b re d e l s e rvle t q u e q u e re m o s in vo ca r. De b e ría
co rre s p o n d e r a l va lo r co n t e n id o e n la s e t iq u e t a s <url-pattern></url-
pattern> d e l fich e ro d e s crip t o r d e d e s p lie g u e .

Po r e je m p lo , s i We b Lo g ic S e rve r s e e s t á e je cu t a n d o e n la m is m a m á q u in a q u e e l n a ve g a d o r y e s t á
e s cu ch a n d o e l p u e rt o p o r d e fe ct o ( 7 0 0 1 ) , p o d e m o s p ro b a r n u e s t ro s e rvle t d e e je m p lo RequestDetails
( q u e e s t á m m a p e a d o a la URL SampleServlet) a b rie n d o la s ig u ie n t e URL:

http://localhost:7001/SampleServlet

De n u e vo , e l d e s p lie g u e d e n u e s t ra a p lica ció n We b o fich e ro WAR s ó lo h a re q u e rid o q u e co p ie m o s u n o s


cu a n t o s fich e ro s y p ro b e m o s e l s e rvle t - - n o s e n e ce s it a co n fig u ra ció n .

Re c o n fig u ra r Ap lic a c io n e s W e b

Un a ve z q u e h e m o s d e s p le g a d o n u e s t ra s a p lica cio n e s We b e n We b Lo g ic S e rve r, p o d e m o s u s a r la


Co n s o la p a ra co n fig u ra r y re co n fig u ra r la a p lica ció n . S e g ú n h a g a m o s lo s ca m b io s e n cu a lq u ie ra d e la s
co n fig u ra cio n e s , lo s d e t a lle s s e e s crib irá n a u t o m á t ica m e n t e e n e l fich e ro config.xml d e We b Lo g ic
S e rve r. La p ró xim a ve z q u e lo a rra n q u e m o s u s a rá e s t e fich e ro p a ra co n fig u ra r n u e s t ra a p lica ció n .

http://www.programacion.com/java/articulo.desp_servlets.html (11 de 12) [20/10/2002 18:15:38]


Java en castellano. Desplegar Servlets y Aplicaciones Web en Tomcat y WebLogic Server

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .

http://www.programacion.com/java/articulo.desp_servlets.html (12 de 12) [20/10/2002 18:15:38]


PHP en castellano. PHP y funciones FTP

Cu rs o s | Dire ccio n e s | Ta lle r PHP

Ta lle r P HP . P HP y fu n c io n e s FTP
Au t o r: Ale ja n d ro Alm u n ia

Le e r co m e n t a rio s ( 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 3 vo t o s ) Vo t a


1 . Co n fig u ra n d o e l fich e ro p h p . in i p a ra a d m it ir fu n cio n e s FTP
2 . Us a n d o la s fu n cio n e s FTP m á s s im p le s
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Va m o s a e xa m in a r la s fu n cio n e s FTP. A m e n u d o p u e d e n s e rn o s ú t ile s p a ra a lg ú n p ro ye ct o q u e s e


e s t é lle va n d o a ca b o , a s í q u e n u n ca vie n e d e m á s co n o ce rla s . Ad e m á s , s o n p o ca s , ¡¡ y m u y fá cile s !!

Co n fig u ra n d o e l fic h e ro p h p . in i p a ra a d m it ir fu n c io n e s FTP


An t e s d e n a d a , t e n e m o s q u e co n fig u ra r n u e s t ro fich e ro p h p . in i p a ra q u e a d m it a fu n cio n e s d e FTP.
Es m u y s im p le . En la p a rt e e n la q u e s e lis t a n t o d a s la s e xt e n s io n e s , d e b e h a b e r u n a co n e l n o m b re
p h p _ ft p . d ll De s co m e n t a d la , y, e n t e o ría , e s o e s t o d o lo q u e h a y q u e h a ce r p a ra d is p o n e r d e e lla s .
Pa ra e s t a r d e l t o d o s e g u ro , e je cu t a p h p in fo ( ) y lo s a b rá s .

Us a n d o la s fu n c io n e s FTP m á s s im p le s
Pa ra e s t e e je m p lo , va m o s a u s a r u n p o co d e có d ig o fu e n t e co m e n t a d o . Cre o q u e e s b a s t a n t e
e xp lica t ivo p o r s i m is m o .

<?

//Hazte cuenta de que puede tardar más de 30 segundos.


set_time_limit(0);

//Conectamos al host
$FtpConn = ftp_connect("ftp.cdrom.com");

//Nos autentificamos como usuarios registrados o anónimos


if(!ftp_login($FtpConn,"anonymous","me@you.net")){
echo "No se ha podido realizar la conexión";
exit;
}

//Obtenemos el directorio actual


$directorio = ftp_pwd($FtpConn);

//Obtenemos el listado del directorio actual


$lista = array();
$lista = ftp_nlist($FtpConn,$directorio);

http://www.programacion.com/php/articulo.fli_phpftp.html (1 de 3) [20/10/2002 18:15:40]


PHP en castellano. PHP y funciones FTP

//Mostramos sus contenidos


echo "<B><CENTER>CONTENIDOS DEL DIRECTORIO / (RAÍZ)</CENTER></B>";

echo "<pre>";
print_r($lista);
echo "</pre>";

//Cambiamos al directorio /pub


if(!ftp_chdir($FtpConn,"pub")){
echo "Se ha producido un error al entrar en el directorio /pub";
exit;
}

//Almacenamos el directorio actual


$directorio2 = ftp_pwd($FtpConn);

//Obtenemos el listado del directorio actual


$list = array();
$list = ftp_nlist($FtpConn,$directorio2);

//Mostramos su contenido
echo "<B><CENTER>CONTENIDOS DEL DIRECTORIO /pub</CENTER></B>";

echo "<pre>";
print_r($list);
echo "</pre>";

//Tansferimos un fichero
if(!ftp_get($FtpConn,"test.txt","test.txt",FTP_BINARY)){
echo "Imposible recuperar fichero test.txt";
exit;
}

/*

ESTO NO ES POSIBLE VERLO FUNCIONANDO


//Cargamos un fichero
if(!ftp_put($FtpConn,"ind.txt","",FTP_BINARY)){
echo "Imposible cargar el fichero";
exit;
}

*/
?>

Co m o ve s , e s m u y s e n cillo u s a r FTP co n PHP. S i t ie n e s a lg u n a d u d a , e s crib e m e a flip is @flip is . n e t y


la re s o lve ré , s i p u e d o , : - )

Le e r co m e n t a rio s ( 3 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 3 vo t o s ) Vo t a

http://www.programacion.com/php/articulo.fli_phpftp.html (2 de 3) [20/10/2002 18:15:40]


PHP en castellano. PHP y funciones FTP

Últ im o s c o m e n t a rio s [ S u b ir]

P a ra b e n jo ( 1 9 / 1 0 / 2 0 0 2 )
Po r Vict o r

S i lo q u e q u ie re s e s g e n e ra r g ra fica s d e b a rra s y d e m a s , e ch a le u n vis t a zo a p h p lo t , co n e s a cla s e


h e p o d id o lle va r a ca b o u n p ro ye ct o d e u n a e m p re s a q u e co n s is t ia e n e s o .

Re d e s - Lin u x, la we b d e re d e s b a jo lin u x.

u n a a y u d a e n g ra fic o s e n P HP ( 1 6 / 1 0 / 2 0 0 2 )
Po r b e n jo

h o la q u e t a l n e ce s it o a yu d a t e n g o q u e m o s t ra r d a t o s e n t o rt a s y b a rra s e n PHP p o r fa vo r m e
p u e d e n a yu d a r. . .

g ra cia s . . . .

Me h a re s u lt a d o m u y u t il ( 1 3 / 1 0 / 2 0 0 2 )
Po r m a n u e l

Gra cia s Ale ja n d ro .

Me h a re s u lt a d o m u y u t il e s t e a rt icu lo . Es ju s t o lo q u e e s t a b a b u s ca n d o , p a ra t e rm in a r u n
p ro g ra m illa q u e e s t a b a re a liza n d o .

Un s a lu d o .
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

© 1 9 9 8 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Ma n t e n id a p o r: Ale ja n d ro y Da n ie l.
PHP e n ca s t e lla n o .

http://www.programacion.com/php/articulo.fli_phpftp.html (3 de 3) [20/10/2002 18:15:40]


PHP en castellano. Trabajando con PHP y ficheros

Cu rs o s | Dire ccio n e s | Ta lle r PHP

Ta lle r P HP . Tra b a ja n d o c o n P HP y fic h e ro s


Au t o r: Ale ja n d ro Alm u n ia

Le e r co m e n t a rio s ( 4 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a


1 . Ab rie n d o u n fich e ro d e t e xt o , le ct u ra , e s crit u ra y a ñ a d id o
2 . S u b ir fich e ro s a l s e rvid o r
3 . Fo rza r d e s ca rg a d e fich e ro s a l n a ve g a d o r
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

En e s t e n u e vo t u t o ria l, vo y a t ra t a r e l t e m a d e lo s fich e ro s y co m o s e t ra b a ja e n e llo s d e s d e PHP. No va a s e r


e xh a u s t ivo n i m u ch o m e n o s , p re t e n d e p ro p o rcio n a ro s la s b a s e s p a ra q u e e xp e rim e n t é is p o r vu e s t ra cu e n t a y
rie s g o . Va m o s a a p re n d e r u n a s cu a n t a s co s a s ú t ile s a l re s p e ct o d e lo s fich e ro s , a s í q u e , s i e s t á is lis t o s ,
e m p e za m o s . Pa ra e s t e t u t o ria l s o lo vá is a n e ce s it a r PHP, n a d a m á s ( n i MyS QL n i o t ra co s a ) .

Ab rie n d o u n fic h e ro d e t e x t o , le c t u ra , e s c rit u ra y a ñ a d id o


Lo p rim e ro q u e va m o s a h a ce r e s e s crib ir u n s e n cillo fich e ro d e t e xt o . Lo a b rire m o s , e s crib ire m o s u n p a r d e
lín e a s d e n t ro d e é l y lu e g o lo ce rra re m o s . El có d ig o q u e re a liza e s t o s e p u e d e ve r a co n t in u a ció n .

<?

#Abrimos el fichero en modo de escritura


$DescriptorFichero = fopen("fichero_prueba.txt","w");

#Escribimos la primera línea dentro de él


$string1 = "Esta es la primera línea de texto\r\n";
fputs($DescriptorFichero,$string1);

#Escribimos la segunda línea de texto


$string2 = "Y esta es la segunda línea de texto\r\n";
fputs($DescriptorFichero,$string2);

#Cerramos el fichero
fclose($DescriptorFichero);

?>

As í p u e s , e l s crip t a n t e rio r lo ú n ico q u e h a ce e s a b rir u n fich e ro lla m a d o fic h e ro _ p ru e b a . t x t , y e s crib e


d e n t ro d e é l d o s lín e a s d e t e xt o . Os h a b ré is fija d o e n e l \ r\ n d e d e t rá s d e la s lín e a s d e t e xt o , e n la s va ria b le s
$ s t rin g 1 y $ s t rin g 2 . Es t o s e d e b e a q u e , s i n o e s t u vie s e p u e s t o , e l p ro g ra m a e s crib iría t o d o s e g u id o . Pa ra
co m p ro b a rlo , q u it a d lo y e je cu t a d d e n u e vo e l p ro g ra m a . Co n s o lo \ n n o s irva , a l m e n o s e n m i s is t e m a
Win d o ws 2 0 0 0 . : - ) En Lin u x, b a s t a co n u n \ n .

Ot ra d e la s co s a s im p o rt a n t e s d e l a n t e rio r s crip t e s a lg o q u e q u izá s n o h a ya m o s vis t o d e ce rca . Fijé m o n o s e n


la s ig u ie n t e lín e a :

$DescriptorFichero = fopen("fichero_prueba.txt","w");

La fu n ció n fo p e n s irve p a ra a b rir u n fich e ro e n u n m o d o . Lo s m o d o s p u e d e n s e r s e is y s o n lo s s ig u ie n t e s .

http://www.programacion.com/php/articulo.joa_phpficheros.html (1 de 10) [20/10/2002 18:15:51]


PHP en castellano. Trabajando con PHP y ficheros

Ad e m á s d e lis t a rlo s , e xp lica ré la s d ife re n cia s ( n o s ie m p re t a n o b via s ) , a l re s p e ct o d e e llo s .

Mo d o d e
Qu é s ig n ific a
a p e rt u ra
Mo d o d e s o lo le ct u ra . S e a b re e l fich e ro y e l
r cu rs o r s e co lo ca a l p rin cip io d e l m is m o ,
p e rm it ie n d o le e rlo h a s t a e l fin a l.
Mo d o d e le ct u ra / e s crit u ra . S e a b re e l fich e ro y e l
r+ cu rs o r s e co lo ca a l p rin cip io d e l
m is m o , p e rm it ie n d o le e r o e s crib ir e n e l fich e ro .
Mo d o d e s o lo e s crit u ra . S e cre a e l fich e ro s i n o
e xis t ie s e , y, s i e xis t e , s e b o rra t o d o s u
w
co n t e n id o , s e s it ú a e l cu rs o r a l p rin cip io d e l
fich e ro p e rm it ie n d o n o s e s crib ir.
Mo d o d e e s crit u ra / le ct u ra . S i e l fich e ro n o e xis t e ,
s e cre a , y, s i e xis t ie s e , s e b o rra t o d o s u
w+
co n t e n id o , s e s it ú a e l cu rs o r a l p rin cip io d e l
fich e ro p e rm it ié n d o n o s e s crib ir y le e r.
Mo d o d e a ñ a d id o . Ab re e l fich e ro , s it ú a e l cu rs o r
a l fin a l d e l m is m o y p e rm it e e s crib ir. S i e l fich e ro
a
n o e xis t e , lo cre a , p e ro , e n ca s o d e e xis t ir, n o
b o rra s u co n t e n id o .
Mo d o d e a ñ a d id o / le ct u ra . S it ú a e l cu rs o r a l fin a l
d e l fich e ro y p e rm it e e s crib ir y le e r. S i e l fich e ro
a+
n o e xis t e , lo cre a , p e ro , s i e xis t e , n o b o rra s u
co n t e n id o .

As í p u e s , e s t o s s o n lo s s e is m o d o s d e a b rir u n fich e ro . Va m o s a h o ra a ve r u n e je m p lo e n có d ig o d e l u s o d e
lo s m is m o s . El s ig u ie n t e s crip t va a h a ce r la s s ig u ie n t e s t a re a s :

● Cre a r u n fich e ro y e s crib ir e n é l d o s lín e a s d e t e xt o .


● Ab rir e l fich e ro d e n u e vo , e s t a ve z e n m o d o a ñ a d id o , y e s crib ir o t ra s d o s lín e a s .

Es p o co , p e ro la le ct u ra d e fich e ro s la ve re m o s a l fin a l d e e s t a p a rt e d e l t u t o ria l. De m o m e n t o , a q u í e s t á e l


có d ig o d e l s crip t d e PHP.

e s c rib ir2 . p h p

<?

#Abrimos el fichero en modo de escritura


$DescriptorFichero = fopen("fichero_prueba.txt","w");

#Escribimos la primera línea dentro de él


$string1 = "Esta es la primera línea de texto\r\n";
fputs($DescriptorFichero,$string1);

#Escribimos la segunda línea de texto


$string2 = "Y esta es la segunda línea de texto\r\n";
fputs($DescriptorFichero,$string2);

#Cerramos el fichero
fclose($DescriptorFichero);

#Volvemos a abrir el fichero, esta vez en modo de añadir

http://www.programacion.com/php/articulo.joa_phpficheros.html (2 de 10) [20/10/2002 18:15:51]


PHP en castellano. Trabajando con PHP y ficheros

$Descriptor2 = fopen("fichero_prueba.txt","a");

#Añadimos la tercera línea de texto


fputs($Descriptor2,"Esta es la tercera línea, añadida con modo \"a\"\r\n");

#Añadimos la cuarta línea de texto


fputs($Descriptor2,"Esta es la cuarta línea, añadida con modo \"a\"\r\n");

#Cerramos el fichero
fclose($Descriptor2);

?>

Co m o p o d é is co m p ro b a r s i a b rís e l fich e ro re cié n cre a d o , é s t e co n t ie n e cu a t ro lín e a s , d o s d e e lla s e s crit a s


co n m o d o "w" y o t ra s d o s co n m o d o "a ". S i ya t e n é is m á s o m e n o s cla ro co m o fu n cio n a , va m o s a p a s a r a ve r
d o s fu n cio n e s m u y ú t ile s p a ra le e r fich e ro s d e t e xt o : fgets() y feof(). A t ra vé s d e fgets() p o d e m o s le e r
u n a lín e a d e l fich e ro d e t e xt o ca d a ve z. feof() s irva p a ra s a b e r s i h e m o s lle g a d o a l fin a l d e l fich e ro . Pa ra ve r
co m o fu n cio n a n , cre a re m o s u n s crip t q u e le e rá e l fich e ro q u e h e m o s cre a d o co n lo s d o s s crip t s a n t e rio re s .

le e r. p h p

<?

#Abrimos el fichero en modo lectura


$DescriptorFichero = fopen("fichero_prueba.txt","r");

#Hasta que no lleguemos al final del fichero


while(!feof($DescriptorFichero)){

#Capturamos 4096 caracteres dentro de la línea,


#o menos si hay un retorno de carro antes
#(\r\n en Win32, \r en UNIX)
$buffer = fgets($DescriptorFichero,4096);

#Soltamos el texto, añadiendo <BR> detrás


echo $buffer."<BR>";
}

?>

Co m o vé is , e s t e s crip t le e e l fich e ro d e t e xt o lín e a a lín e a y lo va m o s t ra n d o e n e l n a ve g a d o r. La fu n ció n


feof() d e vu e lve TRUE cu a n d o h a lle g a d o a l fin a l d e l fich e ro . fgets(), va , p u e s , le ye n d o lin e a a lin e a y
a lm a ce n á n d o lo e n u n a va rib le lla m a d a $buffer.

Ah o ra va m o s a ve r co m o fu n cio n a n lo s m o d o s w+ , r+ y a + . Ve ré is q u e s o n d ife re n t e s d e lo s a n t e rio re s e n e l


s e n t id o d e q u e p e rm it e n d o s o p e ra cio n e s , y t a m b ie n e n e l s e n t id o d e co m o t ra t a n lo s fich e ro s . Em p e za re m o s
co n w+ . El s ig u ie n t e s crip t e xp lica q u é e s lo q u e h a ce e s t e m o d o co n lo s fich e ro s .

le e r_ w p lu s . p h p

<?

#Abrimos el fichero en modo w+


$Descriptor1 = fopen("nuevo_fichero.txt","w+");

#Vamos a escribir un par de líneas en el fichero


fputs($Descriptor1,"Esta es la primera línea de texto\r\n");

http://www.programacion.com/php/articulo.joa_phpficheros.html (3 de 10) [20/10/2002 18:15:51]


PHP en castellano. Trabajando con PHP y ficheros

fputs($Descriptor1,"Esta es la segunda línea de texto\r\n");

#Ahora cerraremos el fichero


fclose($Descriptor1);

#Volvemos a abrirlo en modo w+


$Descriptor2 = fopen("nuevo_fichero.txt","w+");

#Escribimos un par de líneas


fputs($Descriptor2,"Esta es la tercera línea de texto\r\n");
fputs($Descriptor2,"Esta es la cuarta línea de texto\r\n");

#Volvemos al principio del fichero


rewind($Descriptor2);

#Vamos leyendo líneas y mostrándolas


while(!feof($Descriptor2)){

$buffer = fgets($Descriptor2,4096);
echo $buffer."<BR>";

#Cerramos el fichero
fclose($Descriptor2);

?>

Co m o vé is , a l e je cu t a rlo , e l re s u lt a d o e s e l s ig u ie n t e :

Esta es la tercera línea de texto


Esta es la cuarta línea de texto

¿ Po r q u é n o a p a re ce n la p rim e ra y la s e g u n d a lín e a e s crit a s ? Ob s e rve m o s lo q u e h e m o s h e ch o . Prim e ro


a b rim o s e l fich e ro y e s crib im o s d e n t ro d e é l d o s lín e a s d e t e xt o . Tra s e s t o , lo ce rra m o s y lo vo lve m o s a a b rir,
e n m o d o w+ . Es t e m o d o BORRA EL CON TEN I D O AN TERI OR d e l fich e ro , p o r lo q u e e n e s t e s o lo a p a re ce n
la s d o s ú lt im a s lín e a s . Co m o vé is , s e p u e d e u t iliza r e s t e m o d o p a ra le e r d e s d e e l fich e ro co n fgets().

Ah o ra va m o s a ve r u n e je m p lo co n r+ . Va m o s a cre a r u n s crip t q u e h a g a lo m is m o q u e e l a n t e riro , p e ro e n


ve z d e a b rir lo s fich e ro s co n w+ , lo s a b rirá co n r+ .

le e r_ rp lu s . p h p

<?

#Abrimos el fichero en modo w+


$Descriptor1 = fopen("nuevo_fichero.txt","w");

#Vamos a escribir un par de líneas en el fichero


fputs($Descriptor1,"Esta es la primera línea de texto\r\n");
fputs($Descriptor1,"Esta es la segunda línea de texto\r\n");

#Ahora cerraremos el fichero


fclose($Descriptor1);

#Volvemos a abrirlo en modo w+


$Descriptor2 = fopen("nuevo_fichero.txt","r+");

http://www.programacion.com/php/articulo.joa_phpficheros.html (4 de 10) [20/10/2002 18:15:51]


PHP en castellano. Trabajando con PHP y ficheros

#Escribimos un par de líneas


fputs($Descriptor2,"Esta es la tercera línea de texto\r\n");
fputs($Descriptor2,"Esta es la cuarta línea de texto\r\n");

#Volvemos al principio del fichero


rewind($Descriptor2);

#Vamos leyendo líneas y mostrándolas


while(!feof($Descriptor2)){

$buffer = fgets($Descriptor2,4096);
echo $buffer."<BR>";

#Cerramos el fichero
fclose($Descriptor2);

?>

S i e je cu t á is e l s crip t , q u izá s o b s e rvé is , s o rp re n d id o s , q u e e l re s u lt a d o e s e l m is m o q u e e n e l a n t e rio r. Pe ro lo


q u e h a s u ce d id o , e n ca m b io , n o e s lo m is m o . Va m o s a a n liza rlo p o r p a rt e s . Prim e ro , h e m o s a b ie rt o e l fich e ro
e n m o d o w ( e s crit u ra ) , p a ra m e t e r d o s lín e a s e n e l fich e ro . Tra s e s t o , lo ce rra m o s , y lo a b rim o s e n m o d o r+
( le ct u ra / e s crit u ra ) . Al a b rirlo d e e s t e m o d o , e l cu rs o r s e s it ú a a l p rin cip io d e l fich e ro , p o r lo q u e a l e s crib ir la s
s ig u ie n t e s d o s lín e a s , b o rra e l co n t e n id o d e la s d o s lín e a s a n t e riro e s . . An t e s d e m o s t ra r e l co n t e n id o d e l
fich e ro u s a m o s la fu n ció n rewind(), q u e re b o b in a e l cu rs o r h a s t a e l p rin cip io d e l fich e ro . Pa ra a ñ a d ir a l fin a l
d e fich e ro , n e ce s it a m o s e l m o d o a + , co m o ve re m o s e n e l s ig u ie n t e e je m p lo .

le e r_ a p lu s . p h p

<?
#Abrimos el fichero en modo w+
$Descriptor1 = fopen("nuevo_fichero.txt","w+");

#Vamos a escribir un par de líneas en el fichero


fputs($Descriptor1,"Esta es la primera línea de texto\r\n");
fputs($Descriptor1,"Esta es la segunda línea de texto\r\n");

#Ahora cerraremos el fichero


fclose($Descriptor1);

#Volvemos a abrirlo en modo w+


$Descriptor2 = fopen("nuevo_fichero.txt","a+");

#Escribimos un par de líneas


fputs($Descriptor2,"Esta es la tercera línea de texto\r\n");
fputs($Descriptor2,"Esta es la cuarta línea de texto\r\n");

#Volvemos al principio del fichero


rewind($Descriptor2);

#Vamos leyendo líneas y mostrándolas


while(!feof($Descriptor2)){

$buffer = fgets($Descriptor2,4096);
echo $buffer."<BR>";

http://www.programacion.com/php/articulo.joa_phpficheros.html (5 de 10) [20/10/2002 18:15:51]


PHP en castellano. Trabajando con PHP y ficheros

#Cerramos el fichero
fclose($Descriptor2);

?>

El re s u lt a d o d e e s t e m é t o d o e s e l e s p e ra d o . S e a b re e l fich e ro e n m o d o e s crit u ra y s e in s e rt a n la s d o s lín e a s


d e t e xt o . S e cie rra e s t e d e s crip t o r, y s e a b re o t ro e n m o d o a + . El cu rs o r s e s it ú a a l fin a l d e l fich e ro , y
co m ie n za a a ñ a d ir e l t e xt o . El re s u lt a d o s o n la s cu a t ro lín e a s d e n t ro d e l fich e ro d e t e xt o .

Es t o e s t o d o e n cu a n t o a m o d o s d e a p e rt u ra . En la s ig u ie n t e s e cció n va m o s a ve r co m o s u b ir fich e ro s a l
s e rvid o r, a lg o m u y ú t il cu a n d o s e t ra t a d e p á g in a s we b .

S u b ir fic h e ro s a l s e rv id o r
Pa ra e je m p lifica r la s u b id a d e a rch ivo s a l s e rvid o r, va m o s a ve r u n s crip t d e e je m p lo . El s crip t t ie n e d o s
p a rt e s ; la p rim e ra , e l fo rm u la rio , e n e l q u e s e in t ro d u ce e l fich e ro a ca rg a r, y la s e g u n d a p a rt e , e n la q u e s e
p ro ce s a la s u b id a y s e in fo rm a a l u s u a rio d e l é xit o o fra ca s o d e la ca rg a .

u p lo a d . p h p

<?

if(!isset($cargar)){

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>:: Formulario de carga de ficheros ::</TITLE>
</HEAD>

<BODY>

<FORM NAME="elForm" METHOD="POST"


ACTION="<? echo $PHP_SELF; ?>?cargar=1"
ENCTYPE="multipart/form-data">

<TABLE WIDTH="80%" STYLE="font-family:Arial;font-size:9pt;">

<TR>
<TD ALIGN="LEFT"><INPUT TYPE="FILE" NAME="elFichero"></INPUT></TD>
</TR>

<TR>
<TD ALIGN="LEFT"><INPUT TYPE="SUBMIT" VALUE="Subir el fichero">
</TR>

</TABLE>

</FORM></BODY></HTML>

<?

http://www.programacion.com/php/articulo.joa_phpficheros.html (6 de 10) [20/10/2002 18:15:52]


PHP en castellano. Trabajando con PHP y ficheros

#Aquí realizamos la carga del fichero


if(isset($cargar)){

#Le damos al fichero un nuevo nombre


$nuevositio = "nuevo_fichero_caragado.000";

#Lo copiamos
if(!copy($elFichero,$nuevositio)){
echo "NO SE HA PODIDO SUBIR EL FICHERO";
}
else{
echo "FICHERO SUBIDO CON ÉXITO";
}

?>

Co m o ve m o s , e l s crip t re a liza la ca rg a d e l fich e ro . Pa ra riza r u n p o co m á s e l rizo o s p ro p o n g o lo s ig u ie n t e :


u n s crip t q u e s u b a u n n ú m e ro d e fich e ro s in t ro d u cid o p o r e l u s u a rio . S e co m p o n d rá d e t re s p a rt e s . La
p rim e ra , e n la q u e s e p re g u n t a a l u s u a rio e l n ú m e ro d e fich e ro s q u e d e s e a in t ro d u cir. La s e g u n d a , e n la q u e
a p a re ce n t o d o s lo s ca m p o s d e t ip o fich e ro , y la t e rce ra , e n la q u e s e p ro ce s a la ca rg a . El có d ig o e s co m o
s ig u e :

u p lo a d _ m u lt ip le . p h p

<?

/* Este script se encarga de subir múltiples ficheros al servidor. */

#Formulario en el que se pregunta el número de ficheros


if(!isset($fich) && !isset($cargar)){

$txt ="<HTML><HEAD>\n";
$txt.="<TITLE>:: ¿Cuántos ficheros quiere subir hoy? ::</TITLE>\n";
$txt.="</HEAD><BODY>\n";
$txt.="<FORM NAME=\"frmNumFicheros\"
METHOD=\"POST\"
ACTION=\"".$PHP_SELF."?fich=1\">\n";

$txt.="<BR><BR><BR><BR>\n";
$txt.="<DIV ALIGN=\"CENTER\">\n";
$txt.="<INPUT TYPE=\"TEXT\" NAME=\"numFicheros\">\n";
$txt.="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
$txt.="<B>Introduce el número de ficheros</B>\n";
$txt.="<BR><BR>\n";
$txt.="<INPUT TYPE=\"SUBMIT\"
VALUE=\"Mostrar campos para subir ficheros\">\n";
$txt.="<BR></DIV>\n";

$txt.="</FORM></BODY></HTML>\n";

echo $txt;
}

#Formulario en el que se muestran los campos tipo fichero


if(isset($fich)){

http://www.programacion.com/php/articulo.joa_phpficheros.html (7 de 10) [20/10/2002 18:15:52]


PHP en castellano. Trabajando con PHP y ficheros

$txt ="<HTML><HEAD>\n";
$txt.="<TITLE>:: ¿Cuántos ficheros quiere subir hoy? ::</TITLE>\n";
$txt.="</HEAD><BODY>\n";
$txt.="<FORM ENCTYPE=\"multipart-form/data\"
NAME=\"frmCargaFicheros\"
METHOD=\"POST\"
ACTION=\"".$PHP_SELF."?cargar=1&cantidad=".$HTTP_POST_VARS["numFicheros"]."\">\n";

for($i=0;$i<$HTTP_POST_VARS["numFicheros"];$i++){

$txt.="<INPUT TYPE=\"FILE\" NAME=\"fichero_$i\"><BR>\n";

$txt.="<INPUT TYPE=\"SUBMIT\" VALUE=\"cargar\">\n";

$txt.="</FORM></BODY></HTML>\n";

echo $txt;
}

#Parte que gestiona el proceso de carga


if(isset($cargar)){

for($n=0;$n<$cantidad;$n++){

#Creamos la "variable variable"


$nomvar = "fichero_$n";
$valvar = $;

#Extraemos el nombre del fichero sin la ruta


$nomfichero = basename($valvar);

#Le damos al fichero su nombre, metiéndolo dentro del directorio /subidas


$nuevositio = "subidas/".$nomfichero."";

#Lo copiamos
if(!copy($valvar,$nuevositio)){
echo "NO SE HA PODIDO SUBIR EL FICHERO";
}
else{
echo "FICHERO SUBIDO CON ÉXITO";
}
}

?>

De e s t e m o d o p o d e m o s ca rg a r va rio s fich e ro s a l m is m o t ie m p o . Te n d rá s q u e cre a r e l d ire ct o rio / s u b id a s


m a n u a lm e n t e . Va m o s a t e rm n a r co n e s t a s e cció n y p a s a r a la s ig u ie n t e , e n la q u e s e e xp lica co m o fo rza r a l
clie n t e a d e s ca rg a rs e e l fich e ro e n ve z d e ve rlo o n - lin e .

Fo rz a r d e s c a rg a d e fic h e ro s a l n a v e g a d o r

http://www.programacion.com/php/articulo.joa_phpficheros.html (8 de 10) [20/10/2002 18:15:52]


PHP en castellano. Trabajando con PHP y ficheros

A ve ce s p u e d e s e r in t e re s a n t e q u e e l u s u a rio s e d e s ca rg u e e l fich e ro e n ve z d e ve rlo o n - lin e . Pa ra re a liza r


e s t a o p e ra ció n , s o lo n e ce s it a m o s u t iliza r e l s ig u ie n t e có d ig o q u e vo y a e xp lica r a co n t in u a ció n . El s crip t
co n s t a d e u n a s o la p a rt e . Va m o s a d e s ca rg a rn o s u n fich e ro . h t m l, e n ve z d e ve rlo e n e l n a ve g a d o r. El
n o m b re d e l fich e ro s e rá p ru e b a _ d e s ca rg a . h t m l. El có d ig o e s co m o s ig u e :

d e s c a rg a r. p h p

<?

function Descargar($ElFichero){

$TheFile = basename($ElFichero);

header( "Content-Type: application/octet-stream");


header( "Content-Length: ".filesize($ElFichero));
header( "Content-Disposition: attachment; filename=".$TheFile."");
readfile($ElFichero);
}

Descargar("prueba_descarga.html");

?>

Co m o ve s , e l s crip t s e e je cu t a y e l fich e ro , p e s e a s e r HTML, e in t e rp re t a b le p o r e l n a ve g a d o r, e s fo rza d o a


s e r d e s ca rg a d o , ig u a l q u e s i h u b ié ra m o s p u ls a d o e l b o t ó n d e re ch o .

Y co n e s t o t e rm in o e s t e t u t o ria l. Es p e ro q u e o s s e a ú t il, a u n q u e s e q u e e s co rt o . Es p o s ib le q u e e n o t ro
t u t o ria l p ró xim o m e e xt ie n d a m á s s o b re e s t e t e m a ( s o b re t o d o s i m is co n o cim e in t o s a u m e n t a n , je je ) .

De s ca rg a t e lo s fich e ro s d e l a rt ícu lo

Le e r co m e n t a rio s ( 4 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

Mu c h a s g ra c ia s . ( 2 5 / 0 9 / 2 0 0 2 )
Po r S a lva d o r

Te a g ra d e zco la cla rid a d e n lo s e je m p lo s

u n a m e jo ra ? ( 1 6 / 0 9 / 2 0 0 2 )
Po r m ikil

b a s a d o e n e s t e e je m p lo s e m e p la n t e a n d o s cu e s t io n e s :
1 . - co m o p u e d o p re a s ig n a r e l va lo r a la va ria b le q u e re co g e e l n o m b re d e l fich e ro ? He p ro b a d o co n va lu e y
m e p re s e n t a e l ca m p o e n b la n co
2 . - p u e d o s u b ir u n fich e ro s in q u e e l u s u a rio s e p a d o n d e e s t a ? o s e a , yo s e q u e fich e ro e s y d o n d e e s t a ,
p u e s lo s u b o a l s e rvid o r y lo d e jo e n s u s it io . Es e s t o p o s ib le

Ex c e le n t e . . !! ( 1 3 / 0 9 / 2 0 0 2 )
Po r Da n ie l Ra m o s

http://www.programacion.com/php/articulo.joa_phpficheros.html (9 de 10) [20/10/2002 18:15:52]


PHP en castellano. Trabajando con PHP y ficheros

Pu e s la ve rd a d n o t e n g o co n o cim ie n t o s e n PHP, p e ro s i e n HTML ja va s crip t y C+ + , Po r lo q u e a p re n d e r


PHP s e m e h a s a u n m a s in t e re s a n t e a p re n d e rlo . . . Po r e l m o m e n t o e s t o y b ie n d o e l a m b ie n t e d e p h p ya q u e
De s co n o s co h a s t a e l co m p ila d o r. .

S ALUDOS . . !!

Gra c ia s ( 1 1 / 0 9 / 2 0 0 2 )
Po r m a n u e l

Gra cia s p o r e l a rt ícu lo m e h a re s u lt a d o m u y u t il.


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

© 1 9 9 8 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Ma n t e n id a p o r: Ale ja n d ro y Da n ie l.
PHP e n ca s t e lla n o .

http://www.programacion.com/php/articulo.joa_phpficheros.html (10 de 10) [20/10/2002 18:15:52]


Programación en castellano. El Proyecto ASP.NET Web Matrix

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El P ro y e c t o Nuestras zonas
AS P . N ET
W e b Ma t rix
Au t o r: We b Ma t rix

Le e r co m e n t a rio s ( 6 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a


1 . Pre s e n t a ció n
2 . De s crip ció n d e Ca ra ct e rís t ica s
2 . 1 . S e n cillo / Fá cil d e u s a r
2 . 2 . Lig e ra
2 . 3 . In t e g ra ció n co n la Co m u n id a d
3 . Má s in fo rm a ció n
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

P re s e n t a c ió n
El p ro ye ct o AS P. NET We b Ma t rix e s u n a h e rra m ie n t a lig e ra y fá cil d e u s a r p a ra e l d e s a rro llo d e
a p lica cio n e s we b co n AS P. NET. S u s ca ra ct e rís t ica s o rie n t a d a s a la co m u n id a d d e d e s a rro llo p e rm it e n
la in t e g ra ció n d e u s u a rio s n o ve le s y e xp e rt o s p a ra co m p a rt ir s u s co n o cim ie n t o s e n AS P. NET. El
Pro ye ct o We b Ma t rix u n e a la co m u n id a d AS P. NET a l u t iliza r ca ra ct e rís t ica s co m o la m e n s a je ría
in s t a n t á n e a , la in t e g ra ció n d e u n clie n t e d e Ch a t a s í co m o a yu d a b a s a d a e n co m u n id a d e s . To d o e s t o
u n id o a u n d is e ñ a d o r d e fo rm u la rio s we b t ip o WYS IWYG ( Wh a t Yo u S e e Is Wh a t Yo u Ge t - lo q u e
ve s e s lo q u e o b t ie n e s ) e s t á d is p o n ib le e n u n p a q u e t e d e u n t a m a ñ o m ín im o ~ 1 MB.

El Pro ye ct o AS P. NET We b Ma t rix e s :

● Un a h e rra m ie n t a lig e ra y s e n cilla d e u s a r, o rie n t a d a a la co m u n id a d , p a ra


co n s t ru ir a p lica cio n e s AS P. NET
● Co n s t ru id a ín t e g ra m e n t e u s a n d o e l . NET Fra m e wo rk co n le n g u a je C# .
● · In clu id o co n MS DE - Micro s o ft Da t a En g in e ( co m o u n a d e s ca rg a
s e p a ra d a )

El Pro ye ct o AS P. NET We b Ma t rix e s t á d is e ñ a d o p a ra :

● Co n e ct a r a lo s d e s a rro lla d o re s a la co m u n id a d AS P. NET


● Ayu d a r a lo s d e s a rro lla d o re s a fa cilit a r s u o p in ió n s o b re n u e va s
ca ra ct e rís t ica s
● Exp e rim e n t a r co n n u e va s id e a s y p o s ib ilid a d e s

El Pro ye ct o AS P. NET We b Ma t rix e s co m p le m e n t a rio a Vis u a l S t u d io . NET:

http://www.programacion.com/articulo.joa_aspnetwebmatrix.html (1 de 4) [20/10/2002 18:15:55]


Programación en castellano. El Proyecto ASP.NET Web Matrix

● We b Ma t rix h a s id o d is e ñ a d o p e n s a n d o e n e l d e s a rro lla d o r a ficio n a d o -


Vis u a l S t u d io . NET e s u n a im p re s io n a n t e h e rra m ie n t a p a ra e l d e s a rro lla d o r
p ro fe s io n a l.
● We b Ma t rix e s u n a e s t u p e n d a fo rm a d e m e jo ra r la s h a b ilid a d e s co n
AS P. NET, p a ra m á s a d e la n t e m ig ra r a Vis u a l S t u d io . NET.

D e s c rip c ió n d e Ca ra c t e rís t ic a s

S e n c illo / Fá c il d e u s a r

Ca ra c t e rís t ic a D e s c rip c io n
Co n s t ru ya a p lica cio n e s we b a rra s t ra n d o y s o lt a n d o
Dis e ñ a d o re s WYS IWYG co n t ro le s d e s d e la ca ja d e h e rra m ie n t a s d e We b
Ma t rix.
El Pro ye ct o We b Ma t rix fa cilit a va rio s e je m p lo s d e
a p lica cio n e s y p á g in a s in clu ye n d o : p á g in a s
Eje m p lo s d e Ap lica cio n e s
m a rca d a s p o r fe ch a , s e rvicio s we b , ca ch in g d e
s a lid a , p á g in a s d e lo g in , y m á s .
Co n s t ru ya fá cilm e n t e a p lica cio n e s we b o rie n t a d a s a
d a t o s a l in t e g ra r b a s e s d e d a t o s MS DE o S QL S e rve r
In t e g ra ció n d e Da t o s co n a p lica cio n e s we b . S im p le m e n t e a rra s t re y s u e lt e
la s t a b la s d e d a t o s d e s d e e l d is e ñ a d o r p a ra
co n e ct a rla s a s u p á g in a .
Me jo re s u s a p lica cio n e s y d e s a rro lle a m a yo r
Ga le ría d e Co n t ro le s ve lo cid a d u s a n d o co n t ro le s d e la g a le ría e n lín e a e n
www. a s p . n e t
Co n vie rt a cu a lq u ie r cla s e d e VB. NET o C# e n u n
Ge n e ra d o r Pro xy d e S e rvicio s We b XML
S e rvicio We b XML a u t o m á t ica m e n t e .
Na ve g u e rá p id a m e n t e p o r la b ib lio t e ca d e cla s e s d e l
Vis o r d e Cla s e s . NET . NET. Fra m e wo rk p a ra e n co n t ra r la s cla s e s q u e
n e ce s it a p a ra co n s t ru ir s u a p lica ció n .
Ap re n d e r VB. NET y C# e s s e n cillo co n e l e d it o r d e
Ed it o r d e t e xt o co lo re a d o d e rica s in t a xis
t e xt o co lo re a d o .
Ayu d a p a ra g u ia r a lo s u s u a rio s a t ra vé s d e la s
Ayu d a n t e s y p la n t illa s b a s a d o s e n t a re a s
t a re a s m á s co m u n e s .
Es p e cifiq u e u n o s p o co s p a rá m e t ro s y e l có d ig o e s
Co n s t ru ct o re s d e Có d ig o
g e n e ra d o a u t o m á t ica m e n t e .
Tra b a jo p o r a rch ivo s ( n o s e re q u ie re u n El t ra b a jo p o r a rch ivo s p ro p o rcio n a u n a a lt e rn a t iva
p ro ye ct o ) m á s lig e ra a l h a b it u a l t ra b a jo p o r p ro ye ct o s .
Alo je s u s a p lica cio n e s e n u n a s e le cció n d e t e rce ra s
S o p o rt e p a ra a lo ja m ie n t o FTP
co m p a ñ ía s vía FTP

Lig e ra

Ca ra c t e rís t ic a D e s c rip c io n

http://www.programacion.com/articulo.joa_aspnetwebmatrix.html (2 de 4) [20/10/2002 18:15:55]


Programación en castellano. El Proyecto ASP.NET Web Matrix

Pe q u e ñ o t a m a ñ o / d e s ca rg a rá p id a De s ca rg a ~ 1 MB - ¡ca b e e n u n d is co fle xib le !


El t ra b a jo p o r a rch ivo s p ro p o rcio n a u n a
Tra b a jo p o r a rch ivo s ( n o s e re q u ie re u n p ro ye ct o ) a lt e rn a t iva m á s lig e ra a l h a b it u a l t ra b a jo p o r
p ro ye ct o s .
In clu ye s u p ro p io s e rvid o r we b lig e ro - n o s e
re q u ie re u n a in s t a la ció n p re via d e IIS ( t a m b ié n
S e rvid o r We b p a ra p ru e b a s in clu id o
s e p ro p o rcio n a n e n la ce s a co m p a ñ ía s d e
a lo ja m ie n t o )

I n t e g ra c ió n c o n la Co m u n id a d

Ca ra c t e rís t ic a D e s c rip c io n
Co m e n t a co n t u s co le g a s AS P. NET a t ra vé s d e l MS N
In t e g ra ció n d e Me n s a je ría In s t a n t á n e a
m e s s e n g e r in t e g ra d o .
De s ca rg u e co n t ro le s we b y a d d - in s d e la g a le ría e n lín e a -
Ext e n s ib ilid a d o e s crib a lo s s u yo s p ro p io s y p ó n g a lo s a d is p o s ició n d e
o t ro s p a ra s u u s o .
Ob t e n g a re s p u e s t a rá p id a a s u s p re g u n t a s a l co n e ct a r
In t e g ra ció n e n Lis t s e rv / Ne ws g ro u p d ire ct a m e n t e co n lo s s e rvid o re s d e lis t a s y n o t icia s d e
AS P. NET.
Clie n t e d e Ch a t in t e g ra d o Acce s o d ire ct o a lo s "Ch a t ro o m s " d e AS P. NET.
Na ve g u e y d e s ca rg u e co n t ro le s e n lin e a - re vis e y p u n t ú e
S e le ccio n a d o r d e Co n t ro le s
lo s co n s t ru id o s p o r o t ro s .
Co m p a rt a s u s fra g m e n t o s d e có d ig o co n o t ro s
Co m p a rt id o r d e Fra g m e n t o s d e có d ig o
d e s a rro lla d o re s d e s d e la p ro p ia h e rra m ie n t a .

Má s in fo rm a c ió n
Má s in fo rm a ció n y d e s ca rg a a p a rt ir d e l 1 7 d e ju n io d e 2 0 0 2 e n :

● h t t p : / / www. a s p . n e t / we b m a t rixp ro je ct
● h t t p : / / www. we b m a t rixp ro je ct . n e t

Le e r co m e n t a rio s ( 6 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

jijiji ( 2 4 / 0 9 / 2 0 0 2 )
Po r Po p e

He y d a vid , e l p ro ye ct o AS P. NET We b Ma t rix e s t a cre a d o p o r m icro s o ft , ¿ o s p e n s a is ke re lla r co n


e l? XD

q u e re m o s s a b e r ( 0 5 / 0 9 / 2 0 0 2 )
Po r d a vid b a s t id a s

http://www.programacion.com/articulo.joa_aspnetwebmatrix.html (3 de 4) [20/10/2002 18:15:55]


Programación en castellano. El Proyecto ASP.NET Web Matrix

Le e s crib o p a ra co m e n t a rle q u e s u p ro ye ct o AS P. NET t ie n e e l m is m o n o m b re q u e u n p ro ye ct o q u e


t e rm in a m o s d e d is e ñ a r e l s e m e s t re p a s a d o e n n u e t ra u n ive rs id a d co n fin e s s o cia le s y e d u ca t ivo s .

Mu y re s p e t u o s a m e n t e s o licit o a u s t e d n o s e n vie u n a co p ia d e l p ro ye ct o o u n in fo rm e d e l p o r q u é
d e s u s s ig la s , ya q u e e l p ro ye ct o d e n o s o t ro s e s t a re g is t ra d o lo ca l y n a cio n a lm e n t e co n e l m is m o
n o m b re y n o s in t e re s a ria co n o ce r d e s u p ro p u e s t a y p ro ye ct o p a ra t e n e r cla rid a d d e s u a p lica ció n
y fu n cio n a m ie n t o .

Ag ra d e ce m o s s u a t e n cio n a la p re s e n t e .

a te nta m e nte ,

DAVID F. BAS TIDAS


RUBEN D. OROZCO
--------------------
Dis e ñ a d o re s d e l S o ft wa re AS P. NET 1 . 0

Tra d u c c ió n ( 2 4 / 0 7 / 2 0 0 2 )
Po r Ale ja n d ro Ló p e z

Ho la , m e g u s t a ría p ro p o n e r la t ra d u cció n d e la d o cu m e n t a ció n d e l p ro ye ct o , ya h e t ra d u cid o p a rt e


d e é l, e n cu a n t o lo t e n g a lis t o m e g u s t a ría s u b irlo a la p á g in a , p a ra s u re vis ió n , ya q u e n o s o y
t ra d u ct o r d e p ro fe s ió n . . = P, a d e m á s q u ie ro s a b e r co n q u ié n d e b o co n t a ct a rm e p a ra q u e lo
p o n g a n e l lin e a .

AS P . N ET w e b MAt rix ( 2 6 / 0 6 / 2 0 0 2 )
Po r Jh o n Cu a d ro s

S e ria g e n ia l s i e s t u vie s e e n ca s t e lla n o , a d e m á s p a ra p o d e rlo b a ja r e n u n zip

Cu a n d o lo s u b e n e n e s p a ñ o l? ( 1 8 / 0 6 / 2 0 0 2 )
Po r Lo m a xCyrru s

Co m o ya e s d e co s t u b re e s t o y le ye n d o s s u s in fo s , y e s t e d e a s p lo e n cu e n t ro g e n ia l, p e ro s i lo
s u b e n e n e s p a ñ o l s e ria m u ch o m e jo r.
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulo.joa_aspnetwebmatrix.html (4 de 4) [20/10/2002 18:15:55]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

Do cu m e n t a ció n | Re cu rs o s | Ta lle r Ja va

Ta lle r Ja v a . JD C Te c h Tip s ( 2 0 d e D ic ie m b re d e 2 0 0 1 )
Au t o r: S u n
Tra d u c t o r: Ju a n An t o n io Pa lo s ( Ozit o )

Le e r co m e n t a rio s ( 0 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 4 vo t o s ) Vo t a


1 . Pre s e n t a ció n
2 . Cre a r Mo d a l In t e rn a l Fra m e s , Ap ro xim a ció n I
3 . Cre a r Mo d a l In t e rn a l Fra m e s , Ap ro xim a ció n II
4 . Co p yrig h t y n o t a s d e la t ra d u cció n
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

P re s e n t a c ió n
Bie n ve n id o a lo s Co n s e jo s Té cn ico s d e la Co n e xió n d e l De s a rro lla d o r Ja va ( JDC) , d e l 2 0 d e
Dicie m b re d e 2 0 0 1 . Es t a e d ició n cu b re :

● Cre a r Mo d a l In t e rn a l Fra m e s , Ap ro xim a ció n I.


● Cre a r Mo d a l In t e rn a l Fra m e s , Ap ro xim a ció n II.

Es t o s co n s e jo s fu e ro n d e s a rro lla d o s u s a n d o Ja va ( t m ) 2 S DK, S t a n d a rd Ed it io n v 1 . 3

S e p u e d e ve r e s t a e d ició n ( e n s u o rig in a l e n in g lé s ) d e lo s Co n s e jo s Té cn ico s e n fo rm a t o h t m l e n


h t t p : / / ja va . s u n . co m / jd c/ JDCTe ch Tip s / 2 0 0 1 / t t 1 2 2 0 . h t m l

Cre a r Mo d a l I n t e rn a l Fra m e s , Ap ro x im a c ió n I
El co n ju n t o d e co m p o n e n t e s Ja v a Fo u n d a t io n Cla s s e s ( JFC) P ro je c t S w in g p ro p o rcio n a e l
co m p o n e n t e JOptionPane p a ra m o s t ra r s im p le s d ía lo g o s e s t á n d a rd s . Un d iá lo g o e s u n a ve n t a n a
q u e m u e s t ra in fo rm a ció n , p e ro t a m b ié n e s p e ra u n a re s p u e s t a d e l u s u a rio . Po r e je m p lo , u n d iá lo g o
p o d ría a vis a r a l u s u a rio d e u n p ro b le m a p o t e n cia l, y t a m b ié n m o s t a r u n b o t o n OK p a ra q u e e l
u s u a rio p u e d a re co n o ce r e l a vis o . Po d e m o s m o s t ra r u n d iá lo g o e n u n a ve n t a n a p o p u p o u n m a rco
in t e rn o , e s d e cir, u n a ve n t a n a d e n t ro d e o t ra ve n t a n a .

Pa ra m o s t ra r u n d iá lo g o e n u n a ve n t a n a d e p o p u p , u s a m o s u n o d e lo s m é t o d o s
JOptionPaneshowXXXDialog co m o showMessageDialog. La ve n t a n a d e s p le g a b le e n e s t e ca s o e s
m o d a l. Es t o s ig n ifica q u e e l u s u a rio d e b e re s p o n d e r a la ve n t a n a a n t e s d e q u e e l p ro g ra m a co n t in ú e
s u e je cu ció n . Pe ro h a y m á s - - m o d a l t a m b ié n s ig n ifica q u e e l u s u a rio n o p u e d e in t e ra ct u a r co n o t ra s
p a rt e s d e l p ro g ra m a . Pa ra m o s t ra r u n d iá lo g o e n u n fra m e in t e rn o , u s a m o s u n o d e lo s m é t o d o s
showInternalXXXDialog d e JOptionPane. Es t o s d iá lo g o s d e m a rco in t e rn o n o s o n m o d a le s . S in
e m b a rg o h a y ve ce s q u e p o d ría m o s q u e re r q u e u n d iá lo g o in t e rn o s e a m o d a l. Es t e t ru co m o s t ra rá
co m o cre a r u n d iá lo g o m o d a l e n u n m a rco in t e rn o .

Ha y u n lím it e p a ra s o p o rt a r la m o d a lid a d e n m a rco s in t e rn o s cre a d o s p o r u n JOptionPane. Pa ra

http://www.programacion.com/java/articulo.tt011220.html (1 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

a p ro ve ch a rn o s d e e s t e lím it e , n e ce s it a m o s s it u a r e l fra m e in t e rn o e n e l g la s s p a n e d e l fra m e d o n d e


a p a re ce e l d e s kt o p p a n e .

S i h e m o s t ra b a ja d o co n fra m e s in t e rn o s , s a b e m o s q u e n o rm a lm e n t e a ñ a d im o s lo s fra m e s in t e rn o s ,
e s d e cir e je m p la re s d e JInternalFrame, a u n d e s kt o p p a n e , e s d e cir, u n e je m p la r d e
JDesktopPane. Un d e s kt o p p a n e e s u n p a n e l d e ca p a s q u e m a n e ja m ú lt ip le s fra m e s in t e rn o s
s o la p a d o s . Gla s s p a n e e s p a rt e d e l p a n e l ra íz co n e l q u e t ra t a u n a ve n t a n a d e a lt o n ive l. Un ro o t
p a n e s e co m p o n e d e t re s p a rt e s ( e l glass pane, e l layered pane, y e l content pane) , y u n a
cu a rt a p a rt e o p cio n a l ( la b a rra d e m e n ú ) . El content pane co n t ie n e lo s co m p o n e n t e s vis ib le s d e l
root pane. La b a rra d e m e n ú o p cio n a l co n t ie n e lo s m e n ú s d e l root pane. Y e l layered pane
p o s icio n a lo s co n t e n id o s d e l content pane y d e l m e n u b a r o p cio n a l. El glass pane e s ú t il e n la
in t e rce p ció n d e e ve n t o s q u e d e o t ra fo rm a p o d ría n p a s a r a t ra vé s d e lo s co m p o n e n t e s s u b ya ce n t e s .

Po r e s o , p a ra re p e t ir, p o d e m o s cre a r u n d iá lo g o m o d a l d e a lg u n a fo rm a e n u n fra m e in t e rn o cre a d o


p o r JOptionPane. Pa ra h a ce r e s t o , p o n e m o s e l internal frame e n e l glass pane d e l m a rco d o n d e
a p a re zca e l desktop pane. Es t a t é cn ica re s t rin g e la e n t ra d a s ó lo a e s e m a rco e s p e cifica d o . El
internal frame e n e s t e ca s o n o e s re a lm e n t e m o d a l. Pa ra s e r re a lm e n t e m o d a l, u n internal
frame n e ce s it a b lo q u e a rs e u n a ve z q u e s e h a m o s t ra d o . S in e m b a rg o , la a p ro xim a ció n n o re s t rin g e
la e n t ra d a a u n s ó lo co m p o n e n t e .

El p rim e r p a s o d e e s t a t é cn ica e s cre a r u n d iá lo g o d e n t ro d e u n in t e rn a l fra m e . JOptionPane, y


lu e g o u s a r lo s m é t o d o s createInternalXXX p a ra cre a r y m o s t ra r lo s co m p o n e n t e s message
n e ce s a rio s . Po r e je m p lo , lo s ig u ie n t e cre a u n m e n s a je d e d iá lo g o d e n t ro d e u n internal frame:

JOptionPane optionPane = new JOptionPane();


optionPane.setMessage("Hello, World");
optionPane.setMessageType(
JOptionPane.INFORMATION_MESSAGE);
JInternalFrame modal =
optionPane.createInternalFrame(desktop, "Modal");

El s ig u ie n t e p a s o e s s it u a r e l co m p o n e n t e e n e l glass pane d e la ve n t a n a d o n d e e s t á lo ca liza d o e l


desktop pane. El glass pane p u e d e s e r cu a lq u ie r co m p o n e n t e . Po r e s o , la fo rm a m á s fá cil d e h a ce r
e s t o e s cre a r u n JPanel t ra n s p a re n t e :

JPanel glass = new JPanel();


glass.setOpaque(false);
glass.add(modal);
frame.setGlassPane(glass);
glass.setVisible(true);
modal.setVisible(true);

Lo s ú lt im o s p a s o s s o n co n fig u ra r e l glass pane p a ra q u e in t e rce p t e lo s e ve n t o s , y p a ra o cu lt a rs e


cu a n d o e l internal frame s e cie rre . Pa ra q u e e l glass pane in t e rce p t e e ve n t o s , d e b e m o s a d ju n t a r
u n MouseListener y u n MouseMotionListener. Pa ra o cu lt a r e l glass pane cu a n d o s e cie rra e l
internal frame, n e ce s it a m o s a d ju n t a r u n InternalFrameListener a l internal frame:

class ModalAdapter extends InternalFrameAdapter {


Component glass;

public ModalAdapter(Component glass) {

http://www.programacion.com/java/articulo.tt011220.html (2 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

this.glass = glass;

// Associate dummy mouse listeners


// Otherwise mouse events pass through
MouseInputAdapter adapter = new MouseInputAdapter(){};
glass.addMouseListener(adapter);
glass.addMouseMotionListener(adapter);
}

public void internalFrameClosed(InternalFrameEvent e) {


glass.setVisible(false);
}
}

Aq u í t e n e m o s u n p ro g ra m a q u e p o n e t o d a s la s p ie za s ju n t a s . Cre a u n JDesktopPane co n u n s ó lo
internal frame. En e s t e m a rco h a y u n b o t ó n . Cu a n d o s e p u ls a e l b o t ó n , a p a re ce e l d iá lo g o d e
m e n s a je q u e b lo q u e a e l internal frame. Mie n t ra s q u e e s t á vis ib le , n o p o d e m o s p u ls a r e l p rim e r
b o t o ó n . Un a ve z p u ls a d o e l b o t o n OK d e la ve n t a n a d e l m e n s a je , p o d e m o s in t e ra ct ú a r co n e l p rim e r
internal frame.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Modal {

static class ModalAdapter


extends InternalFrameAdapter {
Component glass;

public ModalAdapter(Component glass) {


this.glass = glass;

// Associate dummy mouse listeners


// Otherwise mouse events pass through
MouseInputAdapter adapter =
new MouseInputAdapter(){};
glass.addMouseListener(adapter);
glass.addMouseMotionListener(adapter);
}

public void internalFrameClosed(


InternalFrameEvent e) {
glass.setVisible(false);
}
}

public static void main(String args[]) {


final JFrame frame = new JFrame(
"Modal Internal Frame");
frame.setDefaultCloseOperation(

http://www.programacion.com/java/articulo.tt011220.html (3 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

JFrame.EXIT_ON_CLOSE);

final JDesktopPane desktop = new JDesktopPane();

ActionListener showModal =
new ActionListener() {
public void actionPerformed(ActionEvent e) {

// Manually construct a message frame popup


JOptionPane optionPane = new JOptionPane();
optionPane.setMessage("Hello, World");
optionPane.setMessageType(
JOptionPane.INFORMATION_MESSAGE);
JInternalFrame modal = optionPane.
createInternalFrame(desktop, "Modal");

// create opaque glass pane


JPanel glass = new JPanel();
glass.setOpaque(false);

// Attach modal behavior to frame


modal.addInternalFrameListener(
new ModalAdapter(glass));

// Add modal internal frame to glass pane


glass.add(modal);

// Change glass pane to our panel


frame.setGlassPane(glass);

// Show glass pane, then modal dialog


glass.setVisible(true);
modal.setVisible(true);

System.out.println("Returns immediately");
}
};

JInternalFrame internal =
new JInternalFrame("Opener");
desktop.add(internal);

JButton button = new JButton("Open");


button.addActionListener(showModal);

Container iContent = internal.getContentPane();


iContent.add(button, BorderLayout.CENTER);
internal.setBounds(25, 25, 200, 100);
internal.setVisible(true);

Container content = frame.getContentPane();


content.add(desktop, BorderLayout.CENTER);
frame.setSize(500, 300);

http://www.programacion.com/java/articulo.tt011220.html (4 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

frame.setVisible(true);
}
}

Cre a r Mo d a l I n t e rn a l Fra m e s , Ap ro x im a c ió n I I
Au n q u e la a p ro xim a ció n a n t e rio r p ro p o rcio n a n m a rco s in t e rn o s q u e b lo q u e a b a n la s e n t ra d a s d e
o t ro s m a rco s in t e rn o s , lo s m a rco s n o e ra n re a lm e n t e m o d a le s . Pa ra s e r re a lm e n t e m o d a l, u n
internal frame n e ce s it a b lo q u e a rs e u n a ve z q u e s e h a m o s t ra d o . El internal frame d e a rrib a n o
h a ce e s t o .

Pa ra p o d e r h a ce r u n internal frame re a lm e n t e m o d a l, d e b e m o s h a ce rn o s co n e l d e s p a ch o d e
e ve n t o s cu a n d o e l fra m e s e h a m o s t ra d o . Es t o s e ría a d e m á s d e m o s t ra r e l fra m e e n e l glass pane.
To d a vía p o d e m o s u s a r e l JOptionPane p a ra cre a r lo s d iá lo g o s d e m e n s a je y d e e n t ra d a , p e ro
t a m b ié n n e ce s it a m o s a ñ a d ir a lg ú n co m p o rt a m ie n t o q u e n o rm a lm e n t e e s m a n e ja d o p o r n o s o t ro s
cu a n d o u s a m o s u n o d e lo s m é t o d o s showInternalXXX. De b id o a la n e ce s id a d d e u n
co m p o rt a m ie n t o p e rs o n a liza d o , y cu á n d o e s n e ce s it a d o , e s n e ce s a rio cre a r u n a s u b cla s e d e
JInternalFrame. Ha ce r e s t o t a m b ié n n o s p e rm it e m o ve r d e n t ro d e la s u b cla s e m u ch o d e l
co m p o rt a m ie n t o q u e h a cía m o s a n t e rio rm e n t e e n e l ActionListener.

La m a yo ría d e l t ra b a jo q u e n e ce s it a m o s p a ra cre a r u n internal frame re a lm e n t e m o d a l im p lica


co m p le t a r e l co n s t ru ct o r d e la s u b cla s e . S im p le m e n t e co p ia n d o e l có d ig o d e l ActionListener d e la
a p ro xim a ció n a n t e rio r a l co n s t ru ct o r p ro p o rcio n a m o s u n m a rco d e t ra b a jo e n e l q u e p o d e m o s
co n s t ru irlo . Pa s a n d o lo e n e l JRootPane, p o d e m o s u s a r e s t e JInternalFrame m o d a l e n u n JApplet
a s í co m o e n u n JFrame.

public ModalInternalFrame(String title,


JRootPane rootPane, Component desktop,
JOptionPane pane) {
super(title);

// create opaque glass pane


final JPanel glass = new JPanel();
glass.setOpaque(false);

// Attach mouse listeners


MouseInputAdapter adapter =
new MouseInputAdapter(){};
glass.addMouseListener(adapter);
glass.addMouseMotionListener(adapter);

// Add in option pane


getContentPane().add(pane, BorderLayout.CENTER);

// *** Remaining code to be added here ***

// Add modal internal frame to glass pane


glass.add(this);

// Change glass pane to our panel


rootPane.setGlassPane(glass);

http://www.programacion.com/java/articulo.tt011220.html (5 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

// Show glass pane, then modal dialog


glass.setVisible(true);
}

Ob s e rva q u e e l ú n ico có d ig o n o co p ia d o d e s d e e l ActionListener e s la lla m a d a fin a l a


setVisible(true) d e l internal frame.

Alg u n a d e la s o t ra s t a re a s q u e re a liza n lo s m é t o d o s showInternalXXX d e JOptionPane in clu ye n la


s e cció n d e u n d iá lo g o d e cie rre u n a ve z q u e e l b o t ó n s e h a s e le ccio n a d o ( o s e h a in t ro d u cid o u n a
e n t ra d a ) , y a lg u n a s t a re a s re la cio n a d a s co n la a p a rie n cia q u e ca s i s ie m p re t ie n e n a lg o q u e ve r co n
e l t a m a ñ o . De b id o a q u e n o e s t á m o s u s a n d o e l m é t o d o showInternalXXX, d e b e m o s re a liza r o t ra s
t a re a s n o s o t ro s m is m o s .

La fo rm a d e co n fig u ra r e l cie rre d e l internal frame e s a d ju n t a r u n PropertyChangeListener a l


option pane. En e l JOptionPane, cu a n d o s e s e le ccio n a u n b o t ó n o s e in t ro d u ce u n a e n t ra d a ,
d is p a ra la g e n e ra ció n d e u n PropertyChangeEvent. Po d e m o s ce rra r e l m a rco cu a n d o s u ce d a e s t e
e ve n t o . Aq u í t e n e m o s e l có d ig o p a ra e s t e co m p o rt a m ie n t o :

// Define close behavior


PropertyChangeListener pcl =
new PropertyChangeListener() {
public void propertyChange(
PropertyChangeEvent event) {
if (isVisible() &&
(event.getPropertyName().equals(
JOptionPane.VALUE_PROPERTY) ||
event.getPropertyName().equals(
JOptionPane.INPUT_VALUE_PROPERTY))) {
try {
setClosed(true);
} catch (PropertyVetoException ignored) {
}
ModalInternalFrame.this.setVisible(false);
glass.setVisible(false);
}
}
};
pane.addPropertyChangeListener(pcl);

Ha y t re s t a re a s re la cio n a d a s co n la a p a rie n cia q u e n e ce s it a m o s re a liza r. Lo s d iá lo g o s d e m a rco s


in t e rn o s e s t á n d e fin id o s p a ra t e n e r u n b o rd e d ife re n t e a l b o rd e n o rm a l d e lo s internal frames. Po r
e s o , n e ce s it a m o s co n fig u ra r u n a p ro p ie d a d clie n t e p a ra e l m a rco . La s e g u n d a t a re a e s in icia liza r e l
t a m a ñ o y la p o s ició n d e l internal frame. Po d ría m o s co d ifica r "a m a n o " u n t a m a ñ o ( s in e m b a rg o ,
e l s ig u ie n t e có d ig o ce n t ra e l m a rco ) . La ú lt im a t a re a e s m a rca r e l internal frame co m o e l
s e le ccio n a d o . Aq u í e s t á e l có d ig o e n ca rg a d o d e re a liza r e s t a s t re s t a re a s :

// Change frame border


putClientProperty("JInternalFrame.frameType",
"optionDialog");

http://www.programacion.com/java/articulo.tt011220.html (6 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

// Size frame
Dimension size = getPreferredSize();
Dimension rootSize = desktop.getSize();

setBounds((rootSize.width - size.width) / 2,
(rootSize.height - size.height) / 2,
size.width, size.height);
desktop.validate();
try {
setSelected(true);
} catch (PropertyVetoException ignored) {
}

Añ a d ie n d o e s t o s d o s b lo q u e s d e có d ig o e n e l m e d io d e n u e s t ro co n s t ru ct o r co m p le t a m o s la
in icia liza ció n d e la s u b cla s e d e JInternalFrame.

Lo ú lt im o q u e t e n e m o s q u e h a ce r e s t o m a r e l d e s p a ch o d e e ve n t o s d e s p u é s d e q u e e l internal
frame s e h a ya m o s t ra d o . No rm a lm e n t e e l d e s p a ch o d e e ve n t o s s e m a n e ja e n la cla s e EventQueue.
S in e m b a rg o , co m o e s t á m o s b lo q u e a n d o e l t h re a d d e m a n e jo d e e ve n t o s cu a n d o h a ce m o m o d a l a l
internal frame, e l EventQueue n u n ca ve rá lo s e ve n t o s , Po r e s o d e b e m o s re e m p la za r s u
fu n cio n a lid a d .

Pa ra p o d e r d e s p a ch a r e ve n t o s n o s o t ro s m is m o s , t o d o lo q u e t e n e m o s q u e h a ce r e s co p ia r e l có d ig o
d e l m é t o d o dispatchEvent() d e EventQueue. S i e l internal frame s e h a ce vis ib le d e s d e u n t h re a d
d is t in t o a l t h re a d d e d e s p a ch o d e e ve n t o s , in clu s o n i n e ce s it a m o s co p ia r e l có d ig o d e l m é t o d o
dispatchEvent(). En e s t e ca s o , t o d o lo q u e t e n e m o s q u e h a ce r e s lla m a r a wait() p a ra b lo q u e a r.
Lu e g o , cu a n d o s e cie rre e l m a rco , n e ce s it a m o s s e r n o t ifica d o s . Aq u í e s t á e l có d ig o d e d e s p a ch o d e
e ve n t o s :

public void setVisible(boolean value) {


super.setVisible(value);
if (value) {
startModal();
} else {
stopModal();
}
}

private synchronized void startModal() {


try {
if (SwingUtilities.isEventDispatchThread()) {
EventQueue theQueue =
getToolkit().getSystemEventQueue();
while (isVisible()) {
AWTEvent event = theQueue.getNextEvent();
Object source = event.getSource();
if (event instanceof ActiveEvent) {
((ActiveEvent)event).dispatch();
} else if (source instanceof Component) {
((Component)source).dispatchEvent(
event);
} else if (source instanceof

http://www.programacion.com/java/articulo.tt011220.html (7 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

MenuComponent) {
((MenuComponent)source).dispatchEvent(
event);
} else {
System.err.println(
"Unable to dispatch: " + event);
}
}
} else {
while (isVisible()) {
wait();
}
}
} catch (InterruptedException ignored) {
}
}

private synchronized void stopModal() {


notifyAll();
}

Aq u í h a y u n e je m p lo q u e lo p o n e t o d o ju n t o . En lu g a r d e s im p le m e n t e m o s t ra r u n m e n s a je d e
d iá lo g o , p id e a l u s u a rio u n a re s p u e s t a a u n a p re g u n t a S i/ N o cu a n d o s e m u e s t ra e l internal frame
m o d a l. Ob s e rva q u e t o d o lo q u e t e n e m o s q u e h a ce r d e s p u é s d e cre a r e l internal frame e s
m o s t ra rlo :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.beans.*;

public class ModalInternalFrame extends JInternalFrame {

public ModalInternalFrame(String title, JRootPane


rootPane, Component desktop, JOptionPane pane) {
super(title);

// create opaque glass pane


final JPanel glass = new JPanel();
glass.setOpaque(false);

// Attach mouse listeners


MouseInputAdapter adapter =
new MouseInputAdapter(){};
glass.addMouseListener(adapter);
glass.addMouseMotionListener(adapter);

// Add in option pane


getContentPane().add(pane, BorderLayout.CENTER);

// Define close behavior

http://www.programacion.com/java/articulo.tt011220.html (8 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

PropertyChangeListener pcl =
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent
event) {
if (isVisible() &&
(event.getPropertyName().equals(
JOptionPane.VALUE_PROPERTY) ||
event.getPropertyName().equals(
JOptionPane.INPUT_VALUE_PROPERTY))) {
try {
setClosed(true);
} catch (PropertyVetoException ignored) {
}
ModalInternalFrame.this.setVisible(false);
glass.setVisible(false);
}
}
};
pane.addPropertyChangeListener(pcl);

// Change frame border


putClientProperty("JInternalFrame.frameType",
"optionDialog");

// Size frame
Dimension size = getPreferredSize();
Dimension rootSize = desktop.getSize();

setBounds((rootSize.width - size.width) / 2,
(rootSize.height - size.height) / 2,
size.width, size.height);
desktop.validate();
try {
setSelected(true);
} catch (PropertyVetoException ignored) {
}

// Add modal internal frame to glass pane


glass.add(this);

// Change glass pane to our panel


rootPane.setGlassPane(glass);

// Show glass pane, then modal dialog


glass.setVisible(true);
}

public void setVisible(boolean value) {


super.setVisible(value);
if (value) {
startModal();
} else {

http://www.programacion.com/java/articulo.tt011220.html (9 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

stopModal();
}
}

private synchronized void startModal() {


try {
if (SwingUtilities.isEventDispatchThread()) {
EventQueue theQueue =
getToolkit().getSystemEventQueue();
while (isVisible()) {
AWTEvent event = theQueue.getNextEvent();
Object source = event.getSource();
if (event instanceof ActiveEvent) {
((ActiveEvent)event).dispatch();
} else if (source instanceof Component) {
((Component)source).dispatchEvent(
event);
} else if (source instanceof MenuComponent) {
((MenuComponent)source).dispatchEvent(
event);
} else {
System.err.println(
"Unable to dispatch: " + event);
}
}
} else {
while (isVisible()) {
wait();
}
}
} catch (InterruptedException ignored) {
}
}

private synchronized void stopModal() {


notifyAll();
}

public static void main(String args[]) {


final JFrame frame = new JFrame(
"Modal Internal Frame");
frame.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);

final JDesktopPane desktop = new JDesktopPane();

ActionListener showModal =
new ActionListener() {
Integer ZERO = new Integer(0);
Integer ONE = new Integer(1);
public void actionPerformed(ActionEvent e) {

http://www.programacion.com/java/articulo.tt011220.html (10 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

// Manually construct an input popup


JOptionPane optionPane = new JOptionPane(
"Print?", JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);

// Construct a message internal frame popup


JInternalFrame modal =
new ModalInternalFrame("Really Modal",
frame.getRootPane(), desktop, optionPane);

modal.setVisible(true);

Object value = optionPane.getValue();


if (value.equals(ZERO)) {
System.out.println("Selected Yes");
} else if (value.equals(ONE)) {
System.out.println("Selected No");
} else {
System.err.println("Input Error");
}
}
};

JInternalFrame internal =
new JInternalFrame("Opener");
desktop.add(internal);

JButton button = new JButton("Open");


button.addActionListener(showModal);

Container iContent = internal.getContentPane();


iContent.add(button, BorderLayout.CENTER);
internal.setBounds(25, 25, 200, 100);
internal.setVisible(true);

Container content = frame.getContentPane();


content.add(desktop, BorderLayout.CENTER);
frame.setSize(500, 300);
frame.setVisible(true);
}
}

Pa ra a p re n d e r m á s s o b re internal frames, root panes, y s u glass pane p u e d e s ve r la le ccio n e s


d e l Ja v a Tu t o ria l "Ho w t o Us e In t e rn a l Fra m e s " y "Ho w t o Us e Ro o t Pa n e s ".

Co p y rig h t y n o t a s d e la t ra d u c c ió n
N o t a re s p e c t o a la t ra d u c c ió n

El o rig in a l e n in g lé s d e la p re s e n t e e d ició n d e lo s JDC Te ch Tip s fu e e s crit a p o r Gle n McClu s ke y, la


t ra d u cció n n o o ficia l fu e h e ch a p o r Ju a n A. Pa lo s ( Ozit o ) , cu a lq u ie r s u g e re n cia o co rre cció n h á g a la a l

http://www.programacion.com/java/articulo.tt011220.html (11 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

co rre o t u t o rja va @h o t m a il. co m , s u g e re n cia re s p e ct o a la e d ició n o rig in a l a m a ilt o : jd c-


we b m a s t e r@s u n . co m

N o t a ( Re s p e c t o a la e d ic ió n v ia e m a il)

S u n re s p e t a s u t ie m p o y s u p riva cid a d . La lis t a d e co rre o d e la Co n e xió n d e l d e s a rro lla d o r Ja va s e


u s a s ó lo p a ra p ro p ó s it o s in t e rn o s d e S u n Micro s ys t e m s ( t m ) . Us t e d h a re cib id o e s t e e m a il p o rq u e s e
h a s u s crit o a la lis t a . Pa ra d e s u s crib irs e va ya a la p á g in a d e s u s crip cio n e s , d e s m a rq u e ca s illa
a p ro p ia d a y h a g a clic e n e l b o t ó n Up d a t e .

S u s c rip c io n e s

Pa ra s u s crib irs e a la lis t a d e co rre o d e n o t icia s d e la JDC va ya a la p á g in a d e s u s crip cio n e s , e lija lo s


b o le t in e s a lo s q u e q u ie ra s u s crib irs e , y h a g a clic e n Up d a t e .

Re a lim e n t a c ió n

¿ Co m e n t a rio s ? , e n vie s u s u g e re n cia s a lo s Co n s e jo s Té cn ico s d e la JDC a m a ilt o : jd c-


we b m a s t e r@s u n . co m

Arc h iv o s

Us t e d e n co n t ra rá la s e d icio n e s d e lo s Co n s e jo s Té cn ico s d e la JDC ( e n s u o rig in a l e n in g lé s ) e n


h t t p : / / ja va . s u n . co m / jd c/ Te ch Tip s / in d e x. h t m l

Co p y rig h t

Co p yrig h t 2 0 0 1 S u n Micro s ys t e m s , In c. All rig h t s re s e rve d . 9 0 1 S a n An t o n io Ro a d , Pa lo Alt o ,


Ca lifo rn ia 9 4 3 0 3 US A.

Es t e d o cu m e n t o e s t a p ro t e g id o p o r la s le ye s d e a u t o r. Pa ra m a yo r in fo rm a ció n ve a
h t t p : / / ja va . s u n . co m / jd c/ co p yrig h t . h t m l

En la c e s a s it io s fu e ra d e S u n

Lo s Co n s e jo s Té cn ico s d e la JDC p u e d e n d a r e n la ce s a o t ro s s it io s y re cu rs o s . Ya q u e S u n n o t ie n e
co n t ro l s o b re e s o s s it io s o re cu rs o s u s t e d re co n o ce y a ce p t a q u e S u n n o e s re s p o n s a b le p o r la
d is p o n ib ilid a d d e t a le s s it io s o re cu rs o s , y n o s e re s p o n s a b iliza p o r cu a lq u ie r co n t e n id o , a n u n cio s ,
p ro d u ct o s u o t ro s m a t e ria le s d is p o n ib le s e n t a le s s it io s o re cu rs o s . S u n n o s e rá re s p o n s a b le , d ire ct a
o in d ire ct a m e n t e , p o r cu a lq u ie r d a ñ o o p é rd id a ca u s a d a o s u p u e s t a m e n t e ca u s a d a p o r o e n re la ció n
co n e l u s o d e o s e g u rid a d s o b re cu a lq u ie r t a l co n t e n id o , b ie n e s o s e rvicio s d is p o n ib le s e n o a t ra vé s
d e cu a lq u ie r s it io o re cu rs o .

El o rig in a l e n In g le s d e e s t a e d ició n d e lo s Co n s e jo s t é cn ico s fu e e s crit a p o r Gle n McClu s ke y.

JDC Te ch Tip s De ce m b e r 2 0 , 2 0 0 1

S u n , S u n Micro s ys t e m s , Ja va y Ja va De ve lo p e r Co n n e ct io n ( JDC) s o n m a rca s re g is t ra d a s d e S u n


Micro s ys t e m s In cs . e n lo s Es t a d o s Un id o s y cu a lq u ie r o t ro p a ís .

http://www.programacion.com/java/articulo.tt011220.html (12 de 13) [20/10/2002 18:16:09]


Java en castellano. JDC Tech Tips (20 de Diciembre de 2001)

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .

http://www.programacion.com/java/articulo.tt011220.html (13 de 13) [20/10/2002 18:16:09]


Programación en castellano. Foros de debate. Visual Basic

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Vis u a l Ba s ic Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

As u n t o Us u a rio Fe c h a Re s p u e s t a s Últ im a re s p u e s t a
2 0 d e o ct u b re d e
Fo rm a t o d e b o t o n e s d a n ilo id e 0 -
2002

Pre g u n t a S o b re 2 0 d e o ct u b re d e
En ErGiE 0 -
Co m a n d o S h e ll 2002

1 6 d e o ct u b re d e
Cre a ció n d e Ob je t o s gaby 4 2 0 d e o ct u b re d e 2 0 0 2
2002

S I TENEIS ALGUNA 5 d e s e p t ie m b re d e
ALBERTO 7 2 0 d e o ct u b re d e 2 0 0 2
DUDA 2002

Ca d e n a s d e m á s d e
J. P. L. 8 d e o ct u b re d e 2 0 0 2 1 1 9 d e o ct u b re d e 2 0 0 2
6 0 . 0 0 0 ch a r

Exis t e a lg ú n a p i d e l
m icro s o ft in t e rn e t 1 0 d e o ct u b re d e
p a n o ra m ixxx 1 1 9 d e o ct u b re d e 2 0 0 2
e xp lo re r p a ra 2002
VBa s ic? ? ? ? ?

Má s ca ra e n u n Te xt Bo x e p e re z 9 d e o ct u b re d e 2 0 0 2 3 1 9 d e o ct u b re d e 2 0 0 2

t ip o d e d a t o b o o le a n o 1 5 d e o ct u b re d e
p a ky 3 1 9 d e o ct u b re d e 2 0 0 2
( S í/ No ) 2002

Es p e ra r a q u e u n 1 8 d e o ct u b re d e
Em p a r 2 1 9 d e o ct u b re d e 2 0 0 2
p ro ce s o t e rm in e 2002

1 8 d e o ct u b re d e
s e g u rid a d a n t e t o d o m a n o lo 2 1 9 d e o ct u b re d e 2 0 0 2
2002

1 7 d e o ct u b re d e
En via r p u ls o s a l Lp t 1 Es li Mo re n o 2 1 9 d e o ct u b re d e 2 0 0 2
2002

co n t ro la r q u e n o h a ya
p a ky 29 de a gosto de 2002 5 1 9 d e o ct u b re d e 2 0 0 2
re g is t ro s d u p lica d o s

Aje cu t a r e n la Ba rra d e 1 8 d e o ct u b re d e
Wilb e rt 1 1 9 d e o ct u b re d e 2 0 0 2
Ta re a s 2002

1 7 d e o ct u b re d e
DAO y ADO Ru b é n 1 1 8 d e o ct u b re d e 2 0 0 2
2002

http://www.programacion.com/hilos.32.html (1 de 2) [20/10/2002 18:16:12]


Programación en castellano. Foros de debate. Visual Basic

Co n e xio n e s t e le fó n ica s 1 0 d e o ct u b re d e
Ern e s t o 1 1 8 d e o ct u b re d e 2 0 0 2
co n VB 2002

1 8 d e o ct u b re d e
VB A - > Ja va S e rvle t fro m e r 0 -
2002

Te n g o u n p ro b le m a m u y
a nsoba 31 de a gosto de 2002 2 1 8 d e o ct u b re d e 2 0 0 2
g ra ve ( Vis u a l Ba s ic)

VIS UAL BAS IC EN 1 2 d e o ct u b re d e


IS AEL ARENAS 3 1 8 d e o ct u b re d e 2 0 0 2
PAGINAS WEB 2002

1 5 d e o ct u b re d e
Urg e n t e p o r fa vo r licjrz 3 1 8 d e o ct u b re d e 2 0 0 2
2002

Bu s co p ro g ra m a d o r d e
vis u a l Ba s ic. Pa g o e n Iva n 9 d e o ct u b re d e 2 0 0 2 1 1 7 d e o ct u b re d e 2 0 0 2
e u ro s .

« 1 2 3 4 5 6 7 8 9 10 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.32.html (2 de 2) [20/10/2002 18:16:12]


Programación en castellano. Foros de debate. Visual FoxPro

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Vis u a l Fo x P ro Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a

Vis u a l Fo x vs Ma cro s e n 1 6 d e o ct u b re d e
Os va ld o 0 -
Exce l 2002

1 6 d e o ct u b re d e
Dis e n a d o r d e Arch ivo s ca rlo s ru b io 0 -
2002

PROGRAMA EN VIS UAL 5 d e s e p t ie m b re 1 6 d e o ct u b re d e


Va le n t in Gu zm a n 27
FOXPRO de 2002 2002

n e ce s it o p ro g ra m a d e a cce s o 1 4 d e o ct u b re d e
rt a fu r_ flo re s 0 -
a cu a lq u ie r s is t e m a 2002

1 4 d e o ct u b re d e
No va t o rt a fu r_ flo re s 0 -
2002

1 1 d e o ct u b re d e
URGENTE!!!!!!!!!!!!! Pa u l 0 -
2002

1 0 d e o ct u b re d e
Fo p e n m a rco s n o ya 0 -
2002

Ayu d a . . Co m o cre a r a rch ivo s 1 0 d e o ct u b re d e


saul 0 -
Me m o . . 2002

9 d e o ct u b re d e
El m e jo r RAD Lu ca s 0 -
2002

9 d e o ct u b re d e
Pro b le m a s co n Vis t a s Ca rlo s 0 -
2002

3 d e s e p t ie m b re 9 d e o ct u b re d e
Ayu d a p o rfa vo r! Es t e b a n 4
de 2002 2002

8 d e o ct u b re d e
Cu a l e s s u o p in io n ? ? Lu ca s 0 -
2002

Fu n çã o p a ra o b t e r o n u m e ro 8 d e o ct u b re d e
Ma rt in 0 -
d e d ia s u t e is 2002

2 d e o ct u b re d e
S e rvid o r Co m . Exe re n a r 0 -
2002

p ro g ra m a d e s e g u ro s e n fo x 1 d e o ct u b re d e 2 d e o ct u b re d e
a le ja n d ro 2
p ro 2002 2002

http://www.programacion.com/hilos.33.html (1 de 2) [20/10/2002 18:16:17]


Programación en castellano. Foros de debate. Visual FoxPro

Mo s t ra r d a t o s e n Grid co n 2 d e o ct u b re d e
ju a n 0 -
ra n g o d e fe ch a s 2002

COMO UTILIZAR MENUS Y 30 de


1 d e o ct u b re d e
FORMULARIO EN UNA MIS MA DAVID s e p t ie m b re d e 1 2002
PANTALLA 2002

Im p rim ir Ca m p o Nu m e rico 1 d e o ct u b re d e
Ma rca rva S 0 -
d e co lo r, co n If/ e ls e / e n d if 2002

30 de
In g Co m p u t a ció n Art u ro Aq u in o s e p t ie m b re d e 0 -
2002

28 de
De . t xt o . d b f a VFP 7 . 0 o zd a p a va s e p t ie m b re d e 0 -
2002

« 1 2 3 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.33.html (2 de 2) [20/10/2002 18:16:17]


Programación en castellano. Foros de debate. HTML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
HTML Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a
1 7 d e o ct u b re d e
Fo rm u la rio s Mó n ica 0 -
2002

a ve r q o s p a re ce e s t a we b , 1 7 d e o ct u b re d e
za p a m ix 0 -
g ra cia s 2002

a s p e ct o b a rra s d e 1 4 d e o ct u b re d e 1 7 d e o ct u b re d e
n e wh t m 2
d e s p la za m ie n t o 2002 2002

1 6 d e o ct u b re d e
Re fre s co e n n e t s ca p e 6 Ja vi 0 -
2002

1 5 d e o ct u b re d e
Ed it a r Fu e n t e s n o m e co p ie s 0 -
2002

4 d e o ct u b re d e 1 2 d e o ct u b re d e
we b g ra t is s in p u b licid a d s a n d ru p s 2
2002 2002

¿ co m o a g re g a r u n ch a t a 1 0 d e o ct u b re d e 1 1 d e o ct u b re d e
a n t o n io o rt e g a 1
u n a p a g in a ? 2002 2002

1 1 d e o ct u b re d e
pdf m a ria 0 -
2002

1 1 d e o ct u b re d e
s h o wm o d a ld ia lo g Jo rd i 0 -
2002

9 d e o ct u b re d e
fo rm s h t m l lo re n 2 9 d e o ct u b re d e 2 0 0 2
2002

2 2 d e m a yo d e
a u t o ru n . in f m ig u e l 3 9 d e o ct u b re d e 2 0 0 2
2002

3 d e o ct u b re d e
ca m b ia r e s t ilo a u n s e le ct Ma n u e l 2 9 d e o ct u b re d e 2 0 0 2
2002

9 d e o ct u b re d e
Pro b le m a s co n m a rco s Be le n 0 -
2002

Lis t a s d e Co rre o - Alg u ie n


2 2 d e ju n io d e
s a b e co m o p u e d o o b t e n e r Ju a n 1 7 d e o ct u b re d e 2 0 0 2
2002
d ire ccio n e s d e m a il

3 d e o ct u b re d e
Fo rm u la rio s Gio va n n i 0 -
2002

http://www.programacion.com/hilos.2.html (1 de 2) [20/10/2002 18:16:20]


Programación en castellano. Foros de debate. HTML

2 6 d e s e p t ie m b re
co n ve rt ir h t m l a fo rm a t o p d f max 3 3 d e o ct u b re d e 2 0 0 2
de 2002

1 1 d e a b ril d e
S a lt o d e p á g in a S ch e rzo 1 2 d e o ct u b re d e 2 0 0 2
2002

Co m o ca rg a r u n fra m e 2 d e o ct u b re d e
b a ra h o n a 0 -
e s p e cia l 2002

2 7 d e s e p t ie m b re
e lim in a r b a rra d e m e n u s a n d ru p s 1 2 d e o ct u b re d e 2 0 0 2
de 2002

COMO GRABO UN CAMPO


6 d e s e p t ie m b re
DE LA FORMA EN UN ju a n m a n u e l 3 2 d e o ct u b re d e 2 0 0 2
de 2002
ARCHIVO TEXTO

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.2.html (2 de 2) [20/10/2002 18:16:20]


Programación en castellano. Foros de debate. Java (básico)

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Ja v a ( b á s ic o ) Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a

a b rir y g u a rd a r fo rm a t o s 13 de
2 0 d e o ct u b re d e
jlu is g il o ct u b re d e 1
g rá fico s d e s d e Ja va 2002
2002

9 d e o ct u b re 2 0 d e o ct u b re d e
Em p e za r a t ra b a ja r co n Ja va p e d ro 3
de 2002 2002

2 2 d e ju n io 2 0 d e o ct u b re d e
Divis io n e n t re ce ro Jo rg e Mo lin a 2
de 2002 2002

18 de
2 0 d e o ct u b re d e
AYUUUUDAAAAAAAA Be lTh a S a r o ct u b re d e 4 2002
2002

12 de
1 9 d e o ct u b re d e
zo o m lu is p e re z_ g ra t e ro l o ct u b re d e 2 2002
2002

19 de
Ayu d a !! co n co o rd e n a d a s Lu is Ed u a rd o o ct u b re d e 0 -
2002

15 de
1 9 d e o ct u b re d e
ch u rro d e e rro re s r0 4 6 6 o ct u b re d e 6 2002
2002

Ma n u a l d e Vis u a lAg e e n 19 de
1 9 d e o ct u b re d e
GARCIAJ fe b re ro d e 54
ca s t e lla n o 2002
2002

17 de
1 8 d e o ct u b re d e
LINUX- JAVA- POS TGRES QL lo b m b o ct u b re d e 1 2002
2002

16 de
1 8 d e o ct u b re d e
ICONO DE JAVA Ga rcia j o ct u b re d e 3 2002
2002

17 de
1 8 d e o ct u b re d e
Ma n ife s t e n lo s JAR g a rio n o ct u b re d e 2 2002
2002

17 de
1 8 d e o ct u b re d e
S t rin g a a rra y d e ca ra ct e re s la b o ct u b re d e 2 2002
2002

http://www.programacion.com/hilos.6.html (1 de 2) [20/10/2002 18:16:22]


Programación en castellano. Foros de debate. Java (básico)

17 de
La n za r u n HELP! Lu is Alb e rt o o ct u b re d e 0 -
2002

¿ Co n ve rt ir in t y s h o rt a b yt e
3 0 d e a b ril 1 7 d e o ct u b re d e
p a ra a lm a ce n a rlo e n t a b la d e Ra yg m a r 4
de 2002 2002
b yt e s ?

S o b re la g e n e ra ció n d e 15 de
1 7 d e o ct u b re d e
o m a rd f1 8 o ct u b re d e 3
n ú m e ro s a le a t o rio s e n Ja va 2002
2002

17 de
Co n s u lt a JTa b le Ro s i o ct u b re d e 0 -
2002

Erro r ca rg a n d o e l d rive r jd b c 16 de
1 7 d e o ct u b re d e
irb o o ct u b re d e 1
p a ra m ys q l 2002
2002

Co n d a t o s h a ce r g ra fica s 15 de
1 7 d e o ct u b re d e
s a n d ra o ct u b re d e 1
e s t a d is t ica s e n ja va 2002
2002

Cla s s p a t h e n lin u x, y ve rs ió n 15 de
1 7 d e o ct u b re d e
jo s é Lu is o ct u b re d e 1
d e l kit d e d e s a rro llo 2002
2002

16 de
Co m o o b t e n e r e l p a t h ra m o n a l o ct u b re d e 0 -
2002

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.6.html (2 de 2) [20/10/2002 18:16:22]


Programación en castellano. Foros de debate. PHP

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
P HP Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a

Ext ra cció n d e u n n ú m e ro d e u n lin e a 19 de


b ig lio n e o ct u b re d e 0 -
d e u n t xt 2002

19 de
d u d a u rg e n t e g la d ys o ct u b re d e 0 -
2002

18 de
a yu d a a a p o r fa vo r Is m a e l o ct u b re d e 0 -
2002

17 de
1 7 d e o ct u b re d e
No fu n cio n a la a n g ie o ct u b re d e 1 2002
2002

17 de
Le s ru e g o m e a yu d e n ro cio o ct u b re d e 0 -
2002

17 de
PAGINAR CAMPOS MEMO DE FOX rflo re s o ct u b re d e 0 -
2002

Pro b le m a a l Es crib ir u n 14 de
1 7 d e o ct u b re d e
LEGION o ct u b re d e 2
TXT!!!!. . . AYUDA PLS !! 2002
2002

p ro b le m a s co n a ct u a liza cio n e s e n 17 de
1 7 d e o ct u b re d e
cris t in a o ct u b re d e 1
php 2002
2002

17 de
1 7 d e o ct u b re d e
Un p ro b le m a d e d is e ñ o LOUIAH o ct u b re d e 1 2002
2002

1 8 d e m a rzo 1 6 d e o ct u b re d e
p h p co n s q l s e rve r jo s e 4
de 2002 2002

16 de
p ro b le m a s co n o ra cle y p h p crim a x o ct u b re d e 0 -
2002

15 de
1 5 d e o ct u b re d e
Im p re s io n d e p a p e l e n p h p LANTE o ct u b re d e 1 2002
2002

http://www.programacion.com/hilos.7.html (1 de 2) [20/10/2002 18:16:25]


Programación en castellano. Foros de debate. PHP

14 de
1 4 d e o ct u b re d e
Erro r e n p ro g ra m a cio n . co m / p h p Gro g ie o ct u b re d e 1 2002
2002

14 de
1 4 d e o ct u b re d e
¿ Co m o co n t ro la r e rro re s ? Me t a lMa n ia c o ct u b re d e 3 2002
2002

13 de
1 4 d e o ct u b re d e
PHP COMO? a n t a re s o ct u b re d e 2 2002
2002

14 de
PHP y MyS QL Ju a n m a o ct u b re d e 0 -
2002

7 d e o ct u b re 1 2 d e o ct u b re d e
AS P o PHP? Me t a lMa n ia c 3
de 2002 2002

11 de
1 1 d e o ct u b re d e
'S o la p a s ' e n lu g a r d e m e n ú ? Ro b e rt o o ct u b re d e 1 2002
2002

Co m o e je cu t a r u n a q u e ry d e S AP e n 9 d e o ct u b re 1 0 d e o ct u b re d e
rca n a va t e 1
PHP? de 2002 2002

9 d e o ct u b re 1 0 d e o ct u b re d e
a yu d a p o r fa vo r, s o y n u e vo e n p h p Jo n a t h a n 3
de 2002 2002

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.7.html (2 de 2) [20/10/2002 18:16:25]


Programación en castellano. Foros de debate. XML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
XML Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a
1 7 d e o ct u b re d e
XML y b a s e s d e d a t o s yo m is m a 0 -
2002

Co m o g e n e ro u n lin k d e s d e
1 3 d e o ct u b re d e
XML a t ra ve s d e XS L co n Vict o r 0 -
2002
As p ? ?

2 3 d e s e p t ie m b re
XML co n a s p y b a s e d e d a t o s Lu is Alo n s o 0 -
de 2002

Tra t a m ie n t o Fich e ro s XML co n 1 8 d e s e p t ie m b re


Mir 0 -
Ja va de 2002

1 8 d e ju n io d e 1 3 d e s e p t ie m b re d e
XML y Arch ivo s Pla n o s g ro b le s m o n ro y 2
2002 2002

4 d e s e p t ie m b re
m i p ro ye ct o . . . la rra it z 0 -
de 2002

20 de a gosto de 27 de a gosto de
Pa rs e o in co rre ct o XML- XS L t it o 2
2002 2002

La p a la b ra cla ve xs l: s o rt n o s e
2 5 d e ju lio d e 21 de a gosto de
p u e d e u t iliza r e n e l e s p a cio d e va g a lu m e 1
2002 2002
n o m b re s h t t p : / / www. w3 . o rg /

6 de a gosto de 20 de a gosto de
Ta b la s e n XML Ma rco s 1
2002 2002

7 de a gosto de 20 de a gosto de
g e n e ra r HTML Die g o 1
2002 2002

co m o vis u a lis o lo q u e h e e ch o 7 de a gosto de


e d u a rd o 1 8 de a gosto de 2002
e n xm l 2002

7 de a gosto de
S ch e m a s ca s i4 1 6 0 -
2002

XS L. At rib u t o d e u n XML e n u n 6 de a gosto de


Ma ria n o 1 7 de a gosto de 2002
Te xt Bo x 2002

5 de a gosto de
S ch e m a s y DTDs ca s i4 1 6 0 -
2002

http://www.programacion.com/hilos.8.html (1 de 2) [20/10/2002 18:16:27]


Programación en castellano. Foros de debate. XML

5 de a gosto de
ru t a s d in a m ica s Txiki_ 3 0 -
2002

2 5 d e e n e ro d e
s u p e rin d ice s e n xm l e li 3 2 de a gosto de 2002
2002

2 3 d e ju lio d e
Co n e ccio n a S QL s e rve r a le b la ke 1 2 de a gosto de 2002
2002

2 3 d e ju lio d e
DTDs ca s i4 1 6 0 -
2002

le e r u n xm l d e s d e e l fin a l 2 2 d e ju lio d e
Va g a lu m e 0 -
h a s t a e l p rin cip io 2002

7 d e ju lio d e
Xm l y b a s e s d e d a t o s dani 2 2 2 d e ju lio d e 2 0 0 2
2002

« 1 2 3 4 5 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.8.html (2 de 2) [20/10/2002 18:16:27]


Programación en castellano. Foros de debate. Bases de datos y SQL

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Ba s e s d e d a t o s y S QL Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

As u n t o Us u a rio Fe c h a Re s p u e s t a s Últ im a re s p u e s t a
1 8 d e o ct u b re
co n s u lt a e n a cce s s LATER 0 -
de 2002

¿ S e p u e d e n cre a r b a s e s 1 8 d e o ct u b re
Wro 0 -
d e d a t o s co n e l m ys q l? de 2002

Act u a liza r d a t o s d e u n 1 8 d e o ct u b re
Mo x 0 -
fo rm u la rio , h e lp ! de 2002

1 8 d e o ct u b re
Du d a d e VB i Acce s Ma rc 1 1 8 d e o ct u b re d e 2 0 0 2
de 2002

1 5 d e o ct u b re
ba se de da tos g a ch a s 2 1 8 d e o ct u b re d e 2 0 0 2
de 2002

1 8 d e o ct u b re
a yu d a a a a a Is m a e l 0 -
de 2002

1 7 d e o ct u b re
ERROR EN BD Ma rco Me n d o za 0 -
de 2002

Co m o re a liza r e s t a 1 7 d e o ct u b re
Ro d rig o 0 -
co n s u lt a de 2002

m ig ra cio n d e d a t o s 1 7 d e o ct u b re
Ra fa l D. J. 0 -
( DBa s e a S QL) de 2002

m ig ra cio n d e d a t o s Ra fa l D. J. No vo a 1 7 d e o ct u b re
de 2002
0 -
( DBa s e a S QL) Hd e z

1 7 d e o ct u b re
in fo rm e s d e a cce s s y m a il t xu s 2 0 0 2 1 1 7 d e o ct u b re d e 2 0 0 2
de 2002

Co n ve rt id o r d e Fo x a S QL 1 5 d e o ct u b re
m va 1 1 6 d e o ct u b re d e 2 0 0 2
o Acce s de 2002

1 6 d e o ct u b re
Acce s s J. Lu is 0 -
de 2002

1 6 d e o ct u b re
Pre g u n t a s o b re a cce s s J. Lu is 0 -
de 2002

¿ p a ra q u é s irve n y co m o 1 5 d e m a yo d e
s ka n a t 1 1 6 d e o ct u b re d e 2 0 0 2
s e u t iliza n lo s CHECKS ? 2002

http://www.programacion.com/hilos.30.html (1 de 2) [20/10/2002 18:16:31]


Programación en castellano. Foros de debate. Bases de datos y SQL

1 5 d e o ct u b re
a cce s s e n riq u e 4 1 6 d e o ct u b re d e 2 0 0 2
de 2002

Có m o vin cu la r a cce s s co n 1 6 d e o ct u b re
Gra cie la 0 -
vis u a l b a s ic de 2002

Acce s o re m o t o a u n a BD
1 5 d e o ct u b re
e n FOX- co n virt ie rn d o a m va 0 -
de 2002
S QL o Acce s

1 5 d e o ct u b re
a cce s s jo s e ra m o n 2 1 5 d e o ct u b re d e 2 0 0 2
de 2002

1 5 d e o ct u b re
p a rb u lit o s m a rko s s 0 -
de 2002

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.30.html (2 de 2) [20/10/2002 18:16:31]


Programación en castellano. Foros de debate. ASP

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
AS P Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a

cu a n d o vo y a u s a r 1 9 d e o ct u b re d e
fre d d y 0 -
AS P? ? ? ? ? 2002

Pa g o p o r In t e rn e t
1 9 d e o ct u b re d e
( va lid a r t a rje t a s , J. L. De n g ra 0 -
2002
e t c. . . )

INS ERCION EN BAS E 1 6 d e o ct u b re d e 1 8 d e o ct u b re d e


Th e h ig h la n d e r 1
DE DATOS ACCES S 2002 2002

6 d e ju n io d e 1 8 d e o ct u b re d e
s e g u rid a d co n a s p iva n 2
2002 2002

ch ilis o ft a s p 1 7 d e o ct u b re d e
fo fo 0 -
g ra t is !!!!!!! 2002

1 7 d e o ct u b re d e
Bu s q u e d a p o r AS P Da n ie l 0 -
2002

Co m o cre a r HTML d e
1 1 d e o ct u b re d e 1 5 d e o ct u b re d e
m a n e ra Din á m ica co n Lu is Ern e s t o "Ca n u t o " 1
2002 2002
co d ig o a s p . NET

1 2 d e o ct u b re d e 1 5 d e o ct u b re d e
e s t u d ia n t e pa ty 1
2002 2002

9 d e o ct u b re d e 1 5 d e o ct u b re d e
Ob je t o S e s s io n m a t a re s e 1
2002 2002

1 5 d e o ct u b re d e
Ja va S crip t ya re a j 0 -
2002

1 5 d e o ct u b re d e 1 5 d e o ct u b re d e
Ca n t id a d d e vis it a s Nico m ix 1
2002 2002

1 5 d e o ct u b re d e
Erro r d e AS P e IIS h u g o fa ja rd o 3 d e ju lio d e 2 0 0 2 1 2002

Co rre g ir có d ig o s in
1 4 d e o ct u b re d e 1 5 d e o ct u b re d e
n e ce s id a d d e Ca rlo s 1
2002 2002
co n e ct a rm e

http://www.programacion.com/hilos.5.html (1 de 2) [20/10/2002 18:16:33]


Programación en castellano. Foros de debate. ASP

Co n e xió n a Km yS QL 1 5 d e o ct u b re d e
Rica rd o 0 -
co n AS P 2002

Co m o co rro a s p d e s d e
1 4 d e o ct u b re d e
m i o rd e n a d o r co n Hyu n ke l 0 -
2002
win d o ws m e

Re q u e s t . Fo rm d e u n
1 1 d e o ct u b re d e 1 4 d e o ct u b re d e
ca m p o d e t e xt o co n S e rg io 2
2002 2002
va ria s lín e a s

Dis e ñ a r p á g in a s AS P 1 0 d e o ct u b re d e 1 1 d e o ct u b re d e
m a t ild a 4
s in co n e xió n 2002 2002

Re d ire ccio n a r e - m a il 1 7 d e s e p t ie m b re 1 1 d e o ct u b re d e
ku n t e n t 1
co n AS P de 2002 2002

1 0 d e o ct u b re d e 1 1 d e o ct u b re d e
co m p a ra r fe ch a s iva n illo 4
2002 2002

1 0 d e o ct u b re d e 1 1 d e o ct u b re d e
No m b re d e ca m p o o| O 1
2002 2002

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.5.html (2 de 2) [20/10/2002 18:16:33]


Programación en castellano. Foros de debate. Servidores de Aplicaciones J2EE

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
S e rv id o re s d e Ap lic a c io n e s J2 EE Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a
1 8 d e o ct u b re d e
p ro b le m a s co n e jb y jb o s s Yica rt 0 -
2002

1 0 d e s e p t ie m b re 1 7 d e o ct u b re d e
To m ca t co m o S e rvicio NT Ed g a r 2
de 2002 2002

1 6 d e o ct u b re d e
La n za r u n HELP Lu is Alb e rt o 0 -
2002

1 4 d e o ct u b re d e 1 6 d e o ct u b re d e
co n e ct a r co n EJBs Lo co 1
2002 2002

p ro b le m a s co n 1 1 d e o ct u b re d e 1 5 d e o ct u b re d e
g u ille 1
s e t En t it yRe s o lve r 2002 2002

t e n g o q u e re in icia r t o m ca t 4 . 1 2 7 d e s e p t ie m b re 1 5 d e o ct u b re d e
jp e re z 1
a l m o d ifca r u n cla s s !!! de 2002 2002

1 5 d e o ct u b re d e
Co la b o ra ció n Ap a ch e + To m ca t LN 0 -
2002

9 d e o ct u b re d e
Ace n t o s y Ñ's e n We b lo g ic 6 . 1 Lillo 0 -
2002

Do cu m e n t a cio n d e 8 d e o ct u b re d e
Ce s a r 0 -
a rq u it e ct u ra s m u lt ica p a 2002

8 d e o ct u b re d e
a p a ch e 2 + t o m ca t iza s 0 -
2002

3 d e o ct u b re d e
in co n s is t e n t t h re a d ku s t u rica 0 -
2002

2 6 d e s e p t ie m b re
We b s p h e re JES US HC 3 2 d e o ct u b re d e 2 0 0 2
de 2002

MS Vis u a l S t u d io . Ne t 1 d e o ct u b re d e
MMvis u a ln e t 0 -
En t e rp ris e Arch it e ct ES 2002

m o d ifica r e l p ro ce s o d e
3 0 d e s e p t ie m b re
lo g in / p a s s wo rd d e win d o ws ka o s 0 -
de 2002
2000

http://www.programacion.com/hilos.31.html (1 de 2) [20/10/2002 18:16:40]


Programación en castellano. Foros de debate. Servidores de Aplicaciones J2EE

2 0 d e s e p t ie m b re 2 8 d e s e p t ie m b re d e
d u d a : jd b c+ o ra cle + t o m ca t g u ille 3
de 2002 2002

¿ Qu é h a ce q u e p u e d a e je cu t a r 3 1 d e ju lio d e 2 6 d e s e p t ie m b re d e
m a n u p a rre s 1
Ja va 2 ? 2002 2002

2 6 d e s e p t ie m b re
JBu ild e r 7 co n We b lo g ic Ra q u e l 0 -
de 2002

1 8 d e s e p t ie m b re 2 5 d e s e p t ie m b re d e
We b Lo g ic cla s s Ju le n K 1
de 2002 2002

To m ca t n o e n cu e n t ra m is 5 d e s e p t ie m b re 2 0 d e s e p t ie m b re d e
jp e re z 1
p ro p e rt ie s !!! de 2002 2002

1 9 d e s e p t ie m b re 2 0 d e s e p t ie m b re d e
To m ca t y Ap a ch e e n Win 2 0 0 0 JPé re z 1
de 2002 2002

« 1 2 3 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.31.html (2 de 2) [20/10/2002 18:16:40]


Java en castellano

Do cu m e n t a cio n | Re cu rs o s | Ta lle r Ja va

Novedades y más información en nuestra lista de correo

S e c c io n e s En nuestro sitio Patrocinado por


Tutoriales BEA System España
Búsqueda avanzada Buscar
Taller Java
Recursos D o c u m e n t a c ió n p ro p ia
Formación Tutoriales | Taller Java
Buscador
Downloads Desplegar Servlets y Aplicaciones Web en Apache Tomcat y
BEA WebLogic Server
Foros
Por: Juan A. Palos (Ozito)
En este artículo revisaremos los pasos implicados en el despliegue
Formación de un servlet, describe cómo tomar un servlet y crear una aplicación
Web - tanto en formato expandido como en un WAR. Ilustra cómo
J2EE: Aplicaciones desplegar una aplicación Web en Apache Tomcat y en WebLogic
avanzadas de Java para Server 6.0, un completo servidor de aplicaciones J2EE.
entornos profesionales Publicado el 12 de Octubre 2002

Curso a distancia New2Java 4: Leer y Escribir Ficheros y Manejar Excepciones


ofrecido por la UNED. Por: Juan A. Palos (Ozito)
Cuarta entrega de este tutorial para principiantes en Java, en la que
veremos como leer y escribir ficheros, como manejar los errores y
excepciones en Java y como utilizar el controlador de distribución de
componentes GUI "BoxLayout" Publicado el 9 de Octubre 2002
Operaciones Avanzadas con Bases de Datos Usando JDBC
Bea y Sun crean un 3.0
centro de soporte Por: Juan A. Palos (Ozito) Introducción al Servidor
conjunto para clientes Segundo de la serie de tutoriales en los que veremos entre otras WebLogic de BEA
cosas las "Sentencias Preparadas" y los "Tipos de Datos
Bea optimiza Weblogic Avanzados". Publicado el 4 de Octubre 2002 Instalación del Servidor
Jrockit 7.0 para todos WebLogic de BEA
Manejar Conexiones a Bases de Datos con JDBC 3.0
los servidores Intel
Por: Juan A. Palos (Ozito) Guía de Administración
Primero de una serie de tutoriales en los que veremos operaciones del Servidor WebLogic
Bea systems y Hp
avanzadas con bases de datos, utilizando fuentes de datos y de BEA
fortalecen su alianza
almacenes de conexiones Publicado el 15 de Junio 2002
Suplementos a New 2 Java
PALM y BEA se alian
para ofrecer Web Por: Juan A. Palos (Ozito)
Services En este tutorial os iremos ofreciendo "suplementos" del Tutorial sobre
iniciación a Java "New2Java" en sus páginas encontraremos
explicaciones de las clases y conceptos Java más importantes así No ve da de s
BEA refuerza su
como unos pequeños ejercicios con su solución. Publicado el 27 de
compromiso con LINUX Abril 2002
como plataforma
estratégica El API Apache SOAP v2.2
Por: Juan A. Palos (Ozito)
Más Siguiendo con los tutoriales sobre los marcos de trabajo más
interesantes que encontramos, esta vez os entregamos uno sobre el
API Apache SOAP, utilizado para enviar y recibir mensajes SOAP

http://www.programacion.com/java/ (1 de 3) [20/10/2002 18:17:16]


Java en castellano

Tu t o ria le s entre aplicaciones. Publicado el 13 de Abril 2002


12 - Octubre 2002
Tutoriales básicos JDC Tech Tips 22 de Enero de 2002 Nuevo artículo Desplegar
Por: Juan A. Palos (Ozito) Servlets y Aplicaciones
New 2 Java
Traducción de los JDC Tech Tips del 22 de enero de 2002 en los que Web enTomcat y
Tutoriales avanzados se tratan los siguientes temas: WebLogic Server en la
Java y XML Recuperar Mail con el API JavaMai zona Taller Java.
Serv. Aplicaciones Trabajar con el API Java Communications (puertos serie y
paralelo). 9 - Octubre 2002
FrameWorks Java Publicado el 13 de Abril 2002 New2Java: Leer y Escribir
Otros tutoriales Ficheros y Manejar
Comparación de APIs Java para XML
Por: Juan A. Palos (Ozito) Excepciones en la sección
Ta lle r Ja v a Comparativa de los diferentes APIs Java utilizados para trabajar en New 2 Java del TutorJava
Artículos propios XML, con una página dedicada a trucos para mejorar el rendimiento
de nuestras aplicaciones Java que trabajan con datos y documentos 4 - Octubre 2002
Traducción JDC Tips
XML. Publicado el 5 de Abril 2002 Operaciones Avanzadas
de Bases de Datos con
JDC Tech Tips 10 de Enero de 2002
Fo ro s JDBC 3.0 en el TutorJava
Por: Juan A. Palos (Ozito)
Java Básico
Traducción de los JDC Tech Tips del 10 de enero de 2002 en los que
Servlets-JSP se tratan los siguientes temas: 15 - junio 2002
Manejar Conexiones a
Java & XML Usar Excepciones
Dimensionar Texto con FontMetrics Bases de Datos con
Serv. Aplicaciones JDBC 3.0 en el TutorJava
Publicado el 5 de Abril 2002
Recomendamos Manual Básico de Struts
23 - abril 2002
Por: Javier Antoniucci Suplementos a New 2
Manual básico sobre el API Struts de Apache Publicado el 3 Abril 2002 Java en la sección New 2
Java del TutorJava
Tutoriales | Taller Java

13 - abril 2002
El API Apache SOAP v2.2
Lib ro s
en la sección Marcos de
Premio IBEST2001 a la
Trabajo del TutorJava
mejor página personal

13 - Abril 2002
Nuevo artículo JDC Tech
Tips del 22 de Enero de
2002 en la zona Taller
Java.

5 - abril 2002
Comparativa de APIs
Java and XSLT Enterprise JavaBeans, 3rd Edition... Java para XML en el
Los mejores libros en:
TutorJava
Re c u rs o s
5 - Abril 2002
Enlaces a direcciones en las que encontrara recursos y aplicaciones Nuevo artículo JDC Tech
que haran más fácil la elaboración de tus aplicaciones Java. Tips del 10 de Enero de
2002 en la zona Taller
Más Java.

Ot ra s W e b s 3 - Abril 2002
Manual Básico de Struts
en el TutorJava
23 - Marzo 2002
Nuevo artículo JDC Tech
Tips del 20 de Diciembre
de 2001 en la zona Taller
Java.

http://www.programacion.com/java/ (2 de 3) [20/10/2002 18:17:16]


Java en castellano

Java Hispano
23 - Marzo 2002
Java en Telepolis
Nuevo artículo JDC Tech
Java World Tips del 4 de Diciembre
Servlets.com de 2001 en la zona Taller
On Java Java.

Recomendamos 17 - Marzo 2002


Introdución a iPlanet
Application Server en la
sección Servidores Web
del TutorJava

16 - Marzo 2002
Nuevo artículo JDC Tech
Tips del 20 de Noviembre
de 2001 en la zona Taller
Java.

Prin cip io Pá g in a

An illo Ja v a : An t e rio r | Al Aza r | S ig u ie n t e ( vis it a la s m e jo re s p á g in a s e n ca s t e lla n o )

© 1 9 9 8 - 2 0 0 2 , Ju a n An t o n io Pa lo s ( Ozit o ) y Jo a q u in Bra vo .
Ja va e n ca s t e lla n o .
Es t a d ís t ic a s e n :

http://www.programacion.com/java/ (3 de 3) [20/10/2002 18:17:16]


HTML en castellano

Do cu m e n t a ció n | Re cu rs o s | Ta lle r We b

Novedades y más información en nuestra lista de correo

He m o s g a n a d o FORMACI ÓN
En nuestro sitio
S i q u ie re s u n cu rs o
Bú s q u e d a a va n za d a Buscar p ro fe s io n a l d e HTML,
Ja va s crip t , Dre a m we a ve r
o Fla s h , vis it a e n n u e s t ro
D o c u m e n t a c ió n ca n a l d e fo rm a ció n la

Re co p ila ció n d e d o cu m e n t a ció n co n la q u e


o fe rt a d e Cib e ra u la .

a p re n d e ra a re a liza r s u s p á g in a s We b .
Formación en nuevas
tecnologías
Cu rs o s p ro p io s
Tu t o ria le s p ro p io s
HTML 4 . 0 P D F ARTÍ CULOS
Ma n u a le s , lis t a s d e co rre o , n e ws , e n la Re d
DHTML Lib ro s , re vis t a s . To d o s lo s a rt ícu lo s d e l
Ja va S crip t 1 . 2 y m u ch o m á s . . . 2 0 0 0 e n u n fich e ro PDF.
XML
EMP LEO
XHTML
Fro n t Pa g e Mo n o g rá fic o s s o b re : Ofe rt a s d e t ra b a jo e n
Te cn o lo g ía s d e la
Dre a m we a ve r
XML In fo rm a ció n .

XS L, XS LT y XPa t h No ve da de s
Fo ro s Ja va S crip t
1 6 - S e p t ie m b re 2 0 0 2
HTML WAP, WML, e t c.
Nu e vo a rt íc u lo e n e l
Ja va s crip t Ta lle r W e b : Cre a r u n
XML fich e ro ro b o t s . t xt .

2 0 - Ma y o 2 0 0 2
Y m u ch o s m á s Nu e vo a rt íc u lo e n e l
Ta lle r W e b Ta lle r W e b : Pro t e cció n
Lib ro s co n co n t ra s e ñ a s ( III) :

En Am a z ó n :
Se cció n e n la q u e p e rio d ica m e n t e ire m o s p u b lica n d o Va rio s u s u a rio s .
t ru c o s y c o n s e jo s .
5 - Ab ril 2 0 0 2
Nu e vo c a p ít u lo d e l Cu rs o
Lo ú lt im o . . . d e Ja v a s c rip t 1 . 2 :
Exp re s io n e s re g u la re s .
Cre a r u n fich e ro ro b o t s . t xt . 6 - D ic ie m b re 2 0 0 1
Pro t e cció n co n co n t ra s e ñ a s ( III) : Va rio s u s u a rio s . Nu e vo a rt íc u lo e n e l
Va lid a ció n d e l n ú m e ro d e cu e n t a ( CCC) . Ta lle r W e b : Va lid a ció n
d e l n ú m e ro d e cu e n t a
( CCC) .
Ot ro s
1 8 - N o v ie m b re 2 0 0 1
Ma p a d e l We b In a u g u ra d o s lo s fo ro s d e
Lis t a d e co rre o Pro g ra m a ció n e n
Re c u rs o s
ca s t e lla n o .
Ot ro s W e b s
En la ce s a d ire ccio n e s e n la s q u e e n co n t ra ra re cu rs o s 7 - Oc t u b re 2 0 0 1
y a p lica cio n e s q u e h a ra n m á s fá cil la e la b o ra ció n d e Qu in t a y ú lt im a e n t re g a
t u s p á g in a s . d e l cu rs o d e
Dre a m we a ve r.

http://www.programacion.com/html/ (1 de 2) [20/10/2002 18:17:29]


HTML en castellano

Re cu rs o s g ra t is 3 0 - S e p t ie m b re 2 0 0 1
Cu a rt a e n t re g a d e l cu rs o
Ja va e n ca s t e lla n o d e Dre a m we a ve r.
AS P e n ca s t e lla n o
We b Es t ilo
DWEs

Prin cip io Pá g in a

© 1 9 9 8 - 2 0 0 2 , Da n ie l Ro d rig u e z y Jo a q u in Bra vo .
HTML e n ca s t e lla n o .
Es t a d ís t ic a s e n :

http://www.programacion.com/html/ (2 de 2) [20/10/2002 18:17:29]


Programación en castellano. Trabajando con PHP y ficheros

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Tra b a ja n d o c o n Nuestras zonas


P HP y fic h e ro s
Au t o r: Ale ja n d ro Alm u n ia

Le e r co m e n t a rio s ( 4 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a


1 . Ab rie n d o u n fich e ro d e t e xt o , le ct u ra , e s crit u ra y a ñ a d id o
2 . S u b ir fich e ro s a l s e rvid o r
3 . Fo rza r d e s ca rg a d e fich e ro s a l n a ve g a d o r
Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

En e s t e n u e vo t u t o ria l, vo y a t ra t a r e l t e m a d e lo s fich e ro s y co m o s e t ra b a ja e n e llo s d e s d e PHP. No va a s e r


e xh a u s t ivo n i m u ch o m e n o s , p re t e n d e p ro p o rcio n a ro s la s b a s e s p a ra q u e e xp e rim e n t é is p o r vu e s t ra cu e n t a y
rie s g o . Va m o s a a p re n d e r u n a s cu a n t a s co s a s ú t ile s a l re s p e ct o d e lo s fich e ro s , a s í q u e , s i e s t á is lis t o s ,
e m p e za m o s . Pa ra e s t e t u t o ria l s o lo vá is a n e ce s it a r PHP, n a d a m á s ( n i MyS QL n i o t ra co s a ) .

Ab rie n d o u n fic h e ro d e t e x t o , le c t u ra , e s c rit u ra y a ñ a d id o


Lo p rim e ro q u e va m o s a h a ce r e s e s crib ir u n s e n cillo fich e ro d e t e xt o . Lo a b rire m o s , e s crib ire m o s u n p a r d e
lín e a s d e n t ro d e é l y lu e g o lo ce rra re m o s . El có d ig o q u e re a liza e s t o s e p u e d e ve r a co n t in u a ció n .

<?

#Abrimos el fichero en modo de escritura


$DescriptorFichero = fopen("fichero_prueba.txt","w");

#Escribimos la primera línea dentro de él


$string1 = "Esta es la primera línea de texto\r\n";
fputs($DescriptorFichero,$string1);

#Escribimos la segunda línea de texto


$string2 = "Y esta es la segunda línea de texto\r\n";
fputs($DescriptorFichero,$string2);

#Cerramos el fichero
fclose($DescriptorFichero);

?>

As í p u e s , e l s crip t a n t e rio r lo ú n ico q u e h a ce e s a b rir u n fich e ro lla m a d o fic h e ro _ p ru e b a . t x t , y e s crib e


d e n t ro d e é l d o s lín e a s d e t e xt o . Os h a b ré is fija d o e n e l \ r\ n d e d e t rá s d e la s lín e a s d e t e xt o , e n la s va ria b le s
$ s t rin g 1 y $ s t rin g 2 . Es t o s e d e b e a q u e , s i n o e s t u vie s e p u e s t o , e l p ro g ra m a e s crib iría t o d o s e g u id o . Pa ra
co m p ro b a rlo , q u it a d lo y e je cu t a d d e n u e vo e l p ro g ra m a . Co n s o lo \ n n o s irva , a l m e n o s e n m i s is t e m a
Win d o ws 2 0 0 0 . : - ) En Lin u x, b a s t a co n u n \ n .

Ot ra d e la s co s a s im p o rt a n t e s d e l a n t e rio r s crip t e s a lg o q u e q u izá s n o h a ya m o s vis t o d e ce rca . Fijé m o n o s e n


la s ig u ie n t e lín e a :

$DescriptorFichero = fopen("fichero_prueba.txt","w");

http://www.programacion.com/articulo.joa_phpficheros.html (1 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

La fu n ció n fo p e n s irve p a ra a b rir u n fich e ro e n u n m o d o . Lo s m o d o s p u e d e n s e r s e is y s o n lo s s ig u ie n t e s .


Ad e m á s d e lis t a rlo s , e xp lica ré la s d ife re n cia s ( n o s ie m p re t a n o b via s ) , a l re s p e ct o d e e llo s .

Mo d o d e
Qu é s ig n ific a
a p e rt u ra
Mo d o d e s o lo le ct u ra . S e a b re e l fich e ro y e l
r cu rs o r s e co lo ca a l p rin cip io d e l m is m o ,
p e rm it ie n d o le e rlo h a s t a e l fin a l.
Mo d o d e le ct u ra / e s crit u ra . S e a b re e l fich e ro y e l
r+ cu rs o r s e co lo ca a l p rin cip io d e l
m is m o , p e rm it ie n d o le e r o e s crib ir e n e l fich e ro .
Mo d o d e s o lo e s crit u ra . S e cre a e l fich e ro s i n o
e xis t ie s e , y, s i e xis t e , s e b o rra t o d o s u
w
co n t e n id o , s e s it ú a e l cu rs o r a l p rin cip io d e l
fich e ro p e rm it ie n d o n o s e s crib ir.
Mo d o d e e s crit u ra / le ct u ra . S i e l fich e ro n o e xis t e ,
s e cre a , y, s i e xis t ie s e , s e b o rra t o d o s u
w+
co n t e n id o , s e s it ú a e l cu rs o r a l p rin cip io d e l
fich e ro p e rm it ié n d o n o s e s crib ir y le e r.
Mo d o d e a ñ a d id o . Ab re e l fich e ro , s it ú a e l cu rs o r
a l fin a l d e l m is m o y p e rm it e e s crib ir. S i e l fich e ro
a
n o e xis t e , lo cre a , p e ro , e n ca s o d e e xis t ir, n o
b o rra s u co n t e n id o .
Mo d o d e a ñ a d id o / le ct u ra . S it ú a e l cu rs o r a l fin a l
d e l fich e ro y p e rm it e e s crib ir y le e r. S i e l fich e ro
a+
n o e xis t e , lo cre a , p e ro , s i e xis t e , n o b o rra s u
co n t e n id o .

As í p u e s , e s t o s s o n lo s s e is m o d o s d e a b rir u n fich e ro . Va m o s a h o ra a ve r u n e je m p lo e n có d ig o d e l u s o d e
lo s m is m o s . El s ig u ie n t e s crip t va a h a ce r la s s ig u ie n t e s t a re a s :

● Cre a r u n fich e ro y e s crib ir e n é l d o s lín e a s d e t e xt o .


● Ab rir e l fich e ro d e n u e vo , e s t a ve z e n m o d o a ñ a d id o , y e s crib ir o t ra s d o s lín e a s .

Es p o co , p e ro la le ct u ra d e fich e ro s la ve re m o s a l fin a l d e e s t a p a rt e d e l t u t o ria l. De m o m e n t o , a q u í e s t á e l


có d ig o d e l s crip t d e PHP.

e s c rib ir2 . p h p

<?

#Abrimos el fichero en modo de escritura


$DescriptorFichero = fopen("fichero_prueba.txt","w");

#Escribimos la primera línea dentro de él


$string1 = "Esta es la primera línea de texto\r\n";
fputs($DescriptorFichero,$string1);

#Escribimos la segunda línea de texto


$string2 = "Y esta es la segunda línea de texto\r\n";
fputs($DescriptorFichero,$string2);

#Cerramos el fichero
fclose($DescriptorFichero);

http://www.programacion.com/articulo.joa_phpficheros.html (2 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

#Volvemos a abrir el fichero, esta vez en modo de añadir


$Descriptor2 = fopen("fichero_prueba.txt","a");

#Añadimos la tercera línea de texto


fputs($Descriptor2,"Esta es la tercera línea, añadida con modo \"a\"\r\n");

#Añadimos la cuarta línea de texto


fputs($Descriptor2,"Esta es la cuarta línea, añadida con modo \"a\"\r\n");

#Cerramos el fichero
fclose($Descriptor2);

?>

Co m o p o d é is co m p ro b a r s i a b rís e l fich e ro re cié n cre a d o , é s t e co n t ie n e cu a t ro lín e a s , d o s d e e lla s e s crit a s


co n m o d o "w" y o t ra s d o s co n m o d o "a ". S i ya t e n é is m á s o m e n o s cla ro co m o fu n cio n a , va m o s a p a s a r a ve r
d o s fu n cio n e s m u y ú t ile s p a ra le e r fich e ro s d e t e xt o : fgets() y feof(). A t ra vé s d e fgets() p o d e m o s le e r
u n a lín e a d e l fich e ro d e t e xt o ca d a ve z. feof() s irva p a ra s a b e r s i h e m o s lle g a d o a l fin a l d e l fich e ro . Pa ra ve r
co m o fu n cio n a n , cre a re m o s u n s crip t q u e le e rá e l fich e ro q u e h e m o s cre a d o co n lo s d o s s crip t s a n t e rio re s .

le e r. p h p

<?

#Abrimos el fichero en modo lectura


$DescriptorFichero = fopen("fichero_prueba.txt","r");

#Hasta que no lleguemos al final del fichero


while(!feof($DescriptorFichero)){

#Capturamos 4096 caracteres dentro de la línea,


#o menos si hay un retorno de carro antes
#(\r\n en Win32, \r en UNIX)
$buffer = fgets($DescriptorFichero,4096);

#Soltamos el texto, añadiendo <BR> detrás


echo $buffer."<BR>";
}

?>

Co m o vé is , e s t e s crip t le e e l fich e ro d e t e xt o lín e a a lín e a y lo va m o s t ra n d o e n e l n a ve g a d o r. La fu n ció n


feof() d e vu e lve TRUE cu a n d o h a lle g a d o a l fin a l d e l fich e ro . fgets(), va , p u e s , le ye n d o lin e a a lin e a y
a lm a ce n á n d o lo e n u n a va rib le lla m a d a $buffer.

Ah o ra va m o s a ve r co m o fu n cio n a n lo s m o d o s w+ , r+ y a + . Ve ré is q u e s o n d ife re n t e s d e lo s a n t e rio re s e n e l


s e n t id o d e q u e p e rm it e n d o s o p e ra cio n e s , y t a m b ie n e n e l s e n t id o d e co m o t ra t a n lo s fich e ro s . Em p e za re m o s
co n w+ . El s ig u ie n t e s crip t e xp lica q u é e s lo q u e h a ce e s t e m o d o co n lo s fich e ro s .

le e r_ w p lu s . p h p

<?

#Abrimos el fichero en modo w+


$Descriptor1 = fopen("nuevo_fichero.txt","w+");

http://www.programacion.com/articulo.joa_phpficheros.html (3 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

#Vamos a escribir un par de líneas en el fichero


fputs($Descriptor1,"Esta es la primera línea de texto\r\n");
fputs($Descriptor1,"Esta es la segunda línea de texto\r\n");

#Ahora cerraremos el fichero


fclose($Descriptor1);

#Volvemos a abrirlo en modo w+


$Descriptor2 = fopen("nuevo_fichero.txt","w+");

#Escribimos un par de líneas


fputs($Descriptor2,"Esta es la tercera línea de texto\r\n");
fputs($Descriptor2,"Esta es la cuarta línea de texto\r\n");

#Volvemos al principio del fichero


rewind($Descriptor2);

#Vamos leyendo líneas y mostrándolas


while(!feof($Descriptor2)){

$buffer = fgets($Descriptor2,4096);
echo $buffer."<BR>";

#Cerramos el fichero
fclose($Descriptor2);

?>

Co m o vé is , a l e je cu t a rlo , e l re s u lt a d o e s e l s ig u ie n t e :

Esta es la tercera línea de texto


Esta es la cuarta línea de texto

¿ Po r q u é n o a p a re ce n la p rim e ra y la s e g u n d a lín e a e s crit a s ? Ob s e rve m o s lo q u e h e m o s h e ch o . Prim e ro


a b rim o s e l fich e ro y e s crib im o s d e n t ro d e é l d o s lín e a s d e t e xt o . Tra s e s t o , lo ce rra m o s y lo vo lve m o s a a b rir,
e n m o d o w+ . Es t e m o d o BORRA EL CON TEN I D O AN TERI OR d e l fich e ro , p o r lo q u e e n e s t e s o lo a p a re ce n
la s d o s ú lt im a s lín e a s . Co m o vé is , s e p u e d e u t iliza r e s t e m o d o p a ra le e r d e s d e e l fich e ro co n fgets().

Ah o ra va m o s a ve r u n e je m p lo co n r+ . Va m o s a cre a r u n s crip t q u e h a g a lo m is m o q u e e l a n t e riro , p e ro e n


ve z d e a b rir lo s fich e ro s co n w+ , lo s a b rirá co n r+ .

le e r_ rp lu s . p h p

<?

#Abrimos el fichero en modo w+


$Descriptor1 = fopen("nuevo_fichero.txt","w");

#Vamos a escribir un par de líneas en el fichero


fputs($Descriptor1,"Esta es la primera línea de texto\r\n");
fputs($Descriptor1,"Esta es la segunda línea de texto\r\n");

#Ahora cerraremos el fichero


fclose($Descriptor1);

http://www.programacion.com/articulo.joa_phpficheros.html (4 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

#Volvemos a abrirlo en modo w+


$Descriptor2 = fopen("nuevo_fichero.txt","r+");

#Escribimos un par de líneas


fputs($Descriptor2,"Esta es la tercera línea de texto\r\n");
fputs($Descriptor2,"Esta es la cuarta línea de texto\r\n");

#Volvemos al principio del fichero


rewind($Descriptor2);

#Vamos leyendo líneas y mostrándolas


while(!feof($Descriptor2)){

$buffer = fgets($Descriptor2,4096);
echo $buffer."<BR>";

#Cerramos el fichero
fclose($Descriptor2);

?>

S i e je cu t á is e l s crip t , q u izá s o b s e rvé is , s o rp re n d id o s , q u e e l re s u lt a d o e s e l m is m o q u e e n e l a n t e rio r. Pe ro lo


q u e h a s u ce d id o , e n ca m b io , n o e s lo m is m o . Va m o s a a n liza rlo p o r p a rt e s . Prim e ro , h e m o s a b ie rt o e l fich e ro
e n m o d o w ( e s crit u ra ) , p a ra m e t e r d o s lín e a s e n e l fich e ro . Tra s e s t o , lo ce rra m o s , y lo a b rim o s e n m o d o r+
( le ct u ra / e s crit u ra ) . Al a b rirlo d e e s t e m o d o , e l cu rs o r s e s it ú a a l p rin cip io d e l fich e ro , p o r lo q u e a l e s crib ir la s
s ig u ie n t e s d o s lín e a s , b o rra e l co n t e n id o d e la s d o s lín e a s a n t e riro e s . . An t e s d e m o s t ra r e l co n t e n id o d e l
fich e ro u s a m o s la fu n ció n rewind(), q u e re b o b in a e l cu rs o r h a s t a e l p rin cip io d e l fich e ro . Pa ra a ñ a d ir a l fin a l
d e fich e ro , n e ce s it a m o s e l m o d o a + , co m o ve re m o s e n e l s ig u ie n t e e je m p lo .

le e r_ a p lu s . p h p

<?
#Abrimos el fichero en modo w+
$Descriptor1 = fopen("nuevo_fichero.txt","w+");

#Vamos a escribir un par de líneas en el fichero


fputs($Descriptor1,"Esta es la primera línea de texto\r\n");
fputs($Descriptor1,"Esta es la segunda línea de texto\r\n");

#Ahora cerraremos el fichero


fclose($Descriptor1);

#Volvemos a abrirlo en modo w+


$Descriptor2 = fopen("nuevo_fichero.txt","a+");

#Escribimos un par de líneas


fputs($Descriptor2,"Esta es la tercera línea de texto\r\n");
fputs($Descriptor2,"Esta es la cuarta línea de texto\r\n");

#Volvemos al principio del fichero


rewind($Descriptor2);

#Vamos leyendo líneas y mostrándolas


while(!feof($Descriptor2)){

$buffer = fgets($Descriptor2,4096);

http://www.programacion.com/articulo.joa_phpficheros.html (5 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

echo $buffer."<BR>";

#Cerramos el fichero
fclose($Descriptor2);

?>

El re s u lt a d o d e e s t e m é t o d o e s e l e s p e ra d o . S e a b re e l fich e ro e n m o d o e s crit u ra y s e in s e rt a n la s d o s lín e a s


d e t e xt o . S e cie rra e s t e d e s crip t o r, y s e a b re o t ro e n m o d o a + . El cu rs o r s e s it ú a a l fin a l d e l fich e ro , y
co m ie n za a a ñ a d ir e l t e xt o . El re s u lt a d o s o n la s cu a t ro lín e a s d e n t ro d e l fich e ro d e t e xt o .

Es t o e s t o d o e n cu a n t o a m o d o s d e a p e rt u ra . En la s ig u ie n t e s e cció n va m o s a ve r co m o s u b ir fich e ro s a l
s e rvid o r, a lg o m u y ú t il cu a n d o s e t ra t a d e p á g in a s we b .

S u b ir fic h e ro s a l s e rv id o r
Pa ra e je m p lifica r la s u b id a d e a rch ivo s a l s e rvid o r, va m o s a ve r u n s crip t d e e je m p lo . El s crip t t ie n e d o s
p a rt e s ; la p rim e ra , e l fo rm u la rio , e n e l q u e s e in t ro d u ce e l fich e ro a ca rg a r, y la s e g u n d a p a rt e , e n la q u e s e
p ro ce s a la s u b id a y s e in fo rm a a l u s u a rio d e l é xit o o fra ca s o d e la ca rg a .

u p lo a d . p h p

<?

if(!isset($cargar)){

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>:: Formulario de carga de ficheros ::</TITLE>
</HEAD>

<BODY>

<FORM NAME="elForm" METHOD="POST"


ACTION="<? echo $PHP_SELF; ?>?cargar=1"
ENCTYPE="multipart/form-data">

<TABLE WIDTH="80%" STYLE="font-family:Arial;font-size:9pt;">

<TR>
<TD ALIGN="LEFT"><INPUT TYPE="FILE" NAME="elFichero"></INPUT></TD>
</TR>

<TR>
<TD ALIGN="LEFT"><INPUT TYPE="SUBMIT" VALUE="Subir el fichero">
</TR>

</TABLE>

</FORM></BODY></HTML>

<?

http://www.programacion.com/articulo.joa_phpficheros.html (6 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

#Aquí realizamos la carga del fichero


if(isset($cargar)){

#Le damos al fichero un nuevo nombre


$nuevositio = "nuevo_fichero_caragado.000";

#Lo copiamos
if(!copy($elFichero,$nuevositio)){
echo "NO SE HA PODIDO SUBIR EL FICHERO";
}
else{
echo "FICHERO SUBIDO CON ÉXITO";
}

?>

Co m o ve m o s , e l s crip t re a liza la ca rg a d e l fich e ro . Pa ra riza r u n p o co m á s e l rizo o s p ro p o n g o lo s ig u ie n t e :


u n s crip t q u e s u b a u n n ú m e ro d e fich e ro s in t ro d u cid o p o r e l u s u a rio . S e co m p o n d rá d e t re s p a rt e s . La
p rim e ra , e n la q u e s e p re g u n t a a l u s u a rio e l n ú m e ro d e fich e ro s q u e d e s e a in t ro d u cir. La s e g u n d a , e n la q u e
a p a re ce n t o d o s lo s ca m p o s d e t ip o fich e ro , y la t e rce ra , e n la q u e s e p ro ce s a la ca rg a . El có d ig o e s co m o
s ig u e :

u p lo a d _ m u lt ip le . p h p

<?

/* Este script se encarga de subir múltiples ficheros al servidor. */

#Formulario en el que se pregunta el número de ficheros


if(!isset($fich) && !isset($cargar)){

$txt ="<HTML><HEAD>\n";
$txt.="<TITLE>:: ¿Cuántos ficheros quiere subir hoy? ::</TITLE>\n";
$txt.="</HEAD><BODY>\n";
$txt.="<FORM NAME=\"frmNumFicheros\"
METHOD=\"POST\"
ACTION=\"".$PHP_SELF."?fich=1\">\n";

$txt.="<BR><BR><BR><BR>\n";
$txt.="<DIV ALIGN=\"CENTER\">\n";
$txt.="<INPUT TYPE=\"TEXT\" NAME=\"numFicheros\">\n";
$txt.="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
$txt.="<B>Introduce el número de ficheros</B>\n";
$txt.="<BR><BR>\n";
$txt.="<INPUT TYPE=\"SUBMIT\"
VALUE=\"Mostrar campos para subir ficheros\">\n";
$txt.="<BR></DIV>\n";

$txt.="</FORM></BODY></HTML>\n";

echo $txt;
}

http://www.programacion.com/articulo.joa_phpficheros.html (7 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

#Formulario en el que se muestran los campos tipo fichero


if(isset($fich)){

$txt ="<HTML><HEAD>\n";
$txt.="<TITLE>:: ¿Cuántos ficheros quiere subir hoy? ::</TITLE>\n";
$txt.="</HEAD><BODY>\n";
$txt.="<FORM ENCTYPE=\"multipart-form/data\"
NAME=\"frmCargaFicheros\"
METHOD=\"POST\"
ACTION=\"".$PHP_SELF."?cargar=1&cantidad=".$HTTP_POST_VARS["numFicheros"]."\">\n";

for($i=0;$i<$HTTP_POST_VARS["numFicheros"];$i++){

$txt.="<INPUT TYPE=\"FILE\" NAME=\"fichero_$i\"><BR>\n";

$txt.="<INPUT TYPE=\"SUBMIT\" VALUE=\"cargar\">\n";

$txt.="</FORM></BODY></HTML>\n";

echo $txt;
}

#Parte que gestiona el proceso de carga


if(isset($cargar)){

for($n=0;$n<$cantidad;$n++){

#Creamos la "variable variable"


$nomvar = "fichero_$n";
$valvar = $;

#Extraemos el nombre del fichero sin la ruta


$nomfichero = basename($valvar);

#Le damos al fichero su nombre, metiéndolo dentro del directorio /subidas


$nuevositio = "subidas/".$nomfichero."";

#Lo copiamos
if(!copy($valvar,$nuevositio)){
echo "NO SE HA PODIDO SUBIR EL FICHERO";
}
else{
echo "FICHERO SUBIDO CON ÉXITO";
}
}

?>

De e s t e m o d o p o d e m o s ca rg a r va rio s fich e ro s a l m is m o t ie m p o . Te n d rá s q u e cre a r e l d ire ct o rio / s u b id a s


m a n u a lm e n t e . Va m o s a t e rm n a r co n e s t a s e cció n y p a s a r a la s ig u ie n t e , e n la q u e s e e xp lica co m o fo rza r a l
clie n t e a d e s ca rg a rs e e l fich e ro e n ve z d e ve rlo o n - lin e .

http://www.programacion.com/articulo.joa_phpficheros.html (8 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

Fo rz a r d e s c a rg a d e fic h e ro s a l n a v e g a d o r
A ve ce s p u e d e s e r in t e re s a n t e q u e e l u s u a rio s e d e s ca rg u e e l fich e ro e n ve z d e ve rlo o n - lin e . Pa ra re a liza r
e s t a o p e ra ció n , s o lo n e ce s it a m o s u t iliza r e l s ig u ie n t e có d ig o q u e vo y a e xp lica r a co n t in u a ció n . El s crip t
co n s t a d e u n a s o la p a rt e . Va m o s a d e s ca rg a rn o s u n fich e ro . h t m l, e n ve z d e ve rlo e n e l n a ve g a d o r. El
n o m b re d e l fich e ro s e rá p ru e b a _ d e s ca rg a . h t m l. El có d ig o e s co m o s ig u e :

d e s c a rg a r. p h p

<?

function Descargar($ElFichero){

$TheFile = basename($ElFichero);

header( "Content-Type: application/octet-stream");


header( "Content-Length: ".filesize($ElFichero));
header( "Content-Disposition: attachment; filename=".$TheFile."");
readfile($ElFichero);
}

Descargar("prueba_descarga.html");

?>

Co m o ve s , e l s crip t s e e je cu t a y e l fich e ro , p e s e a s e r HTML, e in t e rp re t a b le p o r e l n a ve g a d o r, e s fo rza d o a


s e r d e s ca rg a d o , ig u a l q u e s i h u b ié ra m o s p u ls a d o e l b o t ó n d e re ch o .

Y co n e s t o t e rm in o e s t e t u t o ria l. Es p e ro q u e o s s e a ú t il, a u n q u e s e q u e e s co rt o . Es p o s ib le q u e e n o t ro
t u t o ria l p ró xim o m e e xt ie n d a m á s s o b re e s t e t e m a ( s o b re t o d o s i m is co n o cim e in t o s a u m e n t a n , je je ) .

De s ca rg a t e lo s fich e ro s d e l a rt ícu lo

Le e r co m e n t a rio s ( 4 ) | Es crib ir co m e n t a rio | Pu n t u a ció n : ( 1 2 vo t o s ) Vo t a

Últ im o s c o m e n t a rio s [ S u b ir]

Mu c h a s g ra c ia s . ( 2 5 / 0 9 / 2 0 0 2 )
Po r S a lva d o r

Te a g ra d e zco la cla rid a d e n lo s e je m p lo s

u n a m e jo ra ? ( 1 6 / 0 9 / 2 0 0 2 )
Po r m ikil

b a s a d o e n e s t e e je m p lo s e m e p la n t e a n d o s cu e s t io n e s :
1 . - co m o p u e d o p re a s ig n a r e l va lo r a la va ria b le q u e re co g e e l n o m b re d e l fich e ro ? He p ro b a d o co n va lu e y
m e p re s e n t a e l ca m p o e n b la n co
2 . - p u e d o s u b ir u n fich e ro s in q u e e l u s u a rio s e p a d o n d e e s t a ? o s e a , yo s e q u e fich e ro e s y d o n d e e s t a ,
p u e s lo s u b o a l s e rvid o r y lo d e jo e n s u s it io . Es e s t o p o s ib le

Ex c e le n t e . . !! ( 1 3 / 0 9 / 2 0 0 2 )
Po r Da n ie l Ra m o s

http://www.programacion.com/articulo.joa_phpficheros.html (9 de 10) [20/10/2002 18:17:39]


Programación en castellano. Trabajando con PHP y ficheros

Pu e s la ve rd a d n o t e n g o co n o cim ie n t o s e n PHP, p e ro s i e n HTML ja va s crip t y C+ + , Po r lo q u e a p re n d e r


PHP s e m e h a s a u n m a s in t e re s a n t e a p re n d e rlo . . . Po r e l m o m e n t o e s t o y b ie n d o e l a m b ie n t e d e p h p ya q u e
De s co n o s co h a s t a e l co m p ila d o r. .

S ALUDOS . . !!

Gra c ia s ( 1 1 / 0 9 / 2 0 0 2 )
Po r m a n u e l

Gra cia s p o r e l a rt ícu lo m e h a re s u lt a d o m u y u t il.


Re co m e n d a r e s t e t u t o ria l | Es t a d ís t ica s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulo.joa_phpficheros.html (10 de 10) [20/10/2002 18:17:39]


Programación en castellano. Registro

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Re g is t ra rs e e n P ro g ra m a c ió n e n c a s t e lla n o
S i q u ie re s p a rt icip a r e n fo ro s , re cib ir la s ú lt im a s n o ve d a d e s d e p ro g ra m a ció n e n ca s t e lla n o
m e d ia n t e co rre o e le ct ró n ico o a cce d e r a la d o cu m e n t a ció n e n fo rm a t o PDF o ZIP, d e b e ra s
re g is t ra rt e . Pa ra e llo , re lle n a e l s ig u ie n t e fo rm u la rio t e n ie n d o e n cu e n t a q u e lo s ca m p o s s e ñ a la d o
p o r ( * ) s o n o b lig a t o rio s .

No m b re : (*)

Ap e llid o s : (*)

E- m a il: (*)
Pa ís : AFGANISTAN (*)

Us u a rio : (*)

Co n t ra s e ñ a : (*)

Re p e t ir co n t ra s e ñ a : (*)

Do m icilio :

Nú m e ro : Pis o / p la n t a / e s ca le ra / p u e rt a

Có d ig o p o s t a l:

Po b la ció n :

Pro vin cia : ( * ) Us u a rio s d e Es p a ñ a


Pro vin cia :

S e xo : Ho m b re Mu je r

Enviar

Co n Co rre o Dire ct t e a p u n t a s a re cib ir la s o fe rt a s y p ro m o cio n e s q u e t u


e s co g e s y p a rt icip a s e n e l s o rt e o d e u n via je a l p a ra d o r q u e d e s e e s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/registro.php [20/10/2002 18:17:41]


Programación en castellano. Formulario de contacto

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo rm u la rio d e c o n t a c t o
S i d e s e a p o n e rs e e n co n t a ct o co n Pro g ra m a ció n e n ca s t e lla n o S . L. , p o r fa vo r re lle n e e l s ig u ie n t e
fo rm u la rio . Re cu e rd e q u e p a ra re a liza r co n s u lt a s e xis t e n u n o s fo ro s d e d is cu s ió n d o n d e le s
re s p o n d e rá n m u ch o m e jo r y m á s rá p id o d e lo q u e n u n ca p o d ría m o s lo g ra r n o s o t ro s s o lo s :

S u d ire cció n d e co rre o e le ct ró n ico :

Mo t ivo d e s u co n s u lt a :
-- Elegir opción --

S u m e n s a je :

Enviar Borrar

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/contacto.php [20/10/2002 18:17:43]


Programación en castellano. Datos legales

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

D a t o s le g a le s
Pro g ra m a cio n e n Ca s t e lla n o , S . L.
B1 3 3 4 4 5 4 4
Cl. Me s o n e s , 9
1 3 6 4 0 He re n cia
Ciu d a d Re a l
Es p a ñ a

Te lé fo n o 9 0 2 3 3 3 9 3 2 ( n o s e d a n in g u n t ip o d e s o p o rt e p o r t e le fo n o )
Fa x. 9 2 6 5 7 4 0 3 7

Em a il: we b m a s t e r@p ro g ra m a cio n . co m

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/datosleg.php [20/10/2002 18:17:44]


Programación en castellano. Búsqueda

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Bú s q u e d a
En nuestro sitio Buscar

S e p u e d e n b u s ca r fra s e s co m p le t a s e n ce rra n d o la s e n t re co m illa s d o b le s ( ") y u s a r lo s o p e ra d o re s


ló g ico s AND, OR y NOT. Po r d e fe ct o , b u s ca r m á s d e u n a p a la b ra d e lim it a d a s p o r e s p a cio s e q u iva le
a u t iliza r e l o p e ra d o r AND.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/buscar.php [20/10/2002 18:17:45]


Programación en castellano. Cursos. Bases de datos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

Ba s e s d e
da to s
5 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Ora cle ( 1 )
● S QL ( 1 )
● Te o ría d e b a s e s d e d a t o s @ ( 1 )

Op e ra c io n e s a v a n z a d a s c o n JD BC y Ja v a
Le e r co m e n t a rio s ( 5 ) | Pu n t u a ció n : ( 3 vo t o s )
Op e ra cio n e s Ava n za d a s co n Ba s e s d e Da t o s Us a n d o JDBC P o r I BM.

Ma n e ja r Co n e x io n e s a Ba s e s d e D a t o s c o n JD BC 3 . 0
Le e r co m e n t a rio s ( 2 2 ) | Pu n t u a ció n : ( 3 7 vo t o s )
Op e ra cio n e s Ava n za d a s co n Ba s e s d e Da t o s Us a n d o JDBC P o r I BM.

Ac c e s o a Ba s e s d e D a t o s [ JD BC]
Le e r co m e n t a rio s ( 1 4 9 ) | Pu n t u a ció n : ( 1 2 6 vo t o s )
Es t e t u t o ria l p re s e n t a lo s t ó p ico s n e ce s a rio s p a ra la p ro g ra m a ció n d e Acce s o a Ba s e s d e Da t o s e n
Ja va co n JDBC P o r S u n .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.bases-de-datos.html [20/10/2002 18:17:51]


Programación en castellano. Cursos. Entornos de desarrollo

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

En t o rn o s d e
d e s a rro llo
1 cu rs o
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Vis u a l Ba s ic ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.entornos.html [20/10/2002 18:17:52]


Programación en castellano. Cursos. Herramientas

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . He rra m ie n t a s Nuestras zonas


2 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● De s a rro llo we b ( 2 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.herramientas.html [20/10/2002 18:17:53]


Programación en castellano. Cursos. Internet

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

I n t e rn e t
2 6 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● AS P ( 4 )
● Fla s h ( 2 )
● HTML ( 2 )
● PHP ( 3 )
● S VG y VML ( 1 )
● WAP ( 1 )
● XML ( 1 1 )
● XS L, XS LT y Xp a t h ( 2 )
● Ja va @ ( 6 4 )
● Ja va s crip t @ ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.internet.html [20/10/2002 18:17:55]


http://www.programacion.com/tutoriales.script.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

Le n g u a je s
d e s c rip t
4 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Ja va s crip t ( 1 )
● Pe rl ( 1 )
● Pyt h o n ( 2 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.script.html [20/10/2002 18:17:56]


Programación en castellano. Cursos. Lenguajes orientados a objeto

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

Le n g u a je s
o rie n t a d o s
a o b je t o
6 5 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● C# ( 1 )
● Ja va ( 6 4 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.poo.html [20/10/2002 18:17:57]


Programación en castellano. Cursos. Otros lenguajes

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

Ot ro s
le n g u a je s
3 cu rs o s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Pro lo g ( 3 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.otros.html [20/10/2002 18:17:58]


Programación en castellano. Cursos. Sistemas operativos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

S is t e m a s
o p e ra t iv o s
1 cu rs o
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Lin u x ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.ssoo.html [20/10/2002 18:17:59]


Programación en castellano. Cursos. Teoría

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Cu rs o s . Nuestras zonas

Te o ría
1 cu rs o
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Te o ría d e b a s e s d e d a t o s ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutoriales.teoria.html [20/10/2002 18:18:00]


Programación en castellano. Artículos. Bases de datos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . Nuestras zonas

Ba s e s d e
da to s
2 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● MyS QL ( 1 )

AP I s XML p a ra Ba s e s d e D a t o s
Le e r co m e n t a rio s ( 4 ) | Pu n t u a ció n : ( 1 7 vo t o s )
Us o d e la s APIs XML S AX y DOM p a ra a cce d e r a b a s e s d e d a t o s . P o r S u n .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.bases-de-datos.html [20/10/2002 18:18:01]


Programación en castellano. Artículos. Entornos de desarrollo

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . Nuestras zonas

En t o rn o s d e
d e s a rro llo
2 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Vis u a l Ba s ic ( 1 )
● Vis u a l C+ + ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.entornos.html [20/10/2002 18:18:03]


Programación en castellano. Artículos. Herramientas

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . He rra m ie n t a s Nuestras zonas


2 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● De s a rro llo we b ( 1 )
● Ed it o re s ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.herramientas.html [20/10/2002 18:18:04]


Programación en castellano. Artículos. Internet

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . Nuestras zonas

I n t e rn e t
5 0 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● AS P ( 1 7 )
● CS S ( 2 )
● Ge n e ra le s ( 1 )
● HTML ( 5 )
● PHP ( 1 0 )
● S VG y VML ( 2 )
● WAP ( 1 )
● XML ( 7 )
● XS L, XS LT y Xp a t h ( 5 )
● Ja va @ ( 2 7 )
● Ja va s crip t @ ( 2 2 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.internet.html [20/10/2002 18:18:05]


http://www.programacion.com/articulos.script.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . Nuestras zonas

Le n g u a je s
d e s c rip t
2 3 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Ja va s crip t ( 2 2 )
● Pyt h o n ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.script.html [20/10/2002 18:18:06]


Programación en castellano. Artículos. Lenguajes imperativos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . Nuestras zonas

Le n g u a je s
im p e ra t iv o s
1 a rt ícu lo
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● En s a m b la d o r ( 1 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.imperativos.html [20/10/2002 18:18:08]


Programación en castellano. Artículos. Lenguajes orientados a objeto

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Art íc u lo s . Nuestras zonas

Le n g u a je s
o rie n t a d o s
a o b je t o
2 7 a rt ícu lo s
La s m e jo re s p lu m a s ( b u e n o . . . t e cla d o s ) e s crib e n p a ra Pro g ra m a ció n e n ca s t e lla n o s o b re t e m a s d e
in t e ré s p a ra e l p ro g ra m a d o r.

● Ja va ( 2 7 )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/articulos.poo.html [20/10/2002 18:18:10]


Programación en castellano. Foros de debate. C / C++

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
C / C+ + Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

As u n t o Us u a rio Fe c h a Re s p u e s t a s Últ im a re s p u e s t a
1 9 d e o ct u b re d e
n e ce s it o co d ig o fu e n t e yo _ 0 -
2002

Ma n e jo d e s o cke t s b a jo 1 8 d e o ct u b re d e
JOS E 0 -
c+ + 6 2002

Po r fa vo r n e ce s it o u n a
Cé s a r 2 8 d e m a yo d e 2 0 0 2 3 1 8 d e o ct u b re d e 2 0 0 2
a yu d a

Ayu d a ! Co m o co n fig u ro 1 8 d e o ct u b re d e
Ju a n Jo 0 -
Tu rb o 3 . 1 fo r win d o ws 2002

1 8 d e o ct u b re d e
e d it o r c/ c+ + h ilo s lin u x ja q y 0 -
2002

1 7 d e o ct u b re d e
m is p ro p ia s lib re ria s n a b u cco 0 -
2002

1 1 d e o ct u b re d e
S o n id o e n C ro m e ro a n d re s 1 1 6 d e o ct u b re d e 2 0 0 2
2002

Pa s e n m e p ro g ra m a s e n c y 1 6 d e o ct u b re d e
Ju a n 0 -
c+ + 2002

Co m o cre a r u n a lib re ria e n 1 6 d e o ct u b re d e


a rka n 0 -
"c" 2002

1 5 d e o ct u b re d e
a rb o le s b + Alg u ie n 0 -
2002

p ro b le m a co n e s t e 1 3 d e o ct u b re d e
ra fa 2 1 4 d e o ct u b re d e 2 0 0 2
p ro g ra m a 2002

Alg u ie n s a b e cu a l e s e l
1 7 d e s e p t ie m b re d e
a lg o rit m o d e la fu n cio n q u e Pe p e 2 1 3 d e o ct u b re d e 2 0 0 2
2002
g e n e ra n u m e ro s a le a t o rio s

1 1 d e o ct u b re d e
Lib re ría s ys t e m . h Jo s e Lu is 2 1 3 d e o ct u b re d e 2 0 0 2
2002

Ma n e jo d e l p u e rt o s e rie e n 1 4 d e m a rzo d e
fa fis 3 1 1 d e o ct u b re d e 2 0 0 2
C. 2002

http://www.programacion.com/hilos.29.html (1 de 2) [20/10/2002 18:18:13]


Programación en castellano. Foros de debate. C / C++

m a n u a l d e d e v- c+ + 4 e n 1 1 d e o ct u b re d e
jo s e p e 8 2 1 9 0 -
e s p a ñ o l? ? ? 2002

Vis u a l C e je cu t a n d o Vis u a l 1 1 d e o ct u b re d e
Jo rd i 0 -
Ba s ic 2002

1 0 d e o ct u b re d e
rs 2 3 2 y c m a n o lo 0 -
2002

Erro r d e lin ka d o a l u t iliza r 8 d e o ct u b re d e


Da vid 1 1 0 d e o ct u b re d e 2 0 0 2
la lib re ria win d o ws . h 2002

3 0 d e s e p t ie m b re d e
Lib ro d e C+ + . : Ga b y: . 3 1 0 d e o ct u b re d e 2 0 0 2
2002

m o d ifica r e l p ro ce s o d e
2 d e o ct u b re d e
lo g in / p a s s wo rd d e win d o ws n u e vo 1 1 0 d e o ct u b re d e 2 0 0 2
2002
2000

« 1 2 3 4 5 6 7 8 9 10 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.29.html (2 de 2) [20/10/2002 18:18:13]


Programación en castellano. Foros de debate. Delphi / Kylix / C++ Builder

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
D e lp h i / Ky lix / C+ + Bu ild e r Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a

Bu s co p ro g ra m a d o re s p a ra p ro ye ct o 3 1 d e m a rzo 1 9 d e o ct u b re
Ma u ricio 3
S IN FINES DE LUCRO. . . de 2002 de 2002

cre a ció n d e d b f d e s d e d e lp h i p a ra s e r 24 de
1 9 d e o ct u b re
im p o rt a d o s d e s d e o t ro s p ro g ra m a s t rin it i s e p t ie m b re d e 1 de 2002
co m o Win Fa x 2002

S a yra
Ne ce s it o a yu d a p a ra h a ce r 6 d e o ct u b re 1 9 d e o ct u b re
Ve ro n ica 1
a lg o rit m o , e s t ru ct u ra , p ro g ra m a de 2002 de 2002
Pu lid o M.

1 9 d e o ct u b re
Ayu d a p o r fa vo r liu xu s 0 -
de 2002

1 9 d e o ct u b re
!!!!!!!!!!!! u rg e n t e ¡¡¡¡¡¡¡¡¡¡ liu xu s 0 -
de 2002

1 9 d e o ct u b re
co n s u lt a ADOQu e ry liu xu s 0 -
de 2002

1 4 d e o ct u b re
h a n d le s d e ve n t a n a s !! e lia 0 -
de 2002

1 2 d e fe b re ro 1 2 d e o ct u b re
re d , b a s e d e d a t o s e n d e lp h i wa lt e r 2
de 2002 de 2002

30 de
9 d e o ct u b re d e
An s iS t rin g a u n a Fu n ció n Gre e n Go s e p t ie m b re d e 1 2002
2002

Co m o p u e d o co p ia r t o d a la p a n t a lla a l 9 d e o ct u b re
Wo lve rick 0 -
p o rt a p a p e le s ? de 2002

9 d e o ct u b re
El m e jo r RAD Lu ca s 0 -
de 2002

9 d e o ct u b re
Da t o s p o r p a ra le lo . En De lp h i Do u g la s J. 0 -
de 2002

8 d e o ct u b re
De n m e s u o p in io n Lu ca s 0 -
de 2002

7 d e o ct u b re
e rro re s e n b a s e s d d a t o s Ja 0 -
de 2002

http://www.programacion.com/hilos.28.html (1 de 2) [20/10/2002 18:18:16]


Programación en castellano. Foros de debate. Delphi / Kylix / C++ Builder

4 d e o ct u b re
Dis t rib u ir BCB 1 Flip 0 -
de 2002

1 d e o ct u b re 4 d e o ct u b re d e
in t e g ra le s ro g e rt 2
de 2002 2002

Op e ra r co n va ria b le s in t y d o u b le e n 29 de
6 d e fe b re ro
Da vid Urp í 2 s e p t ie m b re d e
C+ + Bu ild e r de 2002
2002

26 de
a s is t rin g Ed u a d a n s e p t ie m b re d e 0 -
2002

OLIVARES 24 de
AS OCIACION OLIVARES 2 0 0 0 s e p t ie m b re d e 0 -
2000 2002

20 de
9 d e e n e ro d e
C+ + Bu ild e r p a ra Lin u x Es t e b a n 1 s e p t ie m b re d e
2002
2002

« 1 2 3 4 5 6 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.28.html (2 de 2) [20/10/2002 18:18:16]


Programación en castellano. Foros de debate. General

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Ge n e ra l Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a
1 7 d e o ct u b re d e
Re g is t ra r LOG e n BD An d re a 0 -
2002

a ve r q o s p a re ce e s t a we b , 1 7 d e o ct u b re d e
za p a m ix 0 -
g ra cia s 2002

1 6 d e o ct u b re d e
INFERNO y LIMBO Do n 0 -
2002

1 6 d e o ct u b re d e
Urg e n t e !!!!!!!!!!!!! PEKE 0 -
2002

¿ Dife re n cia s e n t re t o rre s ATX 1 0 d e o ct u b re d e


ÇR 0 -
y AT? 2002

1 0 d e o ct u b re d e
¿ EXE d e Vb 6 s in in s t a la cio n ? An o n im o 0 -
2002

q u é p ro g ra m a u t iliza r p a ra
9 d e o ct u b re d e
cre a r u n t u t o ria l d e m i anaa 0 -
2002
a p lica ció n

2 d e o ct u b re d e
Cre a r u n ico n o e p e re z 1 3 d e o ct u b re d e 2 0 0 2
2002

2 3 d e s e p t ie m b re
Mu n d o In t e rn e t . Aza ze l 1 1 d e o ct u b re d e 2 0 0 2
de 2002

2 8 d e s e p t ie m b re 2 8 d e s e p t ie m b re d e
Arch ivo s d e s co n o cid o s Ja zm in E. L. 1
de 2002 2002

b u s q u e d a d e p ro g ra m a p a ra 2 8 d e s e p t ie m b re
js a rrio 0 -
t a rje t a s de 2002

2 8 d e s e p t ie m b re
Te rm in a l S e rve r e m o lin a h 0 -
de 2002

AYUDA : COMANDO 2 7 d e s e p t ie m b re
R. 0 -
BUS QUEDA DES APARECIÓ. . de 2002

2 1 d e s e p t ie m b re 2 3 d e s e p t ie m b re d e
le n g u a je s d e co m p u t a d o ra m a ta dor 1
de 2002 2002

http://www.programacion.com/hilos.25.html (1 de 2) [20/10/2002 18:18:19]


Programación en castellano. Foros de debate. General

2 2 d e s e p t ie m b re
CD/ DVD- ROM Xib e r 0 -
de 2002

1 2 d e m a rzo d e 2 2 d e s e p t ie m b re d e
Ab rir a rch ivo s . d a t Pe d ro Qu ija n o 2
2002 2002

S e m e a b re n cie n t o s d e 1 9 d e s e p t ie m b re
Nie ve s 0 -
p a g in a s we b de 2002

EN CANARIAS HAY DOS 1 8 d e s e p t ie m b re


ch a ch o 0 -
PROVINCIAS !! de 2002

Alg u ie n m e p u e d e e xp lica r
12 de a gosto de 1 8 d e s e p t ie m b re d e
co m o t ra b a ja n lo s An g e l4 0 3
2002 2002
in s t a la d o re s d e p ro g ra m a s

1 8 d e s e p t ie m b re
Ayu d a co n Fla s h Sa nti 0 -
de 2002

« 1 2 3 4 5 6 7 8 9 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.25.html (2 de 2) [20/10/2002 18:18:19]


Programación en castellano. Foros de debate. Java (Servlets y JSP)

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Ja v a ( S e rv le t s y JS P ) Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

As u n t o Us u a rio Fe c h a Re s p u e s t a s Últ im a re s p u e s t a

Co m o im p rim ir t a b la s 1 9 d e o ct u b re d e
Cris 0 -
d in a m ica s co n js p 2002

Gu s t a vo Gu t ie rre z 1 8 d e o ct u b re d e
m a n e jo d e l lo g d e t o m ca t 0 -
A. 2002

1 8 d e o ct u b re d e
VB A - > Ja va S e rvle t fro m e r 0 -
2002

Pa s a r e l va lo r d e u n a
1 7 d e o ct u b re d e
va ria b le a ja va d e s d e jo lin 2 1 0 -
2002
h t m l o ja va s crip t

p ro b le m a s p a ra lla m a r 1 5 d e o ct u b re d e
m a rio 0 -
s e rvle t s y js p 2002

Cla s e s g rá fica s y 1 5 d e o ct u b re d e
g e ra ru n h a 0 -
s e rvid o re s X 2002

Pro b le m a s co n 8 d e o ct u b re d e
rb ld 2 1 5 d e o ct u b re d e 2 0 0 2
p a rá m e t ro s 2002

Ce rra r y a b rir e l s e rvid o r 1 4 d e o ct u b re d e


Q 1 1 5 d e o ct u b re d e 2 0 0 2
To m ca t co n t in u a m e n t e 2002

Pro b le m a s a l co m p ila r u n 1 0 d e o ct u b re d e
la b 1 1 5 d e o ct u b re d e 2 0 0 2
s e rvle t 2002

1 1 d e d icie m b re
JS P s t ib ca s a 1 1 5 d e o ct u b re d e 2 0 0 2
de 2001

Ce rra r u n a p a g HTML
9 d e o ct u b re d e
cre a d a co n u n s e rvle t s in Ge m a Nu ñ e z 4 1 4 d e o ct u b re d e 2 0 0 2
2002
q u e p id a co n firm a cio n

1 2 d e o ct u b re d e
JS P y Ora cle 8 i/ 9 i Ro o t 0 -
2002

Alg u ie n m e p u e d e a yu d a r 1 1 d e o ct u b re d e
s ilvit a 1 1 1 d e o ct u b re d e 2 0 0 2
co n JS P 2002

http://www.programacion.com/hilos.27.html (1 de 2) [20/10/2002 18:18:23]


Programación en castellano. Foros de debate. Java (Servlets y JSP)

Co m o p u e d e e je cu t a r 9 d e o ct u b re d e
Da vid 1 1 1 d e o ct u b re d e 2 0 0 2
s e rve lt s 2002

Pro b le m a s a l co m p ila r u n 1 0 d e o ct u b re d e
la b 1 1 1 d e o ct u b re d e 2 0 0 2
s e rvle t II 2002

1 0 d e o ct u b re d e
JS P Ro s i 1 1 1 d e o ct u b re d e 2 0 0 2
2002

1 1 d e o ct u b re d e
In s t a la ció n d e t o m ca t Da vid 1 1 1 d e o ct u b re d e 2 0 0 2
2002

9 d e e n e ro d e
Ca rg a d e fich e ro s Pa Ma Y 3 1 0 d e o ct u b re d e 2 0 0 2
2002

Qu ie re s Vis u a l Ag e fo r
9 d e o ct u b re d e
Ja va 4 ? , We b S p h e re ja s is t e m a s 0 -
2002
S t u d io ?

Alg u ie n m e p u e d e 9 d e o ct u b re d e
la b 1 9 d e o ct u b re d e 2 0 0 2
e xp lica r e s t o p o r fa vo r!!!! 2002

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.27.html (2 de 2) [20/10/2002 18:18:23]


Programación en castellano. Foros de debate. Java y XML

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Ja v a y XML Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a
8 d e o ct u b re d e 1 7 d e o ct u b re d e
e xce l a xm l Ed g a r 1
2002 2002

¿ Co m o h a g o p a ra h a ce r co rre r 1 0 d e o ct u b re
Tit o 0 -
s o a p e n Ap a ch e t o m ca t ? de 2002

XS LFO, Co m o p o d e r e s crib ir t e xt o 13 de
1 0 d e o ct u b re d e
Jo s e Ma n u e l s e p t ie m b re d e 1
e n ve rt ica l 2002
2002

9 d e o ct u b re d e
Ja va We b S t a rt a rie le lm e jo r 0 -
2002

2 d e o ct u b re d e
co m p ila r/ e je cu t a b le ra t it a llo ro n a 0 -
2002

m o d ifica r e l p ro ce s o d e 30 de
ka o s s e p t ie m b re d e 0 -
lo g in / p a s s wo rd d e win d o ws 2 0 0 0 2002

18 de
2 5 d e s e p t ie m b re
co m o b o rra r e n u n jt re e m a ria s e p t ie m b re d e 1 de 2002
2002

24 de
2 5 d e s e p t ie m b re
XML e n s e rvid o r y a p p le t jb a rre iro s e p t ie m b re d e 3 de 2002
2002

25 de
2 5 d e s e p t ie m b re
Ap p le t s y xm l p a kico s e p t ie m b re d e 1 de 2002
2002

6 d e s e p t ie m b re 2 3 d e s e p t ie m b re
lla m a d a s a l S . O d e s d e Ja va Ju a n 1
de 2002 de 2002

22 de
Ba s e d e Da t o s e n XML co n JAVA Mich a e l ET s e p t ie m b re d e 0 -
2002

¿ Co m o e n vio u n e - m a il co n la API 3 0 d e ju lio d e 1 9 d e s e p t ie m b re


e lb e rcia l2 3 2
Ja va Ma il? , p o rfa vo o o o o o o o o r 2002 de 2002

Co m o h a ce r u n co m p ila d o r p a ra 18 de
Cé s a r s e p t ie m b re d e 0 -
s e n t e n cia s s q l e n ja va ? 2002

http://www.programacion.com/hilos.26.html (1 de 2) [20/10/2002 18:18:28]


Programación en castellano. Foros de debate. Java y XML

2 0 d e e n e ro d e 1 2 d e s e p t ie m b re
Pa s a r xm l a o t ro xm l s ra rro b a 2
2002 de 2002

9 d e s e p t ie m b re
Ha ce r u n co m p ila d o r e n Ja va Ma rle n y 0 -
de 2002

9 de a gosto de 2 d e s e p t ie m b re d e
lib ro xm l & ja va d e Ore illy ta nny 1
2002 2002

20 de a gosto de 27 de a gosto de
Pa rs e o in co rre ct o XML- XS L t it o 3
2002 2002

27 de a gosto de
Pa rs e a r va lid a n d o co n e s q u e m a s ca s i4 1 6 0 -
2002

5 de a gosto de 21 de a gosto de
va ria b le s e n xm l? Txiki_ 3 1
2002 2002

1 6 d e m a yo d e 17 de a gosto de
Im p re s io n Hu g o 3
2002 2002

« 1 2 3 4 5 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.26.html (2 de 2) [20/10/2002 18:18:28]


Programación en castellano. Foros de debate. Javascript

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
Ja v a s c rip t Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

As u n t o Us u a rio Fe c h a Re s p u e s t a s Últ im a re s p u e s t a
2 6 d e s e p t ie m b re
d e cim a le s je s u s 1 1 0 d e o ct u b re d e 2 0 0 2
de 2002

9 d e o ct u b re d e
Co n ve rcio n Irm a 1 1 0 d e o ct u b re d e 2 0 0 2
2002

p a s o d e va ria b le 9 d e o ct u b re d e
je s u s 0 -
ja va s crip t 2002

Un o b s e q u io d e
Wo lve rin e p a ra m is 2 4 d e m a rzo d e
Wo lve rin e 3 8 d e o ct u b re d e 2 0 0 2
a m ig o s d e l fo ro : "Re lo j 2002
e n la b a rra d e e s t a d o "

Ayu d a !!!!! Pro b le m a


8 d e o ct u b re d e
co n lo s m e n u s m a rco s 0 -
2002
d e s p le g a b le s

Pro b le m o n co n lo s 8 d e o ct u b re d e
Ma rco s 0 -
m e n u s d e s p le g a b le s 2002

Ca m b ia r u n a im a g e n
7 d e d icie m b re d e
d e u n fra m e d e s d e o t ro POX 3 8 d e o ct u b re d e 2 0 0 2
2001
fra m e

S e le ccio n a r t e xt o 3 d e o ct u b re d e
Ara m ra m 1 7 d e o ct u b re d e 2 0 0 2
d e n t ro d e u n Te xt Are a 2002

Cre a r u n a rch ivo t xt e n 2 9 d e s e p t ie m b re


Iva n 1 5 d e o ct u b re d e 2 0 0 2
u n lo ca lh o s t de 2002

Tra b a ja r co n Wo rd m o lin 2 5 d e a b ril d e 2 0 0 2 1 5 d e o ct u b re d e 2 0 0 2

4 d e o ct u b re d e
De s ce rg a r Fich e ro s De xt e r 0 -
2002

o cu lt a r y d e s o cu lt a r 3 d e o ct u b re d e
je s u s 1 3 d e o ct u b re d e 2 0 0 2
botone s 2002

http://www.programacion.com/hilos.3.html (1 de 2) [20/10/2002 18:18:31]


Programación en castellano. Foros de debate. Javascript

Me n ú d e s p le g a b le
2 3 d e fe b re ro d e
( o b s e q u io d e Wo lve rin e Wo lve rin e 10 1 d e o ct u b re d e 2 0 0 2
2002
a m is a m ig o s d e l fo ro )

ja va s crip t e lim in a r lo s
2 8 d e s e p t ie m b re 3 0 d e s e p t ie m b re d e
s a lt o s d e lin e a d e u n fo re n a i 1
de 2002 2002
t e xt a re a

co m u n ica cio n e n t re 2 6 d e s e p t ie m b re 2 7 d e s e p t ie m b re d e
in ya ki 1
ve n t a n a s de 2002 2002

Erika Ale xa n d ra 1 9 d e s e p t ie m b re 2 7 d e s e p t ie m b re d e
JAVA S CRIPT 2
Villa b o n a Le ó n de 2002 2002

2 5 d e s e p t ie m b re 2 6 d e s e p t ie m b re d e
Fra m e s Ra s t ro 1
de 2002 2002

Pro b le m a co n m e n u 2 3 d e s e p t ie m b re 2 5 d e s e p t ie m b re d e
m e n d ru g o 2
d e s p le g a b le de 2002 2002

p ro b le m a s co n 2 5 d e s e p t ie m b re
Lo re t o 0 -
n e t s ca p e de 2002

2 5 d e s e p t ie m b re
Co m b o e d it a b le Ju ls 0 -
de 2002

« 1 2 3 4 5 6 7 8 9 10 11 ... »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.3.html (2 de 2) [20/10/2002 18:18:31]


Programación en castellano. Foros de debate. Petición de foros nuevos

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Fo ro s d e Nuestras zonas
de ba te
P e t ic ió n d e fo ro s n u e v o s Buscar
Lis t a d e fo ro s | Nu e vo a s u n t o

Últ im a
As u n t o Us u a rio Fe c h a Re s p u e s t a s
re s p u e s t a

fo ro j2 m e p a ra 1 4 d e fe b re ro d e 1 9 d e o ct u b re d e
m i_ n ick 3
m o vile s 2002 2002

Nu e vo Fo ro De 1 7 d e m a rzo d e 1 7 d e o ct u b re d e
] ] [ a ] [ n [ u ] [ b ] [ i] [ s ] [ [ 1
S crip t in g 2002 2002

Fo ro s d e Ora cle 15 de
1 6 d e o ct u b re d e
Re p o rt s , Ora cle yva n _ t e rry s e p t ie m b re d e 1 2002
Fo rm s y PL/ S QL 2002

¿ PARA CUÁNDO UNO


9 d e s e p t ie m b re 1 6 d e o ct u b re d e
DE AS S EMBLER ME On it 3
de 2002 2002
CAGO EN DIOS ?

Ca m b ia r p a s s wo rd 7 d e o ct u b re d e
Os ca r 0 -
g ru p o d e t ra b a jo . 2002

2 2 d e m a rzo d e 7 d e o ct u b re d e
va cia r e l lis t b o x Ro s a 1
2002 2002

3 d e o ct u b re d e
Fo ro s o b re CMS Triki 0 -
2002

Pro g ra m a r p a ra 2 8 d e d icie m b re 3 d e o ct u b re d e
Ta u fp a t e 2
Pa lm !!!! de 2001 2002

Re d im e n s io n d e 2 d e o ct u b re d e
Txin o 0 -
p ro g ra m a 2002

MS Acce s s 9 7 a 2 d e o ct u b re d e
Os ca r 0 -
MCAcce s s XP 2002

2 2 d e e n e ro d e 2 1 d e s e p t ie m b re
Po we rBu ild e r 7 . 0 S e rg io He rn a n d e z 3
2002 de 2002

HOLA m i n o m b re e s 8 d e m a rzo d e 1 9 d e s e p t ie m b re
HOLA m i n o m b re e s An a 1
An a 2002 de 2002

17 de
Un fo ro d e C# fLIPIS s e p t ie m b re d e 0 -
2002

http://www.programacion.com/hilos.24.html (1 de 2) [20/10/2002 18:18:38]


Programación en castellano. Foros de debate. Petición de foros nuevos

b u s co d e s co m p ila d o r 2 1 d e m a rzo d e 1 7 d e s e p t ie m b re
d a vid 1
u rg e n t e 2002 de 2002

30 de a gosto de
Fo ro d e Pe rl a le x 0 -
2002

30 de a gosto de
S o b re c# pe pa to 0 -
2002

Pa s ca l, e l le n g u a je d e 3 0 d e n o vie m b re 26 de a gosto de
Vict o rS a n ch e z2 7
lo s u n ive rs it a rio s de 2001 2002

Pro b le m a co n 23 de a gosto de
Fra n 0 -
Ms Acce s s 2002

¿ Pa ra cu á n d o u n fo ro 13 de a gosto de
h e rra iz 0 -
d e Pyt h o n ? 2002

S o ft o n ic. co m co n 8 de a gosto de
Xa n 0 -
J2 ME !!! 2002

« 1 2 3 4 5 6 »

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/hilos.24.html (2 de 2) [20/10/2002 18:18:38]


Programación en castellano. Registrarse

Warning: Supplied argument is not a valid MySQL result resource in


/chs/p1/programacion.com/home/html/registroinit.php on line 11

Añ a d ir u n a d ire cció n | Cre a r u n a we b | Cre a r u n cu rs o

Re g is t ra rs e e n P ro g ra m a c ió n e n c a s t e lla n o

S i q u ie re s p a rt icip a r e n fo ro s , re cib ir la s ú lt im a s n o ve d a d e s d e p ro g ra m a ció n e n ca s t e lla n o


m e d ia n t e co rre o e le ct ró n ico o a cce d e r a la d o cu m e n t a ció n e n fo rm a t o PDF o ZIP, d e b e ra s
re g is t ra rt e . Pa ra e llo , re lle n a e l s ig u ie n t e fo rm u la rio t e n ie n d o e n cu e n t a q u e lo s ca m p o s
s e ñ a la d o p o r ( * ) s o n o b lig a t o rio s .

No m b re : (*)

Ap e llid o s : (*)

E- m a il: (*)
Pa ís : ESPAÑA (*)

Us u a rio : (*)

Co n t ra s e ñ a : (*)

Re p e t ir co n t ra s e ñ a : (*)

Do m icilio :

Nú m e ro : Pis o / p la n t a / e s ca le ra / p u e rt a

Có d ig o p o s t a l:

Po b la ció n :

Pro vin cia : ( * ) Us u a rio s d e Es p a ñ a


Pro vin cia :

S e xo : Ho m b re Mu je r

Enviar

Co n Co rre o Dire ct t e a p u n t a s a re cib ir la s o fe rt a s y p ro m o cio n e s q u e t u


e s co g e s y p a rt icip a s e n e l s o rt e o d e u n via je a l p a ra d o r q u e d e s e e s .

http://www.programacion.com/registroinit.php (1 de 2) [20/10/2002 18:18:48]


Programación en castellano. Registrarse

© 1 9 9 9 - 2 0 0 0 , Jo a q u in Bra vo , Da n ie l Ro d rig u e z, Da vid Ca rre ro y Ale x Mo ra le s


Pro g ra m a ció n e n ca s t e lla n o .

http://www.programacion.com/registroinit.php (2 de 2) [20/10/2002 18:18:48]


Programación en castellano. Formación

Añ a d ir u n a d ire cció n | Tu t o ria le s | Art ícu lo s | Fo rm a ció n

Ca n a l d e Fo rm a c ió n - Cib e ra u la Nuestras web

Ac u e rd o d e c o la b o ra c ió n e n t re Cib e ra u la y P ro g ra m a c io n

Re c u e rd a q u e d e b e s s e r u s u a rio re g is t ra d o d e Pro g ra m a ció n e n ca s t e lla n o p a ra a p ro ve ch a r


e s t a o fe rt a .

Co n d ic io n e s d e la o fe rt a

( 1 ) De s cu e n t o d e l 1 0 1 Eu ro s ( 1 6 . 8 0 5 p t a s . ) e n la m a t rícu la d e cu a lq u ie ra d e lo s s ig u ie n t e s
cu rs o s :

● PHP - MyS QL - Co m e rcio e le ct ró n ico s o b re Ap a ch e o IIS co n PHP - MyS QL


● AS P - S QL - Co m e rcio e le ct ró n ico s o b re IIS co n AS P y Acce s s
● XML
● We b m a s t e r Nive l I
● Ph o t o s h o p 6 . 0

Es t e d e s cu e n t o e s vá lid o p a ra t o d a s la s m o d a lid a d e s d e cu rs o "Pre d e fin id o " y "Pe rs o n a liza d o ",


q u e d a n d o fu e ra d e l m is m o la m o d a lid a d "p o r lib re ".

( 2 ) Lib re a cce s o a l ca m p u s virt u a l d e Cib e ra u la y a p o s ib le s a ct u a liza cio n e s o a m p lia cio n e s d e l


m a t e ria l d id á ct ico d u ra n t e 3 m e s e s e xt ra u n a ve z fin a liza d o e l cu rs o . Es t e a cce s o p o s t - cu rs o
p e rm it e e l u s o d e l m a t e ria l a llí a lo ja d o , s in a s is t e n cia d e t u t o r.

Re q u is it o s p a ra u t iliz a r e s t a o fe rt a

( 1 ) De m o s t ra r q u e e re s s u s crip t o r d e p ro g ra m a cio n . n e t , e n via n d o e l m e n s a je d o n d e


a n u n cia m o s a n u e s t ra lis t a d e u s u a rio s re g is t ra d o s la e xis t e n cia d e e s t a o fe rt a a
p ro g n e t @cib e ra u la . co m in d ica n d o la d ire cció n d e co rre o d e s d e la q u e t e re g is t ra s t e e n e l
cu e rp o d e l m e n s a je .

( 2 ) La m a t rícu la e n e l cu rs o q u e t e in t e re s e d e b e rá s fo rm a liza rla ( o a l m e n o s a b o n a r u n a


re s e rva d e p la za ) a n t e s d e l d ía 2 2 d e fe b re ro , fe ch a e n q u e la o fe rt a d e ja d e t e n e r va lid e z.
No im p o rt a s i e l cu rs o e n e l q u e t e m a t ricu la s d e s e a s co m e n za rlo e n u n a fe ch a p o s t e rio r, e l
ú n ico re q u is it o e s q u e e l p a g o d e la m a t rícu la o re s e rva d e p la za s e e fe ct ú e a n t e s d e l d ía 2 2
d e fe b re ro .

Má s in fo rm a c ió n

Te ls : De s d e Es p a ñ a : 9 1 3 0 3 5 8 0 0 - 9 1 7 7 8 1 5 0 9
De s d e fu e ra d e Es p a ñ a , a ñ a d ir p re fijo 3 4 a n t e s d e m a rca r e l n ú m e ro
Fa x : De s d e Es p a ñ a : 9 1 3 8 0 3 6 4 1

http://www.programacion.com/ciberaula.htm (1 de 2) [20/10/2002 18:18:51]


Programación en castellano. Formación

De s d e fu e ra d e Es p a ñ a a ñ a d ir p re fijo 3 4 a n t e s d e m a rca r e l n ú m e ro
D ire c c ió n : c/ Villa lo b o s , 1 3 5 - 2 8 0 3 8 Ma d rid ( Es p a ñ a )
E- m a il: p ro g n e t @cib e ra u la . co m
Pa ra co n s u lt a r d is p o n ib ilid a d d e p la za s y fo rm a d e m a t ricu la rs e e n vía n o s u n m e n s a je .

I MP ORTAN TE: Re cu e rd a q u e d e b e s e s t a r re g is t ra d o e n Pro g ra m a ció n e n Ca s t e lla n o .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 1 , Jo a q u in Bra vo , Da n i Ro d rig u e z, Da vid Ca rre ro y Ale x Mo ra le s
Pro g ra m a ció n e n ca s t e lla n o .

http://www.programacion.com/ciberaula.htm (2 de 2) [20/10/2002 18:18:51]


CENTRO DE ESTUDIOS SERINTER

e - m a il
3 6 2 2 6 s u b s crit o s

Subscribirse
Bo le t ín d e n o t ic ia s

FORMACION
Ciclo s fo rm a t ivo s
De s a rro llo
Dis e ñ o g rá fico
In g e n ie ría d e s is t e m a s
Ofim á t ica & S e cre t a ria d o
MARCAS
MICROS OFT
MACROMEDIA
Es p e c ia le s S e rin t e r in fo rm a
ORACLE
S u n Micro s ys t e m s To d o s n u e s t ro s ciclo s fo rm a t ivo s e s t á n La g ra n m a yo ría d e la s p ro fe s io n e s q u e t e
h o m o lo g a d o s p o r e l Min is t e rio d e Ed u ca ció n , o fre ce m o s e s t á n a va la d a s p o r ce rt ifica cio n e s
TECNOLOGIAS o ficia le s o e m p re s a s líd e re s . En t re lo s o rg a n is m o s
. NET Cu lt u ra y De p o rt e y p o r la Un ive rs id a d d e
q u e p o d rá n a va la r t u p re s t ig io y re co n o cim ie n t o
Ca m b rid g e . ( click a q u í) .
XML p e rs o n a l s e e n cu e n t ra e l Min is t e rio d e e d u ca ció n y
VARIOS cie n cia , S u n Micro s ys t e m s , Micro s o ft y Ora cle .
Qu ie n e s S o m o s
Fo rm a ció n a Dis t a n cia
Pla n o d e s it u a ció n Ma s t e rs e s p e c ia liz a d o s
In s t a la cio n e s MAS TER EN P ROGRAMACI ÓN EN VI S UAL S TUD I O. N ET ( D is p o n ib le ON - LI N E)
Alq u ile r d e a u la s Tu m e jo r AVAL PROFES IONAL.
Co n ve rs o r d e m o n e d a s · Fu n d a m e n t o s d e p ro g ra m a ció n .
AFILIACIÓN/ WEBMAS TERS · S QL.
Co n t a ct a r · XML.
· Pla t a fo rm a . NET.
· Le n g u a je C# .
· Acce s o a Ba s e d e d a t o s co n ADO. NET.
· De s a rro llo d e a p lica cio n e s Win d o ws co n . NET.
· De s a rro llo d e a p lica cio n e s We b co n AS P. NET.
· We b S e rvice s co n . NET.
Us u a rio Co n t ra s e ñ a Entrar
MAS TER D E MOD ELI ZACI ÓN Y D ES ARROLLO D E AP LI CACI ON ES EN JAVA
Ap re n d e e l le n g u a je d e p ro g ra m a ció n d e d e s a rro llo m á s d e m a n d a d o e n la a ct u a lid a d p o r la s
e m p re s a s d e d e s a rro llo d e a p lica cio n e s y d e In t e rn e t .
Us u a rio s re g is t ra d o s
Co n e s t e m a s t e r e l a lu m n o a p re n d e rá a a n a liza r lo s re q u e rim ie n t o s d e u n a a p lica ció n ( d e
g e s t ió n o d e In t e rn e t ) , m o d e la rlo s y d e s a rro lla rlo s e n le n g u a je JAVA. As í m is m o e l a lu m n o
a p re n d e rá lo s co n o cim ie n t o s n e ce s a rio s d e Ba s e s d e Da t o s p a ra p o d e r im p le m e n t a r d ich a s
s o lu cio n e s .

MAS TER EXP ERTO EN D I S EÑ O Y CREACI ÓN D E S I TI OS W EB ( D is p o n ib le ON - LI N E)


Do m in a la s h e rra m ie n t a s u t iliza d a s p o r lo s p ro fe s io n a le s d e l d is e ñ o d e p á g in a s we b :
Ma cro m e d ia Fire wo rks MX, Dre a m we a ve r MX, Fla s h MX, . . .
Ap re n d e rá s t a m b ié n lo s fu n d a m e n t o s d e In t e rn e t n e ce s a rio s p a ra co n e ct a r t u s
p á g in a s we b co n b a s e s d e d a t o s .

MAS TER D E AD MI N I S TRACI ÓN Y D I S EÑ O D E S OLUCI ON ES EN ORACLE ( D is p o n ib le ON - LI N E)


ORACLE, Ap re n d e a a d m in is t ra r, o p t im iza r y re s o lve r p ro b le m a s
e n la b a s e d e d a t o s Ora cle . De fin e lo s n ive le s d e s e g u rid a d , a s í co m o
s u s p rivile g io s . Ap re n d e t o d o lo n e ce s a rio s o b re m ig ra ció n d e
in fo rm a ció n .
Ap re n d e lo s co n ce p t o s n e ce s a rio s s o b re S q l y S q l Plu s . Dis e ñ a y d e s a rro lla a p lica cio n e s y b a s e s d e d a t o s
m e d ia n t e De s ig n e r 2 0 0 0 y DEVELOPER 2 0 0 0 .

MAS TER P ROGRAMACI ÓN I N TERN ET ( P re s e n c ia l Ma d rid )


Co m p re n d e rá s y s a b rá s a b a rca r la s d ife re n t e s e t a p a s d e l d e s a rro llo d e u n p ro ye ct o e n n u e va s
t e cn o lo g ía s . Ha b rá d e s a rro lla d o e je m p lo s re a le s d e a p lica cio n e s e n INTERNET, t a le s co m o p o rt a le s y

http://www.serinter.com/ad/ (1 de 2) [20/10/2002 18:19:13]


CENTRO DE ESTUDIOS SERINTER

a p lica cio n e s B2 B.
· Re co p ila r in fo rm a ció n s o b re lo s p ro ce s o s d e n e g o cio , s u s re t o s y la vis ió n .
· De t e rm in a r re q u e rim ie n t o s d e u s u a rio .
· Mo d e liza rá s p ro ce s o s d e n e g o cio e xis t e n t e s .
· An a liza rá s lo s re q u e rim ie n t o s e n e l co n t e xt o d e l p ro p io n e g o cio .
· Cre a rá s u n p la n d ire ct o r d e d e s a rro llo .
· Cre a rá s u n d o cu m e n t o d e e s p e cifica cio n e s o rg á n ica s .
· De s a rro lla rá s la a p lica ció n re s u lt a n t e e n JAVA, JAVAS CRIPT, AS P d e p e n d ie n d o d e lo s re q u e rim ie n t o s .
· De s a rro lla rá s p re s e n t a cio n e s e n FLAS H p a ra t u s it io we b .
· Do m in a r co n ce p t o s d e Us a b ilid a d y EXPERIENCIA d e u s u a rio e n d is e ñ o d e p á g in a s WEB.

Cu rs o s m o n o g rá fic o s
CURS O D E FLAS H MX Y FLAS H EN 3 D ( D is p o n ib le ON - LI N E)
Ma cro m e d ia Fla s h MX e s t á lle g a n d o , s u s p o s ib ilid a d e s s o n t a n in cre ib le s q u e p o d ría d e cirs e q u e
e l e q u ip o d e Ma cro m e d ia s e h a s u p e ra d o u n a ve z m á s .
Co n e s t e cu rs o e l a lu m n o d o m in a rá la t e cn o lo g ía d e Fla s h , a s í co m o a lg u n a s d e la s p o s ib ilid a d e s q u e
Fla s h MX n o s o fre ce rá e n u n fu t u ro m u y p ró xim o .

CURS O D E OFI MÁTI CA & S ECRETARI AD O


Cu rs o d e o fim á t ica , e s la h e rra m ie n t a d e p ro d u ct ivid a d in d is p e n s a b le p a ra t o d o u s u a rio
d e o rd e n a d o r.
De s d e u n p u n t o d e vis t a e m p re s a ria l s e a n a liza n y a p re n d e n la s d ife re n t e s a p lica cio n e s q u e
co n t ie n e e s t a s u it e : Micro s o ft Wo rd , Micro s o ft Office , Micro s o ft Exce l y Po we r Po in t .
As í m is m o s e a p re n d e rá n lo s co n ce p t o s n e ce s a rio s p a ra u t iliza r INTERNET co m o
h e rra m ie n t a d e t ra b a jo .

MAS TER P ROGRAMACI ÓN I N TERN ET ( P RES EN CI AL MAD RI D )

Co m p re n d e rá s y s a b rá s a b a rca r la s d ife re n t e s e t a p a s d e l d e s a rro llo d e u n p ro ye ct o e n n u e va s


t e cn o lo g ía s . Ha b rá d e s a rro lla d o e je m p lo s re a le s d e a p lica cio n e s e n INTERNET, t a le s co m o P ro fe s io n e s
P o rt a le s y a p lic a c io n e s B2 B
● We b d e ve lo p e r Ma n a g e r
● Re co p ila r in fo rm a ció n s o b re lo s p ro c e s o s d e n e g o c io , s u s re t o s y la vis ió n . ● We b De ve lo p e r S p e cia lis t
● S ys t e m De ve lo p e r S p e cia lis t
● De t e rm in a r re q u e rim ie n t o s d e u s u a rio
Ce rt ific a c io n e s
● Mo d e liza rá s p ro c e s o s d e n e g o c io e xis t e n t e s .
● S u n Ce rt ifica t io n Pro g ra m m e r fo r Ja va
● An a liza rá s lo s re q u e rim ie n t o s e n e l co n t e xt o d e l p ro p io n e g o cio . 2
S ERINTER We b De ve lo p e r S p e cia lis t
Cre a rá s u n p la n d ire c t o r d e d e s a rro llo

Ca le n d a rio
● Cre a rá s u n d o cu m e n t o d e e s p e c ific a c io n e s o rg á n ic a s .
● 01-10-02 - 26-06-03
● D e s a rro lla rá s la a p lic a c ió n re s u lt a n t e e n JAVA, JAVAS CRIPT, AS P d e p e n d ie n d o d e lo s
re q u e rim ie n t o s .

● D e s a rro lla rá s p re s e n t a c io n e s e n FLAS H p a ra t u s it io w e b .

● D o m in a r c o n c e p t o s d e Us a b ilid a d y EXP ERI EN CI A d e u s u a rio e n d is e ñ o d e p á g in a s W EB.

e s t e s it io w e b h a s id o d e s a rro lla d o y p ro m o c io n a d o p o r h t t p :/ / w w w . m a rk e t in g e n la w e b . c o m

http://www.serinter.com/ad/ (2 de 2) [20/10/2002 18:19:13]


Programación en castellano. José Antonio González Seco

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Au t o r Nuestras zonas
N o m b re :
Jo s é An t o n io Go n zá le z S e co

Em a il:
jo s a n g u a p o @h o t m a il. co m

URL:
h t t p : / / www. jo s a n g u a p o . co m

Vis it a s t o t a le s :
17876

Cu rs o s

1. El le n g u a je d e p ro g ra m a ció n C# ( 1 7 8 7 6 vis it a s )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/autor.php?id=61 [20/10/2002 18:19:37]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n C# Nuestras zonas
Co m e n t a rio s d e lo s u s u a rio s
El e je ce n t ra l d e la o b ra e s e l le n g u a je d e p ro g ra m a ció n C# , d e l q u e n o s ó lo s e d e s crib e s u s in t a xis
s in o q u e t a m b ié n s e in t e n t a e xp lica r cu á le s s o n la s ra zo n e s q u e ju s t ifica n la s d e cis io n e s t o m a d a s e n
s u d is e ñ o y cu á le s s o n lo s e rro re s m á s d ifícile s d e d e t e ct a r q u e p u e d e n p ro d u cirs e a l d e s a rro lla r d e
a p lica cio n e s co n é l.

Pu e d e t a m b ié n e s crib ir s u co m e n t a rio o re g re s a r a d o n d e e s t a b a le ye n d o .

Co m e n t a rio s ( 1 / 3 )
[ S u b ir]
3 6 co m e n t a rio s

« 1 2 3 »

e s t a m u y in t e re s a n t e ( 1 9 / 1 0 / 2 0 0 2 )
Po r jo s e a n t o n io

co m o d e s ca rg o e l cu rs o co m p le t o d e c# , y s i t ie n e s cu rs o d e ja va vis u a l 6 in fo rm a m e , p u e s t e
a g ra d e s co q u e m e co n t e s t e s p u e s e s t o y a p re n d ie n d o p o co a p o co . . . . . Gra cia s

Fe lic it a c io n e s ( 1 6 / 1 0 / 2 0 0 2 )
Po r En riq u e Ló p e z

Me p a re ce u n e xce le n t e cu rs o , y m e g u s t a ría co n t in u a r e s t u d ia n d o lo , p e ro s e m e d ificu lt a e n


lín e a , a s í q u e p o r fa vo r p o d ría t e n e r u n a co p ia co m o d o cu m e n t o e le ct ró n ico ,

Mu ch ís im a s g ra cia s

c o m o b a ja r e s t e m a n u a l ( 1 4 / 1 0 / 2 0 0 2 )
Po r fa b ia n ro ja s

m e ju s t a ria t e n e r e s t e cu rs o e n m i p c
t e a g ra d e co s i m e d ice s co m o lo p u e d o h a ce r

¿ Co m o d e s c a rg a rlo ? ( 1 3 / 1 0 / 2 0 0 2 )
Po r Ara ce li

t e a g ra d e ce ria s i p u d ie ra s d e cirm e co m o d e s ca rg a r e l a rch ivo p a ra p o d e r t e n e rlo e n m i


co m p u t a d o ra s in t e n e r co n e xio n a in t e rn e t

g ra cia s

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito (1 de 3) [20/10/2002 18:19:39]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

Ex c e le n t e ( 0 8 / 1 0 / 2 0 0 2 )
Po r PABLO S OUR

Oja la m e p u d ie ra s m a n d a r u n a co p ia p o r co rre o e le ct ro n ico Gra cia s

Ex c e le n t e ( 0 6 / 1 0 / 2 0 0 2 )
Po r Ca rlo s Me d in a

Es u n b u e n m a n u a l p a ra a q u e llo s p rin cip ia n t e s co m o yo , t e p e d iría q u e m e d ije ra s co m o o b t e n e r


e l a rch ivo d e l m a n u a l co m p le t o p a ra b a ja rlo y t e n e rlo e n la co m p u t a d o ra

d e s c a rg a d e e s t e t u t o ria l ( 0 3 / 1 0 / 2 0 0 2 )
Po r m ig u e l p e s ca d o r

e s t a ria a g ra d e cid o s i m e p u d ie ra s m a n d a r u n a rch ivo co n e l t u t o ria l a p o d e r s e r e n p d f

d e s c a rg a c o m p le t a d e m a n u a l ( 0 1 / 1 0 / 2 0 0 2 )
Po r Ju lio

Me g u s t a ria re a liza r u n a d e s ca rg a co m p le t a d e l m a n u a l d im e co m o p u e d o h a ce rlo . Te lo


a g ra d e ce ré ,

S in c o n e x io n a in t e rn e t ( 2 6 / 0 9 / 2 0 0 2 )
Po r Ma rt in ( MAC)

b u e n a s . . . g e n t e p rim e ro e xce le n t e t ra b a jo !!
. . . u n a fo rm a q u e p u e d e u s a r p a ra q u e la p u e d a n ve r s in e s t a r co n e ct a d o a in t e n e t e s a g re g a r a
fa vo rit o s . la d ire ccio n ; h t t p : / / www. p ro g ra m a cio n . co m / t u t o ria l. cs h a rp . h t m l, ch e q u e a r la o p cio n
d is p o n ib le s in co n e xio n , p re s io n a r e l b o t o n d e p e rs o n la iza r, y s e le ccio n a r d e ca rg a r u n n ive l d e
vin cu lo s . t o d o e s t o e s t a n co n e ct a d o a in t e rn e t . . , d e co n e ct a rs e y a cce s a r la in fo e n t ra n d o p o r s u
lin k d e fa vo rit o s . . s a lu d o s . . .

Ge n ia l ( 2 4 / 0 9 / 2 0 0 2 )
Po r Bo rja

Me p a re ce u n a re fe re n cia u t ilís im a y m u y co m p le t a . Es t o y e n la m is m a s it u a ció n q u e la m a yo ría


d e lo s q u e h a n firm a d o a n t e s q u e yo , ¿ co m o p u e d o co n s e g u irla p a ra co n s u lt a rla fu e ra d e
in t e rn e t ? Gra cia s .

o b t e n e r t u t o ria l ( 2 3 / 0 9 / 2 0 0 2 )
Po r vict o r

h o la : m e g u s t a ria o b t e n e r e l t u t o ria l q u e p re s e n t a s s i p o d ria s d e cirm e co m o t e lo a g ra d e ce re


e s crib e m e a m i co rre o
g ra cia s

c o m o lo o b t e n g o ( 2 3 / 0 9 / 2 0 0 2 )
Po r Erick

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito (2 de 3) [20/10/2002 18:19:39]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

In fo rm a rm e co m o lo p u e d o o b t e n e r

UN A D E ROMAN OS ( 2 3 / 0 9 / 2 0 0 2 )
Po r e le n a n it o d e l b o s q u e

Ho la m e g u s t a ria s a b e r s i c3 e s u n a co p ia b a ra t a d e ja va , p o rq u e e l g u iile rm o p u e rt a s d e s d e q u e
p e rd io e l ju icio co n ja va n o s a b e lo q u e h a ce r, S ERÁ IGUAL DE FULL QUE S U VIS UAL BAS IC?
DARA PANTALLAZOS POR TODOS LOS LADOS ? AHORA QUE PROBLEMA S IMILA AL DE LAS DLL
APARECRÁ? . . . TODO ES TO LO VEREMOS EN LOS PROXIMOS CAPITULOS DE MOCOS OFT. . .

Bie n h e c h o ! ( 2 0 / 0 9 / 2 0 0 2 )
Po r Lu is

Exce le n t e t ra b a jo , p e ro a h o ra lo m á s im p o rt a n t e : có m o p u e d o o b t e n e rlo ?

Ma n u a l d e C# ( 1 9 / 0 9 / 2 0 0 2 )
Po r Ra m s e s

Gra n d io s o , m u y u t il e n e s t e m o m e n t o q u e e s la n u e va m o d a e l fra m e . NET


Me g u s t a ria t e n e rlo p a ra p o d e r le e rlo m a s d e t e n id a m e n t e cu a n d o n o e s t o y o n lin e . . .
Ha y a lg u n a fo rm a d e b a ja rlo ?
s i a lg u ie n p u e d e e n via rlo a m i co rre o :
Ra m s e s Re in o s o @h o t m a il. co m

Gra cia s
Bu e n Tra b a jo

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito (3 de 3) [20/10/2002 18:19:39]


Programación en castellano . Escribir comentario sobre El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Es c rib ir Nuestras zonas


c o m e n t a rio
El le n g u a je d e
p ro g ra m a ció n C#

El e je ce n t ra l d e la o b ra e s e l le n g u a je d e p ro g ra m a ció n C# , d e l q u e n o s ó lo s e d e s crib e s u s in t a xis


s in o q u e t a m b ié n s e in t e n t a e xp lica r cu á le s s o n la s ra zo n e s q u e ju s t ifica n la s d e cis io n e s t o m a d a s
e n s u d is e ñ o y cu á le s s o n lo s e rro re s m á s d ifícile s d e d e t e ct a r q u e p u e d e n p ro d u cirs e a l d e s a rro lla r
d e a p lica cio n e s co n é l.

Re lle n e e l s ig u ie n t e fo rm u la rio p a ra re a liza r u n co m e n t a rio s o b re "El le n g u a je d e p ro g ra m a ció n


C# ":

No m b re :

Dire cció n d e co rre o e le ct ró n ico :

Tít u lo d e l co m e n t a rio :

Te xt o d e l co m e n t a rio :

Enviar

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/comentar.php?id=csharp&obj=escrito [20/10/2002 18:19:40]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n C# Nuestras zonas
Co m e n t a rio s d e lo s u s u a rio s

El e je ce n t ra l d e la o b ra e s e l le n g u a je d e p ro g ra m a ció n C# , d e l q u e n o s ó lo s e d e s crib e s u s in t a xis


s in o q u e t a m b ié n s e in t e n t a e xp lica r cu á le s s o n la s ra zo n e s q u e ju s t ifica n la s d e cis io n e s t o m a d a s e n
s u d is e ñ o y cu á le s s o n lo s e rro re s m á s d ifícile s d e d e t e ct a r q u e p u e d e n p ro d u cirs e a l d e s a rro lla r d e
a p lica cio n e s co n é l.

Pu e d e t a m b ié n e s crib ir s u co m e n t a rio o re g re s a r a d o n d e e s t a b a le ye n d o .

Co m e n t a rio s ( 1 / 3 )
[ S u b ir]
3 6 co m e n t a rio s

« 1 2 3 »

¡Co m o o b t e n e r e l t u t o ria l! ( 1 4 / 0 9 / 2 0 0 2 )
Po r Xa vie r Ort e g a

Me g u s t a rìa s a b e r co m o p u e d o b a ja rm e e l t u t o ria l ya q u e e s t à m u y in t e re s a n t e p e ro m u ch a s
ve ce s n o t e n g o la o p o rt u n id a d d e u t iliza r e l In t e rn e t .

Ma n u a l m u y in t e re s a n t e ( 1 1 / 0 9 / 2 0 0 2 )
Po r FREDY ALCOCER S ANCHEZ

Un m a n u a l b a s ico p a ra lo s q u e s e in icia n e n la p ro g ra m a cio n C# , n o n o ce s it a s s a b e r p ro g ra m a r


e n C+ + .
S a lu d o s

Co m o ? ? ? ( 1 0 / 0 9 / 2 0 0 2 )
Po r Me Me

La ve rd a d e s q u e m e g u s t a m u ch o lo q u e e s p ro g ra m a r e n C, ya q u e a lo q u e h e o id o e s m u y
b u e n o , p e ro m i p re g u n t a e s , co m o s e lla m a e l s o ft wa re p a ra p ro g ra m a r e n C? o s i e xis t e n va rio s
cu a l e s e l m e jo r. . .

Dis cu lp e n m i ig n o ra cia p e ro cre o q u e a s i t o d o s e m p e s a m o s , s i a lg u ie n s a b e e l n o m b re m e lo


p o d ria n m a n d a r a m i e m a il p o r fa vo r? ?

m a n u e lle g a rco a @h o t m a il. co m

Gra cia s !!

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito&num=2 (1 de 3) [20/10/2002 18:19:42]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

n e c e s it o a y u d a ( 1 0 / 0 9 / 2 0 0 2 )
Po r d e n ice

HOLA QUE TAL ES PERO PUEDAN AYUDARME RES ULTA QUE NECES ITO S ABER LOS S IGNIFICADOS
DE DIAGRAMAS LINEALES S US TIPOS DE OPERADORES OPERADOS RES ARITMETICOS
OPERADORES RELACIONAL4 ES LOGICOS CONS PETOS EXPRES IONES CONTADORES
ACUMULADORES S U DEFINICIONE Y CLAS IFICACIO DE DIAGRAMAS S IMBOLOGIA ES TRUCTURA
DE CONTROL S ECUENCIALES S ELECTIVOS IFIFELS E ES TRUCTURAS REPETITIVAS EXPRES ION
FOR WHILE DO WHILE ELABORACION DE DIAGRAMAS . S EUDO CODIGO PRUEBAS DE
ES CRITORIO DIS S EÑO MOLECULAR S US FUNCIONES S IN PARAMETROS CON PARAMETROS .
S I NO ES POS IBLE ENVIAR LA INFORMACION ME PODRIAN DAR UNA PAGINA DE DONDE
BAJARLA
ES PERO NO S EA MUCHA MOLES TIA LES AGRADEZCO
GRACIAS

Qu e N o t a ! ( 1 0 / 0 9 / 2 0 0 2 )
Po r jp cc

Exce le n t e e l m a n u a l. . .
g ra cia s p o r e s e a p o rt e !

S im p le m e n t e m a g n ífic o ( s / t ) ( 1 0 / 0 9 / 2 0 0 2 )
Po r Ju a n

Lib ro e n . d o c ( 1 0 / 0 9 / 2 0 0 2 )
Po r Jo s é An t o n io Go n zá le z S e co

Ho la a m ig o s ,

An t e t o d o a g ra d e ce r lo s co m e n t a rio s fa vo ra b le s s o b re m i o b ra q u e h e le id o . De s p u é s , d e ciro s q u e
lo q u e cie rt o co rre o d e p o r a q u í p e d ía s o b re p a s a r e l lib ro a . d o c n o e s n e ce s a rio . En m i p á g in a
we b www. jo s a n g u a p o . co m lo p o d re is e n co n t ra r t a n t o e n . d o c co m o . p d f

S a lu d o s
Jo s é An t o n io .

P a ra n o ia ( 1 0 / 0 9 / 2 0 0 2 )
Po r p a u g a s

La ve rd a d e s q u e t o d o e s t o m e h a ce s o s p e ch a r ¿ p a ra q u e e je cu t a r u n p ro g ra m a r re m o t a m e n t e ?
e s u n in t e n t o p a ra q u e lo s d a t o s e s t e n co n t ro la d o s p o r m icro s o ft , cre o q u e e s t o fra ca s a ra .

q u ie n s e rá e l p rim e ro ( 0 9 / 0 9 / 2 0 0 2 )
Po r Fe n t in a k

a ve r q u ié n e s e l p rim e ro q u e lo p a s a a u n . d o c y lo s co m p a rt e co n lo s
d e m á s . . . fe n t in a k@h o t m a il. co m

MUY BUEN O ( 0 9 / 0 9 / 2 0 0 2 )
Po r Es t e b a n Ma rín Ce rva n t e s

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito&num=2 (2 de 3) [20/10/2002 18:19:42]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

ES TE TUTORIAL ES TA BUENIS IMO, LA INTERES ANTE APRENDER DE . NET. OKK. .

. N ET w a ! ( 0 9 / 0 9 / 2 0 0 2 )
Po r Ro b e rt o Ro d rig u e z G.

Me ve o e n la o b lig a cio n d e Le e r e s t e Tu t o ria l ( d e cu a l e s t o y m u y a g ra d e cid o ) , y co m o s ie m p re e s


d e lo s m e jo re s d e la Re d ,

p e ro cre o q u e co m o s ie m p re Micro s o ft Co p ia lo b u e n o y d e s t ru ye a l Cre a d o r. Au n q u e cre o d ificil


b o t a r a S UN, p o rq u e C# e s u n a co p ia d e JAVA, d e l cu a l s o y u n s e g u id o r, p e ro co m o e l m e rca d o
m a n d a h a y q u e a p re n d e r . NET

Ro b e rt o Ch i : D

Mu y b u e n o ( 0 9 / 0 9 / 2 0 0 2 )
Po r cifra

Es m u y b u e n o , e xt e n s o , fa cil d e m a n e ja r y m u y b ie n e s t ru ct u ra d o

D io s t e d è m à s ( 0 7 / 0 9 / 2 0 0 2 )
Po r A. C. Co lo m b ia

Te fe licit o , a m ig o . Gra cia s p o r d a rn o s e s t a in fo rm a ciò n . Re cib irà s m à s co n fo rm e h a s d a d o . Dio s t e


b e n d ig a . A. C.

c# (07/ 09/ 2002)


Po r Da n ie l

S im p le m e n t e g e n ia l, p o r s e r u n o d e lo s p rim e ro s m a n u a le s y p o r e s t a r t a n b ie n e s t ru ct u ra d o y
e xp lica d o . Gra cia s

Aq u í t e n é is e s t e m a g n ífic o t u t o ria l p a ra d e s c a rg a rlo ( 0 6 / 0 9 / 2 0 0 2 )


Po r Ed u a rd o

En e l a p a rt a d o d o wn lo a d s d e m i p á g in a :

h t t p : / / u s u a rio s . t rip o d . e s / CS h a rp / in d e x. h t m

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito&num=2 (3 de 3) [20/10/2002 18:19:42]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n C# Nuestras zonas
Co m e n t a rio s d e lo s u s u a rio s
El e je ce n t ra l d e la o b ra e s e l le n g u a je d e p ro g ra m a ció n C# , d e l q u e n o s ó lo s e d e s crib e s u s in t a xis
s in o q u e t a m b ié n s e in t e n t a e xp lica r cu á le s s o n la s ra zo n e s q u e ju s t ifica n la s d e cis io n e s t o m a d a s e n
s u d is e ñ o y cu á le s s o n lo s e rro re s m á s d ifícile s d e d e t e ct a r q u e p u e d e n p ro d u cirs e a l d e s a rro lla r d e
a p lica cio n e s co n é l.

Pu e d e t a m b ié n e s crib ir s u co m e n t a rio o re g re s a r a d o n d e e s t a b a le ye n d o .

Co m e n t a rio s ( 1 / 3 )
[ S u b ir]
3 6 co m e n t a rio s

« 1 2 3 »

GRACI AS Jo s é An t o n io Go n z á le z S e c o ( 0 3 / 0 9 / 2 0 0 2 )
Po r BENIGNO

Es t a m u y b ie n e s t ru ct u ra d o e n ca d a t e m a t e a g ra d e zco q u e p o n g a s a n u e s t ro a lca n ce e s t e
t u t o ria l n o e n t ie n d o a la g e n t e q u e s e q u e ja d e q u e h a b e r s i lo t ie n e n e n t a l o cu a l fo rm a t o
e n cim a q u e le s p o n e n e n la p a lm a d e la m a n o u n t ra b a jo b u e n o e n cim a s e q u e ja n , p o r o t ro la d o
e s t o y m ira n d o p o r t ra b a jo s e n VB. NET p a re ce q u e lo t ie n e n d e ja d it o m e e xt ra ñ a p u e s ya e s d e
o b je t o s ve rd a d e ra m e n t e . Te rm in o d a n d o d e n u e vo m i g ra t it u d a l a u t o r y a l q u e lo a lo ja cla ro !.

Es t e t u t o ria l e s . . . ( 3 0 / 0 8 / 2 0 0 2 )
Po r Ma n u

S e n cilla m e n t e fa b u lo s o . Mu y b ie n , y g ra cia s a l a u t o r.

e x c e le n t e m a n u a l ( 2 8 / 0 8 / 2 0 0 2 )
Po r Fe rn e y

e l m a n u e l s o b re C s h a rp e s e xce le n t e , p e ro m e u n o a lo s q u e d ice n q u e d e b e ria e s t a r e n PDF o


Wo rd , g ra cia s a l a u t o r p o r e s t a e s t u p e n d a g u ia y g ra cia s a p ro g ra m a cio n . co m

Fe lic it a c io n e s ( 2 3 / 0 8 / 2 0 0 2 )
Po r AC

Fe licit a cio n e s , a m ig o . Mu y b u e n a o b ra . S e ría b u e n o b a ja rla t o d a . Es t o y e s p e ra n d o la s n u e va s


e n t re g a s .

MAN UAL ( 2 1 / 0 8 / 2 0 0 2 )

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito&num=3 (1 de 2) [20/10/2002 18:19:44]


Programación en castellano. Comentarios recibidos sobre El lenguaje de programación C#

Po r s a n ch e z

Do n d e p u e d o d e s ca rg a r e l m a n u a l.

Mu y b u e n o , a ú n q u e . . . . ( 1 9 / 0 8 / 2 0 0 2 )
Po r Ma rc

El t u t o ria l e s m u y b u e n o , p e ro p o co d in á m ico y có m o d o .
Ob t e n e r la co p ia e n Wo rd o PDF e im p rim irlo e s a lg o m e jo r.

Aú n a s í fe licit o a l a u t o r.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/comentarios.php?id=csharp&obj=escrito&num=3 (2 de 2) [20/10/2002 18:19:44]


Programación en castellano . Puntuar El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Puntua r Nuestras zonas


El le n g u a je d e
p ro g ra m a ció n C#

Elija u n a p u n t u a ció n p a ra "El le n g u a je d e p ro g ra m a ció n C# ":

Pu n t u a ció n :
Elija una

Puntuar

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/votar.php?id=csharp&obj=escrito [20/10/2002 18:19:46]


Programación en castellano. Recomendar El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Re c o m e n d a r a u n a m ig o Nuestras zonas
El le n g u a je d e p ro g ra m a ció n C#

Re lle n e e l s ig u ie n t e fo rm u la rio p a ra re co m e n d a r "El le n g u a je d e p ro g ra m a ció n C# " a u n a m ig o :

Dire cció n d e co rre o d e l a m ig o : ( Ob lig a t o rio )

Tu No m b re : ( Ob lig a t o rio )

Tu d ire cció n d e co rre o e le ct ró n ico : ( Ob lig a t o rio )

Co m e n t a rio :

Enviar

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/recomendar.php?id=csharp&obj=escrito [20/10/2002 18:19:47]


Programación en castellano. Estadísticas para El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

Es t a d ís t ic a s Nuestras zonas

Cu rs o :
El le n g u a je d e
p ro g ra m a ció n C#

Vis it a s t o t a le s :
17876
Vis it a s d e s g lo s a d a s p o r m e s e s ( d e s d e Ju lio d e 2 0 0 2 )

1. Oct u b re d e 2 0 0 2 : 3 6 9 8 vis it a s
2. S e p t ie m b re d e 2 0 0 2 : 1 1 8 7 9 vis it a s
3. Ag o s t o d e 2 0 0 2 : 1 0 4 0 9 vis it a s
4. Ju lio d e 2 0 0 2 : 1 7 8 3 vis it a s

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/estadisticas.php?id=csharp&obj=escrito [20/10/2002 18:19:48]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● In t ro d u cció n a la o b ra
❍ Re q u is it o s p re vio s re co m e n d a d o s
❍ Es t ru ct u ra d e la o b ra
❍ Co n ve n io s d e n o t a ció n

I n t ro d u c c ió n a la o b ra

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

Re q u is it o s p re v io s re c o m e n d a d o s

En p rin cip io , p a ra e n t e n d e r co n fa cilid a d e s t a o b ra e s re co m e n d a b le e s t a r fa m ilia riza d o co n lo s


co n ce p t o s b á s ico s d e p ro g ra m a ció n o rie n t a d a a o b je t o s , e n p a rt icu la r co n lo s le n g u a je s d e
p ro g ra m a ció n C+ + o Ja va d e lo s q u e C# d e riva .

S in e m b a rg o , e s t o s n o s o n re q u is it o s fu n d a m e n t a le s p a ra e n t e n d e rla ya q u e ca d a ve z q u e e n e lla s e
in t ro d u ce a lg ú n e le m e n t o d e l le n g u a je s e d e fin e n y e xp lica n lo s co n ce p t o s b á s ico s q u e p e rm it e n
e n t e n d e rlo . Aú n a s í, s ig u e s ie n d o re co m e n d a b le d is p o n e r d e lo s re q u is it o s a n t e s m e n cio n a d o s p a ra
p o d e r m o ve rs e co n m a yo r s o lt u ra p o r e l lib ro y a p ro ve ch a rlo a l m á xim o .

Es t ru c t u ra d e la o b ra

Bá s ica m e n t e e l e je ce n t ra l d e la o b ra e s e l le n g u a je d e p ro g ra m a ció n C# , d e l q u e n o s ó lo s e
d e s crib e s u s in t a xis s in o q u e t a m b ié n s e in t e n t a e xp lica r cu á le s s o n la s ra zo n e s q u e ju s t ifica n la s
d e cis io n e s t o m a d a s e n s u d is e ñ o y cu á le s s o n lo s e rro re s m á s d ifícile s d e d e t e ct a r q u e p u e d e n
p ro d u cirs e a l d e s a rro lla r d e a p lica cio n e s co n é l. S in e m b a rg o , lo s 2 0 t e m a s u t iliza d o s p a ra e llo
p u e d e n d e s co m p o n e rs e e n t re s g ra n d e s b lo q u e s :

● Blo q u e 1 : I n t ro d u c c ió n a C# y . N ET: An t e s d e e m p e za r a d e s crib ir e l le n g u a je

http://www.programacion.com/tutorial.csharp.1.html (1 de 3) [20/10/2002 18:19:51]


Programación en castellano. El lenguaje de programación C#

e s o b lig a t o rio e xp lica r e l p o rq u é d e s u e xis t e n cia , y p a ra e llo e s n e ce s a rio a n t e s


in t ro d u cir la p la t a fo rm a . NET d e Micro s o ft co n la q u e e s t á m u y lig a d o . Es e e s e l
o b je t ivo d e lo s t e m a s 1 y 2 , d o n d e s e e xp lica n la s ca ra ct e rís t ica s y co n ce p t o s
b á s ico s d e C# y . NET, la s n o ve d o s a s a p o rt a cio n e s d e a m b o s y s e in t ro d u ce la
p ro g ra m a ció n y co m p ila ció n d e a p lica cio n e s e n C# co n e l t íp ico ¡Ho la Mu n d o !

● Blo q u e 2 : D e s c rip c ió n d e l le n g u a je : Es t e b lo q u e co n s t it u ye e l g ru e s o d e la o b ra
y e s t á fo rm a d o p o r lo s t e m a s co m p re n d id o s e n t re e l 3 y e l 1 9 . En e llo s s e
d e s crib e n p o rm e n o riza d a m e n t e lo s a s p e ct o s d e l le n g u a je m o s t ra n d o e je m p lo s d e
s u u s o , e xp lica n d o s u p o rq u é y a vis a n d o d e cu á le s s o n lo s p ro b le m a s m á s d ifícile s
d e d e t e ct a r q u e p u e d e n s u rg ir a l u t iliza rlo s y có m o e vit a rlo s .

● Blo q u e 3 : D e s c rip c ió n d e l c o m p ila d o r: Es t e ú lt im o b lo q u e , fo rm a d o s o la m e n t e


p o r e l t e m a 2 0 , d e s crib e có m o s e u t iliza e l co m p ila d o r d e C# t a n t o d e s d e la
ve n t a n a d e co n s o la co m o d e s d e la h e rra m ie n t a Vis u a l S t u d io . NET. Co m o a l
d e s crib ir e l le n g u a je , t a m b ié n s e in t e n t a d a r u n a e xp lica ció n lo m á s e xh a u s t iva , ú t il
y fá cil d e e n t e n d e r p o s ib le d e l s ig n ifica d o , p o rq u é y a p lica b ilid a d d e la s o p cio n e s d e
co m p ila ció n q u e o fre ce .

Co n v e n io s d e n o t a c ió n

Pa ra a yu d a r a re s a lt a r la in fo rm a ció n cla ve s e u t iliza n d ife re n t e s co n ve n cio n e s re s p e ct o a lo s t ip o s


d e le t ra u s a d o s p a ra re p re s e n t a r ca d a t ip o d e co n t e n id o . És t a s s o n :

● El t e xt o co rre s p o n d ie n t e a e xp lica cio n e s s e h a e s crit o u s a n d o la fu e n t e Ve rd a n a ,


co m o e s e l ca s o d e e s t e p á rra fo .
● Lo s fra g m e n t o s d e có d ig o fu e n t e s e h a n e s crit o u s a n d o la fu e n t e d e p a s o fijo t a l y
co m o s e m u e s t ra a co n t in u a ció n :

class HolaMundo
{
static void Main()
{
System.Console.WriteLine("¡Hola Mundo!");
}
}

Es t a m is m a fu e n t e e s la q u e s e u s a rá d e s d e la s e xp lica cio n e s ca d a ve z q u e s e h a g a
re fe re n cia a a lg ú n e le m e n t o d e l có d ig o fu e n t e . S i a d e m á s d ich o e le m e n t o e s u n a p a la b ra
re s e rva d a d e l le n g u a je o vie n e p re d e fin id o e n la lib re ría d e . NET, s u n o m b re s e e s crib irá e n
n e g rit a p a ra a s í re s a lt a r e l ca rá ct e r e s p e cia l d e l m is m o

● La s re fe re n cia s a t e xt o s d e la in t e rfa z d e l s is t e m a o p e ra t ivo ( n o m b re s d e fich e ro s y


d ire ct o rio s , t e xt o d e la lín e a d e co m a n d o s , e t c. ) s e h a n e s crit o u s a n d o la m is m a
fu e n t e d e p a s o fijo . Po r e je m p lo :

csc HolaMundo.cs

Cu a n d o a d e m á s e s t e t ip o d e t e xt o s e u t ilice p a ra h a ce r re fe re n cia a e le m e n t o s p re d e fin id o s


t a le s co m o e xt e n s io n e s d e fich e ro s re co m e n d a d a s o n o m b re s d e a p lica cio n e s in clu id a s e n e l

http://www.programacion.com/tutorial.csharp.1.html (2 de 3) [20/10/2002 18:19:51]


Programación en castellano. El lenguaje de programación C#

S DK, s e e s crib irá e n n e g rit a .

● Al d e s crib irs e la s in t a xis d e d e fin ició n d e lo s e le m e n t o s d e l le n g u a je s e u s a rá


fu e n t e d e p a s o fija y s e re p re s e n t a rá n e n cu rs iva lo s e le m e n t o s o p cio n a le s e n la
m is m a , e n n e g rit a lo s q u e d e b a n e s crib irs e t a l cu a l, y s in n e g rit a y e n t re s ím b o lo s
< y > lo s q u e re p re s e n t e n d e t e xt o q u e d e b a co lo ca rs e e n s u lu g a r. Po r e je m p lo ,
cu a n d o s e d ice q u e u n a cla s e h a d e d e fin irs e a s í:

class <nombreClase>
{
<miembros>
}

Lo q u e s e e s t á d icie n d o e s q u e h a d e e s crib irs e la p a la b ra re s e rva d a cla s s , s e g u id a d e t e xt o


q u e re p re s e n t e e l n o m b re d e la cla s e a d e fin ir, s e g u id o d e u n a lla ve d e a p e rt u ra ( { ) , s e g u id o
o p cio n a lm e n t e d e t e xt o q u e s e co rre s p o n d a co n d e fin icio n e s d e m ie m b ro s y s e g u id o d e u n a
lla ve d e cie rre ( } )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.1.html (3 de 3) [20/10/2002 18:19:51]


http://www.programacion.com/tutorial.csharp.2.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 1 : In t ro d u cció n a Micro s o ft . NET


❍ Micro s o ft . NET
❍ Co m m o n La n g u a g e Ru n t im e ( CLR)
❍ Micro s o ft In t e rm e d ia t e La n g u a g e ( MS IL)
❍ Me t a d a t o s
❍ En s a m b la d o s
❍ Lib re ría d e cla s e b a s e ( BCL)
❍ Co m m o n Typ e S ys t e m ( CTS )
❍ Co m m o n La n g u a g e S p e cifica t io n ( CLS )

Te m a 1 : I n t ro d u c c ió n a Mic ro s o ft . N ET

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

Mic ro s o ft . N ET

Micro s o ft . NET e s e l co n ju n t o d e n u e va s t e cn o lo g ía s e n la s q u e Micro s o ft h a e s t a d o t ra b a ja n d o


d u ra n t e lo s ú lt im o s a ñ o s co n e l o b je t ivo d e o b t e n e r u n a p la t a fo rm a s e n cilla y p o t e n t e p a ra d is t rib u ir
e l s o ft wa re e n fo rm a d e s e rvicio s q u e p u e d a n s e r s u m in is t ra d o s re m o t a m e n t e y q u e p u e d a n
co m u n ica rs e y co m b in a rs e u n o s co n o t ro s d e m a n e ra t o t a lm e n t e in d e p e n d ie n t e d e la p la t a fo rm a ,
le n g u a je d e p ro g ra m a ció n y m o d e lo d e co m p o n e n t e s co n lo s q u e h a ya n s id o d e s a rro lla d o s . És t a e s
la lla m a d a p la t a fo rm a . N ET, y a lo s s e rvicio s a n t e s co m e n t a d o s s e le s d e n o m in a s e rv ic io s W e b .

Pa ra cre a r a p lica cio n e s p a ra la p la t a fo rm a . NET, t a n t o s e rvicio s We b co m o a p lica cio n e s t ra d icio n a le s


( a p lica cio n e s d e co n s o la , a p lica cio n e s d e ve n t a n a s , s e rvicio s d e Win d o ws NT, e t c. ) , Micro s o ft h a
p u b lica d o e l d e n o m in a d o kit d e d e s a rro llo d e s o ft wa re co n o cid o co m o . N ET Fra m e w o rk S D K, q u e
in clu ye la s h e rra m ie n t a s n e ce s a ria s t a n t o p a ra s u d e s a rro llo co m o p a ra s u d is t rib u ció n y e je cu ció n y
Vis u a l S t u d io . N ET, q u e p e rm it e h a ce r t o d o la a n t e rio r d e s d e u n a in t e rfa z vis u a l b a s a d a e n
ve n t a n a s . Am b a s h e rra m ie n t a s p u e d e d e s ca rg a rs e g ra t u it a m e n t e d e s d e
h t t p : / / www. m s d n . m icro s o ft . co m / n e t , a u n q u e la ú lt im a s ó lo e s t á d is p o n ib le p a ra s u b s crip t o re s

http://www.programacion.com/tutorial.csharp.2.html (1 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

MS DN Un ive rs a l ( lo s n o s u b s crip t o re s p u e d e n p e d irlo d e s d e d ich a d ire cció n y s e le s e n via rá g ra t is


p o r co rre o o rd in a rio )

El co n ce p t o d e Micro s o ft . NET t a m b ié n in clu ye a l co n ju n t o d e n u e va s a p lica cio n e s q u e Micro s o ft y


t e rce ro s h a n ( o e s t á n ) d e s a rro lla n d o p a ra s e r u t iliza d a s e n la p la t a fo rm a . NET. En t re e lla s p o d e m o s
d e s t a ca r a p lica cio n e s d e s a rro lla d a s p o r Micro s o ft t a le s co m o Win d o ws . NET, Ha ils t o rm , Vis u a l
S t u d io . NET, MS N. NET, Office . NET, y lo s n u e vo s s e rvid o re s p a ra e m p re s a s d e Micro s o ft ( S QL
S e rve r. NET, Exch a n g e . NET, e t c. )

Co m m o n La n g u a g e Ru n t im e ( CLR)

El Co m m o n La n g u a g e Ru n t im e ( CLR) e s e l n ú cle o d e la p la t a fo rm a . NET. Es e l m o t o r e n ca rg a d o


d e g e s t io n a r la e je cu ció n d e la s a p lica cio n e s p a ra e lla d e s a rro lla d a s y a la s q u e o fre ce n u m e ro s o s
s e rvicio s q u e s im p lifica n s u d e s a rro llo y fa vo re ce n s u fia b ilid a d y s e g u rid a d . La s p rin cip a le s
ca ra ct e rís t ica s y s e rvicio s q u e o fre ce e l CLR s o n :

● Mo d e lo d e p ro g ra m a c ió n c o n s is t e n t e : A t o d o s lo s s e rvicio s y fa cilid a d e s
o fre cid o s p o r e l CLR s e a cce d e d e la m is m a fo rm a : a t ra vé s d e u n m o d e lo d e
p ro g ra m a ció n o rie n t a d o a o b je t o s . Es t o e s u n a d ife re n cia im p o rt a n t e re s p e ct o a l
m o d o d e a cce s o a lo s s e rvicio s o fre cid o s p o r lo s a lg u n o s s is t e m a s o p e ra t ivo s
a ct u a le s ( p o r e je m p lo , lo s d e la fa m ilia Win d o ws ) , e n lo s q u e a a lg u n o s s e rvicio s s e
le s a cce d e a t ra vé s d e lla m a d a s a fu n cio n e s g lo b a le s d e fin id a s e n DLLs y a o t ro s a
t ra vé s d e o b je t o s ( o b je t o s COM e n e l ca s o d e la fa m ilia Win d o ws )

● Mo d e lo d e p ro g ra m a c ió n s e n c illo : Co n e l CLR d e s a p a re ce n m u ch o s e le m e n t o s
co m p le jo s in clu id o s e n lo s s is t e m a s o p e ra t ivo s a ct u a le s ( re g is t ro d e Win d o ws ,
GUIDs , HRES ULTS , IUn kn o wn , e t c. ) El CLR n o e s q u e a b s t ra ig a a l p ro g ra m a d o r d e
e s t o s co n ce p t o s , s in o q u e s o n co n ce p t o s q u e n o e xis t e n e n la p la t a fo rm a . NET

● Elim in a c ió n d e l "in fie rn o d e la s D LLs ": En la p la t a fo rm a . NET d e s a p a re ce e l


p ro b le m a co n o cid o co m o "in fie rn o d e la s DLLs " q u e s e d a e n lo s s is t e m a s
o p e ra t ivo s a ct u a le s d e la fa m ilia Win d o ws , p ro b le m a q u e co n s is t e e n q u e a l
s u s t it u irs e ve rs io n e s vie ja s d e DLLs co m p a rt id a s p o r ve rs io n e s n u e va s p u e d e q u e
a p lica cio n e s q u e fu e ro n d is e ñ a d a s p a ra s e r e je cu t a d a s u s a n d o la s vie ja s d e je n d e
fu n cio n a r s i la s n u e va s n o s o n 1 0 0 % co m p a t ib le s co n la s a n t e rio re s . En la
p la t a fo rm a . NET la s ve rs io n e s n u e va s d e la s DLLs p u e d e n co e xis t ir co n la s vie ja s ,
d e m o d o q u e la s a p lica cio n e s d is e ñ a d a s p a ra e je cu t a rs e u s a n d o la s vie ja s p o d rá n
s e g u ir u s á n d o la s t ra s in s t a la ció n d e la s n u e va s . Es t o , o b via m e n t e , s im p lifica
m u ch o la in s t a la ció n y d e s in s t a la ció n d e s o ft wa re .

● Eje c u c ió n m u lt ip la t a fo rm a : El CLR a ct ú a co m o u n a m á q u in a virt u a l,


e n ca rg á n d o s e d e e je cu t a r la s a p lica cio n e s d is e ñ a d a s p a ra la p la t a fo rm a . NET. Es
d e cir, cu a lq u ie r p la t a fo rm a p a ra la q u e e xis t a u n a ve rs ió n d e l CLR p o d rá e je cu t a r
cu a lq u ie r a p lica ció n . NET. Micro s o ft h a d e s a rro lla d o ve rs io n e s d e l CLR p a ra la
m a yo ría d e la s ve rs io n e s d e Win d o ws : Win d o ws 9 5 , Win d o ws 9 8 , Win d o ws ME,
Win d o ws NT 4 . 0 , Win d o ws 2 0 0 0 , Win d o ws XP y Win d o ws CE ( q u e p u e d e s e r u s a d o
e n CPUs q u e n o s e a n d e la fa m ilia x8 6 ) Po r o t ro la d o Micro s o ft h a firm a d o u n
a cu e rd o co n Co re l p a ra p o rt a r e l CLR a Lin u x y t a m b ié n h a y t e rce ro s q u e e s t á n
d e s a rro lla n d o d e m a n e ra in d e p e n d ie n t e ve rs io n e s d e lib re d is t rib u ció n d e l CLR p a ra
Lin u x. As ím is m o , d a d o q u e la a rq u it e ct u ra d e l CLR e s t á t o t a lm e n t e a b ie rt a , e s
p o s ib le q u e e n e l fu t u ro s e d is e ñ e n ve rs io n e s d e l m is m o p a ra o t ro s s is t e m a s

http://www.programacion.com/tutorial.csharp.2.html (2 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

o p e ra t ivo s .

● I n t e g ra c ió n d e le n g u a je s : De s d e cu a lq u ie r le n g u a je p a ra e l q u e e xis t a u n
co m p ila d o r q u e g e n e re có d ig o p a ra la p la t a fo rm a . NET e s p o s ib le u t iliza r có d ig o
g e n e ra d o p a ra la m is m a u s a n d o cu a lq u ie r o t ro le n g u a je t a l y co m o s i d e có d ig o
e s crit o u s a n d o e l p rim e ro s e t ra t a s e . Micro s o ft h a d e s a rro lla d o u n co m p ila d o r d e
C# q u e g e n e ra có d ig o d e e s t e t ip o , a s í co m o ve rs io n e s d e s u s co m p ila d o re s d e
Vis u a l Ba s ic ( Vis u a l Ba s ic. NET) y C+ + ( C+ + co n e xt e n s io n e s g e s t io n a d a s ) q u e
t a m b ié n lo g e n e ra n y u n a ve rs ió n d e l in t é rp re t e d e JS crip t ( JS crip t . NET) q u e p u e d e
in t e rp re t a rlo . La in t e g ra ció n d e le n g u a je s e s t a q u e e s p o s ib le e s crib ir u n a cla s e e n
C# q u e h e re d e d e o t ra e s crit a e n Vis u a l Ba s ic. NET q u e , a s u ve z, h e re d e d e o t ra
e s crit a e n C+ + co n e xt e n s io n e s g e s t io n a d a s .

● Ge s t ió n d e m e m o ria : El CLR in clu ye u n re c o le c t o r d e b a s u ra q u e e vit a q u e e l


p ro g ra m a d o r t e n g a q u e t e n e r e n cu e n t a cu á n d o h a d e d e s t ru ir lo s o b je t o s q u e
d e je n d e s e rle ú t ile s . Es t e re co le ct o r e s u n a a p lica ció n q u e s e a ct iva cu a n d o s e
q u ie re cre a r a lg ú n o b je t o n u e vo y s e d e t e ct a q u e n o q u e d a m e m o ria lib re p a ra
h a ce rlo , ca s o e n q u e e l re co le ct o r re co rre la m e m o ria d in á m ica a s o cia d a a la
a p lica ció n , d e t e ct a q u é o b je t o s h a y e n e lla q u e n o p u e d a n s e r a cce d id o s p o r e l
có d ig o d e la a p lica ció n , y lo s e lim in a p a ra lim p ia r la m e m o ria d e "o b je t o s b a s u ra " y
p e rm it ir la cre a ció n d e o t ro s n u e vo s . Gra cia s a e s t e re co le ct o r s e e vit a n e rro re s d e
p ro g ra m a ció n m u y co m u n e s co m o in t e n t o s d e b o rra d o d e o b je t o s ya b o rra d o s ,
a g o t a m ie n t o d e m e m o ria p o r o lvid o d e e lim in a ció n d e o b je t o s in ú t ile s o s o licit u d d e
a cce s o a m ie m b ro s d e o b je t o s ya d e s t ru id o s .

● S e g u rid a d d e t ip o s : El CLR fa cilit a la d e t e cció n d e e rro re s d e p ro g ra m a ció n


d ifícile s d e lo ca liza r co m p ro b a n d o q u e t o d a co n ve rs ió n d e t ip o s q u e s e re a lice
d u ra n t e la e je cu ció n d e u n a a p lica ció n . NET s e h a g a d e m o d o q u e lo s t ip o s o rig e n y
d e s t in o s e a n co m p a t ib le s .

● Ais la m ie n t o d e p ro c e s o s : El CLR a s e g u ra q u e d e s d e có d ig o p e rt e n e cie n t e a u n


d e t e rm in a d o p ro ce s o n o s e p u e d a a cce d e r a có d ig o o d a t o s p e rt e n e cie n t e s a o t ro ,
lo q u e e vit a e rro re s d e p ro g ra m a ció n m u y fre cu e n t e s e im p id e q u e u n o s p ro ce s o s
p u e d a n a t a ca r a o t ro s . Es t o s e co n s ig u e g ra cia s a l s is t e m a d e s e g u rid a d d e t ip o s
a n t e s co m e n t a d o , p u e s e vit a q u e s e p u e d a co n ve rt ir u n o b je t o a u n t ip o d e m a yo r
t a m a ñ o q u e e l s u yo p ro p io , ya q u e a l t ra t a rlo co m o u n o b je t o d e m a yo r t a m a ñ o
p o d ría a cce d e rs e a e s p a cio s e n m e m o ria a je n o s a é l q u e p o d ría n p e rt e n e ce r a o t ro
p ro ce s o . Ta m b ié n s e co n s ig u e g ra cia s a q u e n o s e p e rm it e a cce d e r a p o s icio n e s
a rb it ra ria s d e m e m o ria .

● Tra t a m ie n t o d e e x c e p c io n e s : En e l CLR t o d o lo s e rro re s q u e s e p u e d a n p ro d u cir


d u ra n t e la e je cu ció n d e u n a a p lica ció n s e p ro p a g a n d e ig u a l m a n e ra : m e d ia n t e
e xce p cio n e s . Es t o e s m u y d ife re n t e a co m o s e ve n ía h a cie n d o e n lo s s is t e m a s
Win d o ws h a s t a la a p a rició n d e la p la t a fo rm a . NET, d o n d e cie rt o s e rro re s s e
t ra n s m it ía n m e d ia n t e có d ig o s d e e rro r e n fo rm a t o Win 3 2 , o t ro s m e d ia n t e
HRES ULTs y o t ro s m e d ia n t e e xce p cio n e s .

El CLR p e rm it e q u e e xce p cio n e s la n za d a s d e s d e có d ig o p a ra . NET e s crit o e n u n cie rt o


le n g u a je s e p u e d a n ca p t u ra r e n có d ig o e s crit o u s a n d o o t ro le n g u a je , e in clu ye m e ca n is m o s
d e d e p u ra ció n q u e p u e d e n s a lt a r d e s d e có d ig o e s crit o p a ra . NET e n u n d e t e rm in a d o le n g u a je

http://www.programacion.com/tutorial.csharp.2.html (3 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

a có d ig o e s crit o e n cu a lq u ie r o t ro . Po r e je m p lo , s e p u e d e re co rre r la p ila d e lla m a d a s d e u n a


e xce p ció n a u n q u e é s t a in clu ya m é t o d o s d e fin id o s e n o t ro s m ó d u lo s u s a n d o o t ro s le n g u a je s .

● S o p o rt e m u lt ih ilo : El CLR e s ca p a z d e t ra b a ja r co n a p lica cio n e s d ivid id a s e n


m ú lt ip le s h ilo s d e e je cu ció n q u e p u e d e n ir e vo lu cio n a n d o p o r s e p a ra d o e n p a ra le lo
o in t e rca lá n d o s e , s e g ú n e l n ú m e ro d e p ro ce s a d o re s d e la m á q u in a s o b re la q u e s e
e je cu t e n . La s a p lica cio n e s p u e d e n la n za r n u e vo s h ilo s , d e s t ru irlo s , s u s p e n d e rlo s
p o r u n t ie m p o o h a s t a q u e le s lle g u e u n a n o t ifica ció n , e n via rle s n o t ifica cio n e s ,
s in cro n iza rlo s , e t c.

● D is t rib u c ió n t ra n s p a re n t e : El CLR o fre ce la in fra e s t ru ct u ra n e ce s a ria p a ra cre a r


o b je t o s re m o t o s y a cce d e r a e llo s d e m a n e ra co m p le t a m e n t e t ra n s p a re n t e a s u
lo ca liza ció n re a l, t a l y co m o s i s e e n co n t ra s e n e n la m á q u in a q u e lo s u t iliza .

● S e g u rid a d a v a n z a d a : El CLR p ro p o rcio n a m e ca n is m o s p a ra re s t rin g ir la e je cu ció n


d e cie rt o s có d ig o s o lo s p e rm is o s a s ig n a d o s a lo s m is m o s s e g ú n s u p ro ce d e n d e cia
o e l u s u a rio q u e lo s e je cu t e . Es d e cir, p u e d e n o d a rs e e l m is m o n ive l d e co n fia n za
a có d ig o p ro ce d e n t e d e In t e rn e t q u e a có d ig o in s t a la d o lo ca lm e n t e o p ro ce d e n t e d e
u n a re d lo ca l; p u e d e n o d a rs e lo s m is m o s p e rm is o s a có d ig o p ro ce d e n t e d e u n
d e t e rm in a d o fa b rica n t e q u e a có d ig o d e o t ro ; y p u e d e n o d a rs e lo s m is m o s
p e rm is o s a u n m is m o có d ig o s s e g ú n e l u s u a rio q u e lo e s t é e je cu t a n d o o s e g ú n e l
ro l q u e é s t e d e s e m p e ñ e . Es t o p e rm it e a s e g u ra r a l a d m in is t ra d o r d e u n s is t e m a q u e
e l có d ig o q u e s e e s t é e je cu t a n d o n o p u e d a p o n e r e n p e lig ro la in t e g rid a d d e s u s
a rch ivo s , la d e l re g is t ro d e Win d o ws , e t c.

● I n t e ro p e ra b ilid a d c o n c ó d ig o a n t ig u o : El CLR in co rp o ra lo s m e ca n is m o s
n e ce s a rio s p a ra p o d e r a cce d e r d e s d e có d ig o e s crit o p a ra la p la t a fo rm a . NET a
có d ig o e s crit o p re via m e n t e a la a p a rició n d e la m is m a y, p o r t a n t o , n o p re p a ra d o
p a ra s e r e je cu t a n d o d e n t ro d e e lla . Es t o s m e ca n is m o s p e rm it e n t a n t o e l a cce s o a
o b je t o s COM co m o e l a cce s o a fu n cio n e s s u e lt a s d e DLLs p re e xis t e n t e s ( co m o la
API Win 3 2 )

Co m o s e p u e d e d e d u cir d e la s ca ra ct e rís t ica s co m e n t a d a s , e l CLR lo q u e h a ce e s g e s t io n a r la


e je cu ció n d e la s a p lica cio n e s d is e ñ a d a s p a ra la p la t a fo rm a . NET. Po r e s t a ra zó n , a l có d ig o d e e s t a s
a p lica cio n e s s e le s u e le lla m a r c ó d ig o g e s t io n a d o , y a l có d ig o n o e s crit o p a ra s e r e je cu t a d o
d ire ct a m e n t e e n la p la t a fo rm a . NET s e le s u e le lla m a r c ó d ig o n o g e s t io n a d o .

Mic ro s o ft I n t e rm e d ia t e La n g u a g e ( MS I L)

To d o s lo s co m p ila d o re s q u e g e n e ra n có d ig o p a ra la p la t a fo rm a . NET n o g e n e ra n có d ig o m á q u in a
p a ra CPUs x8 6 n i p a ra n in g ú n o t ro t ip o d e CPU co n cre t a , s in o q u e g e n e ra n có d ig o e s crit o e n e l
le n g u a je in t e rm e d io co n o cid o co m o Micro s o ft In t e rm e d ia t e Le n g u a g e ( MS IL) El CLR d a a la s
a p lica cio n e s la s s e n s a ció n d e q u e s e e s t á n e je cu t a n d o s o b re u n a m á q u in a virt u a l, y p re cis a m e n t e
MS IL e s e l có d ig o m á q u in a d e e s a m á q u in a virt u a l. Es d e cir, MS IL e s e l ú n ico có d ig o q u e e s ca p a z
d e in t e rp re t a r e l CLR, y p o r t a n t o cu a n d o s e d ice q u e u n co m p ila d o r g e n e ra có d ig o p a ra la
p la t a fo rm a . NET lo q u e s e e s t á d icie n d o e s q u e g e n e ra MS IL.

MS IL h a s id o cre a d o p o r Micro s o ft t ra s co n s u lt a r a n u m e ro s o s e s p e cia lis t a s e n la e s crit u ra d e


co m p ila d o re s y le n g u a je s t a n t o d e l m u n d o a ca d é m ico co m o e m p re s a ria l. Es u n le n g u a je d e u n n ive l
d e a b s t ra cció n m u ch o m á s a lt o q u e e l d e la m a yo ría d e lo s có d ig o s m á q u in a d e la s CPUs e xis t e n t e s ,
e in clu ye in s t ru ccio n e s q u e p e rm it e n t ra b a ja r d ire ct a m e n t e co n o b je t o s ( cre a rlo s , d e s t ru irlo s ,

http://www.programacion.com/tutorial.csharp.2.html (4 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

in icia liza rlo s , lla m a r a m é t o d o s virt u a le s , e t c. ) , t a b la s y e xce p cio n e s ( la n za rla s , ca p t u ra rla s y


t ra t a rla s )

Ya s e co m e n t ó q u e e l co m p ila d o r d e C# co m p ila d ire ct a m e n t e e l có d ig o fu e n t e a MS IL, q u e


Micro s o ft h a d e s a rro lla d o n u e va s ve rs io n e s d e s u s le n g u a je s Vis u a l Ba s ic ( Vis u a l Ba s ic. NET) y C+ +
( C+ + co n e xt e n s io n e s g e s t io n a d a s ) cu yo s co m p ila d o re s g e n e ra n MS IL, y q u e h a d e s a rro lla d o u n
in t é rp re t e d e JS crip t ( JS crip t . NET) q u e g e n e ra có d ig o MS IL. Pu e s b ie n , t a m b ié n h a y n u m e ro s o s
t e rce ro s q u e h a n a n u n cia d o e s t a r re a liza n d o ve rs io n e s p a ra la p la t a fo rm a . NET d e o t ro s le n g u a je s
co m o APL, CAML, Co b o l, Eiffe l, Fo rt ra n , Ha s ke ll, Ja va ( J# ) , Me rcu ry, ML, Mo n d ria n , Ob e ro n , Oz,
Pa s ca l, Pe rl, Pyt h o n , RPG, S ch e m e y S m a llt a lk.

La p rin cip a l ve n t a ja d e l MS IL e s q u e fa cilit a la e je cu ció n m u lt ip la t a fo rm a y la in t e g ra ció n e n t re


le n g u a je s a l s e r in d e p e n d ie n t e d e la CPU y p ro p o rcio n a r u n fo rm a t o co m ú n p a ra e l có d ig o m á q u in a
g e n e ra d o p o r t o d o s lo s co m p ila d o re s q u e g e n e re n có d ig o p a ra . NET. S in e m b a rg o , d a d o q u e la s
CPUs n o p u e d e n e je cu t a r d ire ct a m e n t e MS IL, a n t e s d e e je cu t a rlo h a b rá q u e co n ve rt irlo a l có d ig o
n a t ivo d e la CPU s o b re la q u e s e va ya a e je cu t a r. De e s t o s e e n ca rg a u n co m p o n e n t e d e l CLR
co n o cid o co m o co m p ila d o r JIT ( Ju s t - In - Tim e ) o jit t e r q u e va co n virt ie n d o d in á m ica m e n t e e l có d ig o
MS IL a e je cu t a r e n có d ig o n a t ivo s e g ú n s e a n e ce s a rio . Es t e jit t e r s e d is t rib u ye e n t re s ve rs io n e s :

● jit t e r n o rm a l: Es e l q u e s e s u e le u s a r p o r d e fe ct o , y s ó lo co m p ila e l có d ig o MS IL a
có d ig o n a t ivo a m e d id a q u e va s ie n d o n e ce s a rio , p u e s a s í s e a h o rra t ie m p o y
m e m o ria a l e vit a rs e t e n e r q u e co m p ila r in n e ce s a ria m e n t e có d ig o q u e n u n ca s e
e je cu t e . Pa ra co n s e g u ir e s t o , e l ca rg a d o r d e cla s e s d e l CLR s u s t it u ye in icia lm e n t e
la s lla m a d a s a m é t o d o s d e la s n u e va s cla s e s q u e va ya ca rg a n d o p o r lla m a d a s a
fu n cio n e s a u xilia re s ( s t u b s ) q u e s e e n ca rg u e n d e co m p ila r e l ve rd a d e ro có d ig o d e l
m é t o d o . Un a ve z co m p ila d o , la lla m a d a a l s t u b e s s u s t it u id a p o r u n a lla m a d a
d ire ct a a l có d ig o ya co m p ila d o , co n lo q u e p o s t e rio re s lla m a d a s a l m is m o n o
n e ce s it a rá n co m p ila ció n .

● jit t e r e c o n ó m ic o : Fu n cio n a d e fo rm a s im ila r a l jit t e r n o rm a l s o lo q u e n o re a liza


n in g u n a o p t im iza ció n d e có d ig o a l co m p ila r s in o q u e t ra d u ce ca d a in s t ru cció n MS IL
p o r s u e q u iva le n t e e n e l có d ig o m á q u in a s o b re la q u e s e e je cu t e . Es t a
e s p e cia lm e n t e p e n s a d o p a ra s e r u s a d o e n d is p o s it ivo s e m p o t ra d o s q u e d is p o n g a n
d e p o ca p o t e n cia d e CPU y p o ca m e m o ria , p u e s a u n q u e g e n e re có d ig o m á s
in e ficie n t e e s m e n o r e l t ie m p o y m e m o ria q u e n e ce s it a p a ra co m p ila r. Es m á s , p a ra
a h o rra r m e m o ria e s t e jit t e r p u e d e d e s ca rg a r có d ig o ya co m p ila d o q u e lle ve cie rt o
t ie m p o s in e je cu t a rs e y s u s t it u irlo d e n u e vo p o r e l s t u b a p ro p ia d o . Po r e s t a s
ra zo n e s , e s t e e s e l jit t e r u s a d o p o r d e fe ct o e n Win d o ws CE, s is t e m a o p e ra t ivo q u e
s e s u e le in clu ir e n lo s d is p o s it ivo s e m p o t ra d o s a n t e s m e n cio n a d o s .

Ot ra u t ilid a d d e l jit t e r e co n ó m ico e s q u e fa cilit a la a d a p t a ció n d e la p la t a fo rm a . NET a n u e vo s


s is t e m a s p o rq u e e s m u ch o m á s s e n cillo d e im p le m e n t a r q u e e l n o rm a l. De e s t e m o d o ,
g ra cia s a é l e s p o s ib le d e s a rro lla r rá p id a m e n t e u n a ve rs ió n d e l CLR q u e p u e d a e je cu t a r
a p lica cio n e s g e s t io n a d a s a u n q u e s e a d e u n a fo rm a p o co e ficie n t e , y u n a ve z d e s a rro lla d a e s
p o s ib le ce n t ra rs e e n d e s a rro lla r e l jit t e r n o rm a l p a ra o p t im iza r la e je cu ció n d e la s m is m a s .

● p re jit t e r: S e d is t rib u ye co m o u n a a p lica ció n e n lín e a d e co m a n d o s lla m a d a


n g e n . e x e m e d ia n t e la q u e e s p o s ib le co m p ila r co m p le t a m e n t e cu a lq u ie r e je cu t a b le
o lib re ría ( cu a lq u ie r e n s a m b la d o e n g e n e ra l, a u n q u e e s t e co n ce p t o s e ve rá m á s
a d e la n t e ) q u e co n t e n g a có d ig o g e s t io n a d o y co n ve rt irlo a có d ig o n a t ivo , d e m o d o
q u e p o s t e rio re s e je cu cio n e s d e l m is m o s e h a rá n u s a n d o e s t a ve rs ió n ya co m p ila d a
y n o s e p e rd e rá t ie m p o e n h a ce r la co m p ila ció n d in á m ica .

http://www.programacion.com/tutorial.csharp.2.html (5 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

La a ct u a ció n d e u n jit t e r d u ra n t e la e je cu ció n d e u n a a p lica ció n g e s t io n a d a p u e d e d a r la s e n s a ció n


d e h a ce r q u e é s t a s e e je cu t e m á s le n t a m e n t e d e b id o a q u e h a d e in ve rt irs e t ie m p o e n la s
co m p ila cio n e s d in á m ica s . Es t o e s cie rt o , p e ro h a y q u e t e n e r e n cu e n t a q u e e s u n a s o lu ció n m u ch o
m á s e ficie n t e q u e la u s a d a e n o t ra s p la t a fo rm a s co m o Ja va , ya q u e e n . NET ca d a có d ig o n o e s
in t e rp re t a d o ca d a ve z q u e s e e je cu t a s in o q u e s ó lo e s co m p ila d o la p rim e ra ve z q u e s e lla m a a l
m é t o d o a l q u e p e rt e n e ce . Es m á s , e l h e ch o d e q u e la co m p ila ció n s e re a lice d in á m ica m e n t e p e rm it e
q u e e l jit t e r t e n g a a cce s o a m u ch a m á s in fo rm a ció n s o b re la m á q u in a e n q u e s e e je cu t a rá la
a p lica ció n d e l q u e t e n d ría cu a lq u ie r co m p ila d o r t ra d icio n a l, co n lo q u e p u e d e o p t im iza r e l có d ig o
p a ra e lla g e n e ra d o ( p o r e je m p lo , u s a n d o la s in s t ru ccio n e s e s p e cia le s d e l Pe n t iu m III s i la m á q u in a
la s a d m it e , u s a n d o re g is t ro s e xt ra , in clu ye n d o có d ig o in lin e , e t c. ) Ad e m á s , co m o e l re co le ct o r d e
b a s u ra d e . NET m a n t ie n e s ie m p re co m p a ct a d a la m e m o ria d in á m ica la s re s e rva s d e m e m o ria s e
h a rá n m á s rá p id o , s o b re t o d o e n a p lica cio n e s q u e n o a g o t e n la m e m o ria y, p o r t a n t o , n o n e ce s it e n
d e u n a re co le cció n d e b a s u ra . Po r e s t a s ra zo n e s , lo s in g e n ie ro s d e Micro s o ft p ie n s a n q u e fu t u ra s
ve rs io n e s d e s u s jit t e rs p o d rá n in clu s o co n s e g u ir q u e e l có d ig o g e s t io n a d o s e e je cu t e m á s rá p id o
q u e e l n o g e s t io n a d o .

Me t a d a t o s

En la p la t a fo rm a . NET s e d is t in g u e n d o s t ip o s d e m ó d u lo s d e có d ig o co m p ila d o : e je c u t a b le s
( e xt e n s ió n . e x e ) y lib re ría s d e e n la c e d in á m ic o ( e xt e n s ió n . d ll g e n e ra lm e n t e ) Am b o s s o n
fich e ro s q u e co n t ie n e n d e fin icio n e s d e t ip o s d e d a t o s , y la d ife re n cia e n t re e llo s e s q u e s ó lo lo s
p rim e ro s d is p o n e n d e u n m é t o d o e s p e cia l q u e s irve d e p u n t o d e e n t ra d a a p a rt ir d e l q u e e s p o s ib le
e je cu t a r e l có d ig o q u e co n t ie n e n h a cie n d o u n a lla m a d a d e s d e la lín e a d e co m a n d o s d e l s is t e m a
o p e ra t ivo . A a m b o s t ip o s d e m ó d u lo s s e le s s u e le lla m a r e je c u t a b le s p o rt a b le s ( PE) , ya q u e s u
có d ig o p u e d e e je cu t a rs e e n cu a lq u ie ra d e lo s d ife re n t e s s is t e m a s o p e ra t ivo s d e la fa m ilia Win d o ws
p a ra lo s q u e e xis t e a lg u n a ve rs ió n d e l CLR.

El co n t e n id o d e u n m ó d u lo n o s ó lo MS IL, s in o q u e t a m b ié n co n s t a d e o t ra s d o s á re a s m u y
im p o rt a n t e s : la ca b e ce ra d e CLR y lo s m e t a d a t o s :

La c a b e c e ra d e CLR e s u n p e q u e ñ o b lo q u e d e in fo rm a ció n q u e in d ica q u e s e t ra t a d e u n m ó d u lo


g e s t io n a d o e in d ica e s la ve rs ió n d e l CLR q u e n e ce s it a , cu á l e s s u firm a d ig it a l, cu á l e s s u p u n t o d e
e n t ra d a ( s i e s u n e je cu t a b le ) , e t c.

Lo s m e t a d a t o s s o n u n co n ju n t o d e d a t o s o rg a n iza d o s e n fo rm a d e t a b la s q u e a lm a ce n a n
in fo rm a ció n s o b re lo s t ip o s d e fin id o s e n e l m ó d u lo , lo s m ie m b ro s d e é s t o s y s o b re cu á le s s o n lo s
t ip o s e xt e rn o s a l m ó d u lo a lo s q u e s e le s re fe re n cia e n e l m ó d u lo . Lo s m e t a d a t o s d e ca d a m o d u lo
lo s g e n e ra a u t o m á t ica m e n t e e l co m p ila d o r a l cre a rlo , y e n t re s u s t a b la s s e in clu ye n :

Ta b la D e s c rip c ió n
De fin e la s ca ra ct e rís t ica s d e l m ó d u lo . Co n s t a d e u n ú n ico e le m e n t o q u e a lm a ce n a u n
id e n t ifica d o r d e ve rs ió n d e m ó d u lo ( GUID cre a d o p o r e l co m p ila d o r) y e l n o m b re d e
Mo d u le De f
fich e ro q u e s e d io a l m ó d u lo a l co m p ila rlo ( a s í e s t e n o m b re s ie m p re e s t a rá
d is p o n ib le , a u n q u e s e re n o m b re e l fich e ro )
De fin e la s ca ra ct e rís t ica s d e lo s t ip o s d e fin id o s e n e l m ó d u lo . De ca d a t ip o s e
Typ e De f a lm a ce n a s u n o m b re , s u t ip o p a d re , s u s m o d ifica d o re s d e a cce s o y re fe re n cia s a lo s
e le m e n t o s d e la s t a b la s d e m ie m b ro s co rre s p o n d ie n t e s a s u s m ie m b ro s .
De fin e la s ca ra ct e rís t ica s d e lo s m é t o d o s d e fin id o s e n e l m ó d u lo . De ca d a m é t o d o s e
g u a rd a s u n o m b re , s ig n a t u ra ( p o r ca d a p a rá m e t ro s e in clu ye u n a re fe re n cia a l
Me t h o d De f
e le m e n t o a p ro p ia d o e n la t a b la Pa ra m De f) , m o d ifica d o re s y p o s ició n d e l m ó d u lo
d o n d e co m ie n za e l có d ig o MS IL d e s u cu e rp o .

http://www.programacion.com/tutorial.csharp.2.html (6 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

De fin e la s ca ra ct e rís t ica s d e lo s p a rá m e t ro s d e fin id o s e n e l m ó d u lo . De ca d a


Pa ra m De f
p a rá m e t ro s e g u a rd a s u n o m b re y m o d ifica d o re s .
De fin e la s ca ra ct e rís t ica s d e lo s ca m p o s d e fin id o s e n e l m ó d u lo . De ca d a u n o s e
Fie ld De f
a lm a ce n a in fo rm a ció n s o b re cu á l e s s u n o m b re , t ip o y m o d ifica d o re s .
De fin e la s ca ra ct e rís t ica s d e la s p ro p ie d a d e s d e fin id a s e n e l m ó d u lo . De ca d a u n a s e
Pro p e rt yDe f in d ica s u n o m b re , t ip o , m o d ifica d o re s y re fe re n cia s a lo s e le m e n t o s d e la t a b la
Me t h o d De f co rre s p o n d ie n t e s a s u s m é t o d o s s e t / g e t .
De fin e la s ca ra ct e rís t ica s d e lo s e ve n t o s d e fin id o s e n e l m ó d u lo . De ca d a u n o s e
Eve n t De f in d ica s u n o m b re , t ip o , m o d ifica d o re s . y re fe re n cia s a lo s e le m e n t o s d e la t a b la
Me t h o d De f co rre s p o n d ie n t e s a s u s m é t o d o s a d d / re m o ve .
In d ica cu á le s s o n lo s e n s a m b la d o s e xt e rn o s a lo s q u e s e re fe re n cia e n e l m ó d u lo . De
As s e m b lyRe f ca d a u n o s e in d ica cu á l e s s u n o m b re d e fich e ro ( s in e xt e n s ió n ) , ve rs ió n , id io m a y
m a rca d e cla ve p ú b lica .
In d ica cu á le s s o n lo s o t ro s m ó d u lo s d e l m is m o e n s a m b la d o a lo s q u e re fe re n cia e l
Mo d u le Re f
m ó d u lo . De ca d a u n o s e in d ica cu á l e s s u n o m b re d e fich e ro .
In d ica cu á le s s o n lo s t ip o s e xt e rn o s a lo s q u e s e re fe re n cia e n e l m ó d u lo . De ca d a
Typ e Re f u n o s e in d ica cu á l e s s u n o m b re y, s e g ú n d o n d e e s t é n d e fin id o s , u n a re fe re n cia a la
p o s ició n a d e cu a d a e n la t a b la As s e m b lyRe f o e n la t a b la Mo d u le Re f.
In d ica n cu á le s s o n lo s m ie m b ro s d e fin id o s e xt e rn a m e n t e a lo s q u e s e re fe re n cia e n
e l m ó d u lo . Es t o s m ie m b ro s p u e d e n s e r ca m p o s , m é t o d o s , p ro p ie d a d e s o e ve n t o s ; y
Me m b e rRe f d e ca d a u n o d e e llo s s e a lm a ce n a in fo rm a ció n s o b re s u n o m b re y s ig n a t u ra , a s í
co m o u n a re fe re n cia a la p o s ició n d e la t a b la Typ e Re f d o n d e s e a lm a ce n a
in fo rm a ció n re la t iva a l t ip o d e l q u e e s m ie m b ro .

Ta b la 1 : Prin cip a le s t a b la s d e m e t a d a t o s

Nó t e s e q u e e l s ig n ifica d o d e lo s m e t a d a t o s e s s im ila r a l d e o t ra s t e cn o lo g ía s p re via s a la p la t a fo rm a


. NET co m o lo s o n lo s fich e ro s IDL. S in e m b a rg o , lo s m e t a d a t o s t ie n e n d o s ve n t a ja s im p o rt a n t e s
s o b re é s t a s : co n t ie n e m á s in fo rm a ció n y s ie m p re s e a lm a ce n a n in cru s t a d o s e n e l m ó d u lo a l q u e
d e s crib e n , h a cie n d o im p o s ib le la s e p a ra ció n e n t re a m b o s . Ad e m á s , co m o s e ve rá m á s a d e la n t e , e s
p o s ib le t a n t o co n s u lt a r lo s m e t a d a t o s d e cu a lq u ie r m ó d u lo a t ra vé s d e la s cla s e s d e l e s p a cio d e
n o m b re s System.Reflection d e la BCL co m o a ñ a d irle s in fo rm a ció n a d icio n a l m e d ia n t e a t rib u t o s
( s e ve rá m á s a d e la n t e )

En s a m b la d o s

Un e n s a m b la d o e s u n a a g ru p a ció n ló g ica d e u n o o m á s m ó d u lo s o fich e ro s d e re cu rs o s ( fich e ro s


. GIF, . HTML, e t c. ) q u e s e e n g lo b a n b a jo u n n o m b re co m ú n . Un p ro g ra m a p u e d e a cce d e r a
in fo rm a ció n o có d ig o a lm a ce n a d o s e n u n e n s a m b la d o s in t e n e r p o rq u é s a b e cu á l e s e l fich e ro e n
co n cre t o d o n d e s e e n cu e n t ra n , p o r lo q u e lo s e n s a m b la d o s n o s p e rm it e n a b s t ra e rn o s d e la
u b ica ció n fís ica d e l có d ig o q u e e je cu t e m o s o d e lo s re cu rs o s q u e u s e m o s . Po r e je m p lo , p o d e m o s
in clu ir t o d o s lo s t ip o s d e u n a a p lica ció n e n u n m is m o e n s a m b la d o p e ro co lo ca n d o lo s m á s
fre cu e n t e m e n t e u s a d o s e n u n cie rt o m ó d u lo y lo s m e n o s u s a d o s e n o t ro , d e m o d o q u e s ó lo s e
d e s ca rg u e n d e In t e rn e t lo s ú lt im o s s i e s q u e s e va n a u s a r.

To d o e n s a m b la d o co n t ie n e u n m a n ifie s t o , q u e s o n m e t a d a t o s co n in fo rm a ció n s o b re la s
ca ra ct e rís t ica s d e l e n s a m b la d o . Es t e m a n ifie s t o p u e d e a lm a ce n a rs e cu a lq u ie ra d e lo s m ó d u lo s q u e
fo rm e n e l e n s a m b la d o o e n u n o e s p e cífica m e n t e cre a d o p a ra e llo , ca s o é s t e ú lt im o n e ce s a rio
cu a n d o e s u n e n s a m b la d o s a t é lit e ( s ó lo co n t ie n e re cu rs o s )

La s p rin cip a le s t a b la s in clu id a s e n lo s m a n ifie s t o s s o n la s s ig u ie n t e s :

http://www.programacion.com/tutorial.csharp.2.html (7 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

Ta b la D e s c rip c ió n
De fin e la s ca ra ct e rís t ica s d e l e n s a m b la d o . Co n s t a d e u n ú n ico e le m e n t o
q u e a lm a ce n a e l n o m b re d e l e n s a m b la d o s in e xt e n s ió n , ve rs ió n , id io m a ,
As s e m b lyDe f
cla ve p ú b lica y t ip o d e a lg o rit m o d e d is p e rs ió n u s a d o p a ra h a lla r lo s
va lo re s d e d is p e rs ió n d e la t a b la File De f.
De fin e cu á le s s o n lo s a rch ivo s q u e fo rm a n e l e n s a m b la d o . De ca d a u n o s e
d a s u n o m b re y va lo r d e d is p e rs ió n . Nó t e s e q u e s ó lo e l m ó d u lo q u e
co n t ie n e e l m a n ifie s t o s a b rá q u é fich e ro s q u e fo rm a n e l e n s a m b la d o , p e ro
File De f
e l re s t o d e fich e ro s d e l m is m o n o s a b rá n s i p e rt e n e ce n o n o a u n
e n s a m b la d o ( n o co n t ie n e n m e t a d a t o s q u e le s in d iq u e s i p e rt e n e ce n a u n
e n s a m b la d o )
De fin e la s ca ra ct e rís t ica s d e lo s re cu rs o s in clu id o s e n e l m ó d u lo . De ca d a
u n o s e in d ica s u n o m b re y m o d ifica d o re s d e a cce s o . S i e s u n re cu rs o
Ma n ife s t Re s o u rce De f in cru s t a d o s e in d ica d ó n d e e m p ie za d e n t ro d e l PE q u e lo co n t ie n e , y s i e s
u n fich e ro in d e p e n d ie n t e s e in d ica cu á l e s e l e le m e n t o d e la t a b la File De f
co rre s p o n d ie n t e a d ich o fich e ro .
In d ica cu á le s s o n lo s t ip o s d e fin id o s e n e l e n s a m b la d o y a cce s ib le s d e s d e
fu e ra d e l m is m o . Pa ra a h o rra r e s p a cio s ó lo re co g e n lo s q u e n o p e rt e n e zca n
a l m ó d u lo d o n d e s e in clu ye e l m a n ifie s t o , y d e ca d a u n o s e in d ica s u
Exp o rt e d Typ e s De f
n o m b re , la p o s ició n e n la t a b la File De f d e l fich e ro d o n d e s e h a
im p le m e n t a d o y la p o s ició n e n la t a b la Typ e De f co rre s p o n d ie n t e a s u
d e fin ició n .
In d ica e n q u é p ro ce s a d o re s s e p u e d e e je cu t a r e l e n s a m b la d o , lo q u e
p u e d e s e r ú t il s a b e rlo s i e l e n s a m b la d o co n t ie n e m ó d u lo s co n có d ig o n a t ivo
( p o d ría h a ce rs e u s a n d o C+ + co n e xt e n s io n e s g e s t io n a d a s ) S u e le e s t a r
va cía , lo q u e in d ica q u e s e p u e d e e je cu t a r e n cu a lq u ie r p ro ce s a d o r; p e ro s i
As s e m b lyPro cce s o rDe f
e s t u vie s e lle n a , ca d a e le m e n t o in d ica ría u n t ip o d e p ro ce s a d o r a d m it id o
s e g ú n e l fo rm a t o d e id e n t ifica d o re s d e p ro ce s a d o r d e l fich e ro Win NT. h
in clu id o co n Vis u a l S t u d io . NET ( p o r e je m p lo , 5 8 6 = Pe n t iu m , 2 2 0 0 =
Arq u it e ct u ra IA6 4 , e t c. )
In d ica b a jo q u é s is t e m a s o p e ra t ivo s s e p u e d e e je cu t a r e l e n s a m b la d o , lo
q u e p u e d e s e r ú t il s i co n t ie n e m ó d u lo s co n t ip o s o m é t o d o s d is p o n ib le s
s ó lo e n cie rt o s s is t e m a s . S u e le e s t a r va cía , lo q u e in d ica q u e s e p u e d e
e je cu t a r e n cu a lq u ie r p ro ce s a d o r; p e ro s i e s t u vie s e lle n a , in d ica ría e l
As s e m b lyOS De f
id e n t ifica d o r d e ca d a u n o d e lo s s is t e m a s a d m it id o s s ig u ie n d o e l fo rm a t o
d e l Win NT. h d e Vis u a l S t u d io . NET ( p o r e je m p lo , 0 = fa m ilia Win d o ws 9 X, 1
= fa m ilia Win d o ws NT, e t c. ) y e l n ú m e ro d e la ve rs ió n d e l m is m o a p a rt ir
d e la q u e s e a d m it e .

Ta b la 2 :Prin cip a le s t a b la s d e u n m a n ifie s t o

Pa ra a s e g u ra r q u e n o s e h a ya a lt e ra d o la in fo rm a ció n d e n in g ú n e n s a m b la d o s e u s a e l crip t o s is t e m a
d e cla ve p ú b lica RS A. Lo q u e s e h a ce e s ca lcu la r e l có d ig o d e d is p e rs ió n S HA- 1 d e l m ó d u lo q u e
co n t e n g a e l m a n ifie s t o e in clu ir t a n t o e s t e va lo r cifra d o co n RS A ( firm a d ig it a l) co m o la cla ve
p ú b lica n e ce s a ria p a ra d e s cifra rlo e n a lg ú n lu g a r d e l m ó d u lo q u e s e in d ica rá e n la ca b e ce ra d e CLR.
Ca d a ve z q u e s e va ya a ca rg a r e n m e m o ria e l e n s a m b la d o s e ca lcu la rá s u va lo r d e d is p e rs ió n d e
n u e vo y s e co m p ro b a rá q u e e s ig u a l a l re s u lt a d o d e d e s cifra r e l o rig in a l u s a n d o s u cla ve p ú b lica . S i
n o fu e s e a s í s e d e t e ct a ría q u e s e h a a d u lt e ra d o s u co n t e n id o .

Pa ra a s e g u ra r t a m b ié n q u e lo s co n t e n id o s d e l re s t o d e fich e ro s q u e fo rm e n u n e n s a m b la d o n o
h a ya n s id o a lt e ra d o s lo q u e s e h a ce e s ca lcu la r e l có d ig o d e d is p e rs ió n d e é s t o s a n t e s d e cifra r e l

http://www.programacion.com/tutorial.csharp.2.html (8 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

e n s a m b la d o y g u a rd a rlo e n e l e le m e n t o co rre s p o n d ie n t e a ca d a fich e ro e n la t a b la File De f d e l


m a n ifie s t o . El a lg o rit m o d e cifra d o u s a d o p o r d e fe ct o e s S HA- 1 , a u n q u e e n e s t e ca s o t a m b ié n s e d a
la p o s ib ilid a d d e u s a r MD5 . En a m b o s ca s o s , ca d a ve z q u e s e a cce d e a l fich e ro p a ra a cce d e r a u n
t ip o o re cu rs o s e ca lcu la rá d e n u e vo s u va lo r d e d is p e rs ió n y s e co m p ro b a rá q u e co in cid a co n e l
a lm a ce n a d o e n File De f.

Da d o q u e la s cla ve s p ú b lica s s o n va lo re s q u e o cu p a n m u ch o s b yt e s ( 2 0 4 8 b it s ) , lo q u e s e h a ce p a ra
e vit a r q u e lo s m e t a d a t o s s e a n e xce s iva m e n t e g ra n d e s e s n o in clu ir e n la s re fe re n cia s a
e n s a m b la d o s e xt e rn o s d e la t a b la As s e m b lyRe f la s cla ve s p ú b lica s d e d ich o s e n s a m b la d o s , s in o s ó lo
lo s 6 4 ú lt im o s b it s re s u lt a n t e s d e a p lica r u n a lg o rit m o d e d is p e rs ió n a d ich a s cla ve s . A e s t e va lo r
re co rt a d o s e le lla m a m a rc a d e c la v e p ú b lic a .

Ha y d o s t ip o s d e e n s a m b la d o s : e n s a m b la d o s p riv a d o s y e n s a m b la d o s c o m p a rt id o s . Lo s
p riva d o s s e a lm a ce n a n e n e l m is m o d ire ct o rio q u e la a p lica ció n q u e lo s u s a y s ó lo p u e d e u s a rlo s
é s t a , m ie n t ra s q u e lo s co m p a rt id o s s e a lm a ce n a n e n u n c a c h é d e e n s a m b la d o g lo b a l ( GAC) y
p u e d e n u s a rlo s cu a lq u ie ra q u e h a ya s id o co m p ila d a re fe re n ciá n d o lo s .

Lo s co m p a rt id o s h a n d e cifra s e co n RS A ya q u e lo q u e lo s id e n t ifica e s e n e l GAC e s s u n o m b re ( s in


e xt e n s ió n ) m á s s u cla ve p ú b lica , lo q u e p e rm it e q u e e n e l GAC p u e d a n in s t a la rs e va rio s
e n s a m b la d o s co n e l m is m o n o m b re y d ife re n t e s cla ve s p ú b lica s . Es d e cir, e s co m o s i la cla ve p ú b lica
fo rm a s e p a rt e d e l n o m b re d e l e n s a m b la d o , ra zó n p o r la q u e a lo s e n s a m b la d o s a s í cifra d o s s e le s
lla m a e n s a m b la d o s d e n o m b re fu e rt e . Es t a p o lít ica p e rm it e re s o lve r lo s co n flict o s d e riva d o s d e
q u e s e in t e n t e in s t a la r e n u n m is m o e q u ip o va rio s e n s a m b la d o s co m p a rt id o s co n e l m is m o n o m b re
p e ro p ro ce d e n t e s d e d is t in t a s e m p re s a s , p u e s é s t a s t e n d rá n d is t in t a s cla ve s p ú b lica s .

Ta m b ié n p a ra e vit a r p ro b le m a s , e n e l GAC s e p u e d e n m a n t e n e r m ú lt ip le s ve rs io n e s d e u n m is m o
e n s a m b la d o . As í, s i u n a a p lica ció n fu e co m p ila d a u s a n d o u n a cie rt a ve rs ió n d e u n d e t e rm in a d o
e n s a m b la d o co m p a rt id o , cu a n d o s e e je cu t e s ó lo p o d rá h a ce r u s o d e e s a ve rs ió n d e l e n s a m b la d o y
n o d e a lg u n a o t ra m á s m o d e rn a q u e s e h u b ie s e in s t a la d o e n e l GAC. De e s t a fo rm a s e s o lu cio n a e l
p ro b le m a d e l in fie rn o d e la s D LL co m e n t a d o a l p rin cip io d e l t e m a .

En re a lid a d e s p o s ib le m o d ifica r t a n t o la s p o lít ica s d e b ú s q u e d a d e e n s a m b la d o s ( p o r e je m p lo , p a ra


b u s ca r e n s a m b la d o s p riva d o s fu e ra d e l d ire ct o rio d e la a p lica ció n ) co m o la p o lít ica d e a ce p t a ció n d e
e n s a m b la d o s co m p a rt id o s ( p o r e je m p lo , p a ra q u e s e h a g a a u t o m á t ica m e n t e u s o d e la s n u e va s
ve rs io n e s q u e s e in s t a le n d e DLLs co m p a rt id a s ) in clu ye n d o e n e l d ire ct o rio d e in s t a la ció n d e la
a p lica ció n u n fich e ro d e co n fig u ra ció n e n fo rm a t o XML co n la s n u e va s re g la s p a ra la s m is m a s . Es t e
fich e ro h a d e lla m a rs e ig u a l q u e e l e je cu t a b le d e la a p lica ció n p e ro h a d e t e n e r e xt e n s ió n . c fg .

Lib re ría d e c la s e b a s e ( BCL)

La Lib re ría d e Cla s e Ba s e ( BCL) e s u n a lib re ría in clu id a e n e l . NET Fra m e w o rk fo rm a d a p o r cie n t o s
d e t ip o s d e d a t o s q u e p e rm it e n a cce d e r a lo s s e rvicio s o fre cid o s p o r e l CLR y a la s fu n cio n a lid a d e s
m á s fre cu e n t e m e n t e u s a d a s a la h o ra d e e s crib ir p ro g ra m a s . Ad e m á s , a p a rt ir d e e s t a s cla s e s
p re fa b rica d a s e l p ro g ra m a d o r p u e d e cre a r n u e va s cla s e s q u e m e d ia n t e h e re n cia e xt ie n d a n s u
fu n cio n a lid a d y s e in t e g re n a la p e rfe cció n co n e l re s t o d e cla s e s d e la BCL. Po r e je m p lo ,
im p le m e n t a n d o cie rt o s in t e rfa ce s p o d e m o s cre a r n u e vo s t ip o s d e co le ccio n e s q u e s e rá n t ra t a d a s
e xa ct a m e n t e ig u a l q u e cu a lq u ie ra d e la s co le ccio n e s in clu id a s e n la BCL.

Es t a lib re ría e s t á e s crit a e n MS IL, p o r lo q u e p u e d e u s a rs e d e s d e cu a lq u ie r le n g u a je cu yo


co m p ila d o r g e n e re MS IL. A t ra vé s d e la s cla s e s s u m in is t ra d a s e n e lla e s p o s ib le d e s a rro lla r cu a lq u ie r
t ip o d e a p lica ció n , d e s d e la s t ra d icio n a le s a p lica cio n e s d e ve n t a n a s , co n s o la o s e rvicio d e Win d o ws
NT h a s t a lo s n o ve d o s o s s e rvicio s We b y p á g in a s AS P. NET. Es t a l la riq u e za d e s e rvicio s q u e o fre ce
q u e p u e d e cre a rs e le n g u a je s q u e ca re zca n d e lib re ría d e cla s e s p ro p ia y s ó lo u s e n la BCL - co m o C# .

http://www.programacion.com/tutorial.csharp.2.html (9 de 12) [20/10/2002 18:20:03]


http://www.programacion.com/tutorial.csharp.2.html

Da d o la a m p lit u d d e la BCL, h a s id o n e ce s a rio o rg a n iza r la s cla s e s e n e lla in clu id a e n e s p a c io s d e


n o m b re s q u e a g ru p e n cla s e s co n fu n cio n a lid a d e s s im ila re s . Po r e je m p lo , lo s e s p a cio s d e n o m b re s
m á s usa dos son:

Es p a c io d e n o m b re s Ut ilid a d d e lo s t ip o s d e d a t o s q u e c o n t ie n e
Tip o s m u y fre cu e n t e m e n t e u s a d o s , co m o lo s lo s t ip o s b á s ico s ,
S ys t e m t a b la s , e xce p cio n e s , fe ch a s , n ú m e ro s a le a t o rio s , re co le ct o r d e
b a s u ra , e n t ra d a / s a lid a e n co n s o la , e t c.
Co le ccio n e s d e d a t o s d e u s o co m ú n co m o p ila s , co la s , lis t a s ,
S ys t e m . Co lle ct io n s
d iccio n a rio s , e t c.
Ma n ip u la ció n d e b a s e s d e d a t o s . Fo rm a n la d e n o m in a d a a rq u it e ct u ra
S ys t e m . Da t a
AD O. N ET.
S ys t e m . IO Ma n ip u la ció n d e fich e ro s y o t ro s flu jo s d e d a t o s .
S ys t e m . Ne t Re a liza ció n d e co m u n ica cio n e s e n re d .
S ys t e m . Re fle ct io n Acce s o a lo s m e t a d a t o s q u e a co m p a ñ a n a lo s m ó d u lo s d e có d ig o .
S ys t e m . Ru n t im e . Re m o t in g Acce s o a o b je t o s re m o t o s .
S ys t e m . S e cu rit y Acce s o a la p o lít ica d e s e g u rid a d e n q u e s e b a s a e l CLR.
S ys t e m . Th re a d in g Ma n ip u la ció n d e h ilo s .
Cre a ció n d e in t e rfa ce s d e u s u a rio b a s a d a s e n ve n t a n a s p a ra
S ys t e m . We b . UI. We b Co n t ro ls
a p lica cio n e s We b .
Cre a ció n d e in t e rfa ce s d e u s u a rio b a s a d a s e n ve n t a n a s p a ra
S ys t e m . Win fo rm s
a p lica cio n e s e s t á n d a r.
S ys t e m . XML Acce s o a d a t o s e n fo rm a t o XML.

Ta b la 3 : Es p a cio s d e n o m b re s d e la BCL m á s u s a d o s

Co m m o n Ty p e S y s t e m ( CTS )

El Co m m o n Ty p e S y s t e m ( CTS ) o S is t e m a d e Tip o Co m ú n e s e l co n ju n t o d e re g la s q u e h a n d e
s e g u ir la s d e fin icio n e s d e t ip o s d e d a t o s p a ra q u e e l CLR la s a ce p t e . Es d e cir, a u n q u e ca d a le n g u a je
g e s t io n a d o d is p o n g a d e s u s p ro p ia s in t a xis p a ra d e fin ir t ip o s d e d a t o s , e n e l MS IL re s u lt a n t e d e la
co m p ila ció n d e s u s có d ig o s fu e n t e s e h a d e cu m p lir la s re g la s d e l CTS . Alg u n o s e je m p lo s d e e s t a s
re g la s s o n :

● Ca d a t ip o d e d a t o p u e d e co n s t a r d e ce ro o m á s m ie m b ro s . Ca d a u n o d e e s t o s
m ie m b ro s p u e d e s e r u n ca m p o , u n m é t o d o u n a p ro p ie d a d o u n e ve n t o .

● No p u e d e h a b e r h e re n cia m ú lt ip le , y t o d o t ip o d e d a t o h a d e h e re d a r d ire ct a o
in d ire ct a m e n t e d e System.Object.

● Lo s m o d ifica d o re s d e a cce s o a d m it id o s s o n :

Mo d ific a d o r Có d ig o d e s d e e l q u e e s a c c e s ib le e l m ie m b ro
p u b lic Cu a lq u ie r có d ig o
p riv a t e Có d ig o d e l m is m o t ip o d e d a t o

http://www.programacion.com/tutorial.csharp.2.html (10 de 12) [20/10/2002 18:20:04]


http://www.programacion.com/tutorial.csharp.2.html

fa m ily Có d ig o d e l m is m o t ip o d e d a t o o d e h ijo s d e é s t e .
a s s e m b ly Có d ig o d e l m is m o e n s a m b la d o
fa m ily a n d a s s e m b ly Có d ig o d e l m is m o t ip o o d e h ijo s d e é s t e u b ica d o e n e l m is m o e n s a m b la d o
Có d ig o d e l m is m o t ip o o d e h ijo s d e é s t e , o có d ig o u b ica d o e n e l m is m o
fa m ily o r a s s e m b ly
e n s a m b la d o

Ta b la 4 : Mo d ifica d o re s d e a cce s o a m ie m b ro s a d m it id o s p o r e l CTS

Co m m o n La n g u a g e S p e c ific a t io n ( CLS )

El Co m m o n La n g u a g e S p e c ific a t io n ( CLS ) o Es p e cifica ció n d e l Le n g u a je Co m ú n e s u n co n ju n t o


d e re g la s q u e h a n d e s e g u ir la s d e fin icio n e s d e t ip o s q u e s e h a g a n u s a n d o u n d e t e rm in a d o le n g u a je
g e s t io n a d o s i s e d e s e a q u e s e a n a cce s ib le s d e s d e cu a lq u ie r o t ro le n g u a je g e s t io n a d o . Ob via m e n t e ,
s ó lo e s n e ce s a rio s e g u ir e s t a s re g la s e n la s d e fin icio n e s d e t ip o s y m ie m b ro s q u e s e a n a cce s ib le s
e xt e rn a m e n t e , y n o la e n la s d e lo s p riva d o s . Ad e m á s , s i n o im p o rt a la in t e ro p e ra b ilid a d e n t re
le n g u a je s t a m p o co e s n e ce s a rio s e g u irla s . A co n t in u a ció n s e lis t a n a lg u n a s d e re g la s s ig n ifica t iva s
d e l CLS :

● Lo s t ip o s d e d a t o s b á s ico s a d m it id o s s o n bool, char, byte, short, int, long,


float, double, string y object Nó t e s e p u e s q u e n o t o d o s lo s le n g u a je s t ie n e n
p o rq u é a d m it ir lo s t ip o s b á s ico s e n t e ro s s in s ig n o o e l t ip o decimal co m o lo h a ce
C# .

● La s t a b la s h a n d e t e n e r u n a o m á s d im e n s io n e s , y e l n ú m e ro d e d im e n s io n e s d e
ca d a t a b la h a d e s e r fijo . Ad e m á s , h a n d e in d e xa rs e e m p e za n d o a co n t a r d e s d e 0 .

● S e p u e d e n d e fin ir t ip o s a b s t ra ct o s y t ip o s s e lla d o s . Lo s t ip o s s e lla d o s n o p u e d e n


t e n e r m ie m b ro s a b s t ra ct o s .

● La s e xce p cio n e s h a n d e d e riva r d e System.Exception, lo s d e le g a d o s d e


System.Delegate, la s e n u m e ra cio n e s d e System.Enum, y lo s t ip o s p o r va lo r q u e n o
s e a n e n u m e ra cio n e s d e System.ValueType.

● Lo s m é t o d o s d e a cce s o a p ro p ie d a d e s e n q u e s e t ra d u zca n la s d e fin icio n e s g e t / s e t


d e é s t a s h a n d e lla m a rs e d e la fo rm a get_X y set_X re s p e ct iva m e n t e , d o n d e X e s
e l n o m b re d e la p ro p ie d a d ; lo s d e a cce s o a in d iza d o re s h a n d e t ra d u cirs e e n
m é t o d o s get_Item y setItem; y e n e l ca s o d e lo s e ve n t o s , s u s d e fin icio n e s
a d d / re m o ve h a n d e t ra d u cirs e e n m é t o d o s d e add_X y remove_X.

● En la s d e fin icio n e s d e a t rib u t o s s ó lo p u e d e n u s a rs e e n u m e ra cio n e s o d a t o s d e lo s


s ig u ie n t e s t ip o s : System.Type, string, char, bool, byte, short, int, long,
float, double y object.

● En u n m is m o á m b it o n o s e p u e d e n d e fin ir va rio s id e n t ifica d o re s cu yo s n o m b re s


s ó lo d ifie ra n e n la ca p it a liza ció n u s a d a . De e s t e m o d o s e e vit a n p ro b le m a s a l
a cce d e r a e llo s u s a n d o le n g u a je s n o s e n s ib le s a m a yú s cu la s .

http://www.programacion.com/tutorial.csharp.2.html (11 de 12) [20/10/2002 18:20:04]


http://www.programacion.com/tutorial.csharp.2.html

● La s e n u m e ra cio n e s n o p u e d e n im p le m e n t a r in t e rfa ce s , y t o d o s s u s ca m p o s h a n d e
s e r e s t á t ico s y d e l m is m o t ip o . El t ip o d e lo s ca m p o s d e u n a e n u m e ra ció n s ó lo
p u e d e s e r u n o d e e s t o s cu a t ro t ip o s b á s ico s : byte, short, int o long.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.2.html (12 de 12) [20/10/2002 18:20:04]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 2 : In t ro d u cció n a C#
❍ Orig e n y n e ce s id a d d e u n n u e vo le n g u a je
❍ Ca ra ct e rís t ica s d e C#
❍ Es crit u ra d e a p lica cio n e s

Te m a 2 : I n t ro d u c c ió n a C#

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

Orig e n y n e c e s id a d d e u n n u e v o le n g u a je

C# ( le íd o e n in g lé s "C S h a rp " y e n e s p a ñ o l "C Alm o h a d illa ") e s e l n u e vo le n g u a je d e p ro p ó s it o


g e n e ra l d is e ñ a d o p o r Micro s o ft p a ra s u p la t a fo rm a . NET. S u s p rin cip a le s cre a d o re s s o n S co t t
Wilt a m u t h y An d e rs He jls b e rg , é s t e ú lt im o t a m b ié n co n o cid o p o r h a b e r s id o e l d is e ñ a d o r d e l
le n g u a je Tu rb o Pa s ca l y la h e rra m ie n t a RAD De lp h i.

Au n q u e e s p o s ib le e s crib ir có d ig o p a ra la p la t a fo rm a . NET e n m u ch o s o t ro s le n g u a je s , C# e s e l
ú n ico q u e h a s id o d is e ñ a d o e s p e cífica m e n t e p a ra s e r u t iliza d o e n e lla , p o r lo q u e p ro g ra m a rla
u s a n d o C# e s m u ch o m á s s e n cillo e in t u it ivo q u e h a ce rlo co n cu a lq u ie ra d e lo s o t ro s le n g u a je s ya
q u e C# ca re ce d e e le m e n t o s h e re d a d o s in n e ce s a rio s e n . NET. Po r e s t a ra zó n , s e s u e le d e cir q u e C#
e s e l le n g u a je n a t iv o d e . N ET

La s in t a xis y e s t ru ct u ra ció n d e C# e s m u y s im ila r a la C+ + , ya q u e la in t e n ció n d e Micro s o ft co n C#


e s fa cilit a r la m ig ra ció n d e có d ig o s e s crit o s e n e s t o s le n g u a je s a C# y fa cilit a r s u a p re n d iza je a lo s
d e s a rro lla d o re s h a b it u a d o s a e llo s . S in e m b a rg o , s u s e n cille z y e l a lt o n ive l d e p ro d u ct ivid a d s o n
e q u ip a ra b le s a lo s d e Vis u a l Ba s ic.

Un le n g u a je q u e h u b ie s e s id o id e a l u t iliza r p a ra e s t o s m e n e s t e re s e s Ja va , p e ro d e b id o a p ro b le m a s
co n la e m p re s a cre a d o ra d e l m is m o - S u n - , Micro s o ft h a t e n id o q u e d e s a rro lla r u n n u e vo le n g u a je
q u e a ñ a d ie s e a la s ya p ro b a d a s virt u d e s d e Ja va la s m o d ifica cio n e s q u e Micro s o ft t e n ía p e n s a d o

http://www.programacion.com/tutorial.csharp.3.html (1 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

a ñ a d irle p a ra m e jo ra rlo a ú n m á s y h a ce rlo u n le n g u a je o rie n t a d o a l d e s a rro llo d e co m p o n e n t e s .

En re s u m e n , C# e s u n le n g u a je d e p ro g ra m a ció n q u e t o m a la s m e jo re s ca ra ct e rís t ica s d e le n g u a je s


p re e xis t e n t e s co m o Vis u a l Ba s ic, Ja va o C+ + y la s co m b in a e n u n o s o lo . El h e ch o d e s e r
re la t iva m e n t e re cie n t e n o im p lica q u e s e a in m a d u ro , p u e s Micro s o ft h a e s crit o la m a yo r p a rt e d e la
BCL u s á n d o lo , p o r lo q u e s u co m p ila d o r e s e l m á s d e p u ra d o y o p t im iza d o d e lo s in clu id o s e n e l . NET
Fra m e w o rk S DK

Ca ra c t e rís t ic a s d e C#

Co n la id e a d e q u e lo s p ro g ra m a d o re s m á s e xp e rim e n t a d o s p u e d a n o b t e n e r u n a vis ió n g e n e ra l d e l
le n g u a je , a co n t in u a ció n s e re co g e d e m a n e ra re s u m id a la s p rin cip a le s ca ra ct e rís t ica s d e C# Alg u n a
d e la s ca ra ct e rís t ica s a q u í s e ñ a la d a s n o s o n e xa ct a m e n t e p ro p ia s d e l le n g u a je s in o d e la p la t a fo rm a
. NET e n g e n e ra l. S in e m b a rg o , t a m b ié n s e co m e n t a n a q u í t a m b ié n e n t a n t o q u e t ie n e n re p e rcu s ió n
d ire ct a e n e l le n g u a je , a u n q u e s e in d ica rá e xp lícit a m e n t e cu á le s s o n e s t e t ip o d e ca ra ct e rís t ica s
ca d a ve z q u e s e t o q u e n :

● S e n c ille z : C# e lim in a m u ch o s e le m e n t o s q u e o t ro s le n g u a je s in clu ye n y q u e s o n


in n e ce s a rio s e n . NET. Po r e je m p lo :
❍ El có d ig o e s crit o e n C# e s a u t o c o n t e n id o , lo q u e s ig n ifica q u e n o n e ce s it a
d e fich e ro s a d icio n a le s a l p ro p io fu e n t e t a le s co m o fich e ro s d e ca b e ce ra o
fich e ro s IDL
❍ El t a m a ñ o d e lo s t ip o s d e d a t o s b á s ico s e s fijo e in d e p e n d ie n t e d e l
co m p ila d o r, s is t e m a o p e ra t ivo o m á q u in a p a ra q u ie n e s s e co m p ile ( n o co m o
e n C+ + ) , lo q u e fa cilit a la p o rt a b ilid a d d e l có d ig o .
❍ No s e in clu ye n e le m e n t o s p o co ú t ile s d e le n g u a je s co m o C+ + t a le s co m o
m a cro s , h e re n cia m ú lt ip le o la n e ce s id a d d e u n o p e ra d o r d ife re n t e d e l p u n t o
( .) a cce d e r a m ie m b ro s d e e s p a cio s d e n o m b re s ( ::)

● Mo d e rn id a d : C# in co rp o ra e n e l p ro p io le n g u a je e le m e n t o s q u e a lo la rg o d e lo s
a ñ o s h a id o d e m o s t rá n d o s e s o n m u y ú t ile s p a ra e l d e s a rro llo d e a p lica cio n e s y q u e
e n o t ro s le n g u a je s co m o Ja va o C+ + h a y q u e s im u la r, co m o u n t ip o b á s ico
decimal q u e p e rm it a re a liza r o p e ra cio n e s d e a lt a p re cis ió n co n re a le s d e 1 2 8 b it s
( m u y ú t il e n e l m u n d o fin a n cie ro ) , la in clu s ió n d e u n a in s t ru cció n foreach q u e
p e rm it a re co rre r co le ccio n e s co n fa cilid a d y e s a m p lia b le a t ip o s d e fin id o s p o r e l
u s u a rio , la in clu s ió n d e u n t ip o b á s ico string p a ra re p re s e n t a r ca d e n a s o la
d is t in ció n d e u n t ip o bool e s p e cífico p a ra re p re s e n t a r va lo re s ló g ico s .

● Orie n t a c ió n a o b je t o s : Co m o t o d o le n g u a je d e p ro g ra m a ció n d e p ro p ó s it o
g e n e ra l a ct u a l, C# e s u n le n g u a je o rie n t a d o a o b je t o s , a u n q u e e s o e s m á s b ie n
u n a ca ra ct e rís t ica d e l CTS q u e d e C# . Un a d ife re n cia d e e s t e e n fo q u e o rie n t a d o a
o b je t o s re s p e ct o a l d e o t ro s le n g u a je s co m o C+ + e s q u e e l d e C# e s m á s p u ro e n
t a n t o q u e n o a d m it e n n i fu n cio n e s n i va ria b le s g lo b a le s s in o q u e t o d o e l có d ig o y
d a t o s h a n d e d e fin irs e d e n t ro d e d e fin icio n e s d e t ip o s d e d a t o s , lo q u e re d u ce
p ro b le m a s p o r co n flict o s d e n o m b re s y fa cilit a la le g ib ilid a d d e l có d ig o .

C# s o p o rt a t o d a s la s ca ra ct e rís t ica s p ro p ia s d e l p a ra d ig m a d e p ro g ra m a ció n o rie n t a d a a


o b je t o s : e n c a p s u la c ió n , h e re n c ia y p o lim o rfis m o .

En lo re fe re n t e a la e n ca p s u la ció n e s im p o rt a n t e s e ñ a la r q u e a p a rt e d e lo s t íp ico s
m o d ifica d o re s public, private y protected, C# a ñ a d e u n cu a rt o m o d ifica d o r lla m a d o

http://www.programacion.com/tutorial.csharp.3.html (2 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

internal, q u e p u e d e co m b in a rs e co n protected e in d ica q u e a l e le m e n t o a cu ya


d e fin ició n p re ce d e s ó lo p u e d e a cce d e rs e d e s d e s u m is m o e n s a m b la d o .

Re s p e ct o a la h e re n cia - a d ife re n cia d e C+ + y a l ig u a l q u e Ja va - C# s ó lo a d m it e h e re n cia


s im p le d e cla s e s ya q u e la m ú lt ip le p ro vo ca m á s q u e b ra d e ro s d e ca b e za q u e fa cilid a d e s y e n
la m a yo ría d e lo s ca s o s s u u t ilid a d p u e d e s e r s im u la d a co n fa cilid a d m e d ia n t e h e re n cia
m ú lt ip le d e in t e rfa ce s . De t o d o s m o d o s , e s t o vu e lve a s e r m á s b ie n u n a ca ra ct e rís t ica p ro p ia
d e l CTS q u e d e C# .

Po r o t ro la d o y a d ife re n cia d e Ja va , e n C# s e h a o p t a d o p o r h a ce r q u e t o d o s lo s m é t o d o s
s e a n p o r d e fe ct o s e lla d o s y q u e lo s re d e fin ib le s h a ya n d e m a rca rs e co n e l m o d ifica d o r
virtual ( co m o e n C+ + ) , lo q u e p e rm it e e vit a r e rro re s d e riva d o s d e re d e fin icio n e s
a ccid e n t a le s . Ad e m á s , u n e fe ct o s e cu n d a rio d e e s t o e s q u e la s lla m a d a s a lo s m é t o d o s s e rá n
m á s e ficie n t e s p o r d e fe ct o a l n o t e n e rs e q u e b u s ca r e n la t a b la d e fu n cio n e s virt u a le s la
im p le m e n t a ció n d e lo s m is m o s a la q u e s e h a d e lla m a r. Ot ro e fe ct o s e cu n d a rio e s q u e
p e rm it e q u e la s lla m a d a s a lo s m é t o d o s virt u a le s s e p u e d a n h a ce r m á s e ficie n t e m e n t e a l
co n t rib u ir a q u e e l t a m a ñ o d e d ich a t a b la s e re d u zca .

● Orie n t a c ió n a c o m p o n e n t e s : La p ro p ia s in t a xis d e C# in clu ye e le m e n t o s p ro p io s


d e l d is e ñ o d e co m p o n e n t e s q u e o t ro s le n g u a je s t ie n e n q u e s im u la r m e d ia n t e
co n s t ru ccio n e s m á s o m e n o s co m p le ja s . Es d e cir, la s in t a xis d e C# p e rm it e d e fin ir
có m o d a m e n t e p ro p ie d a d e s ( s im ila re s a ca m p o s d e a cce s o co n t ro la d o ) , e v e n t o s
( a s o cia ció n co n t ro la d a d e fu n cio n e s d e re s p u e s t a a n o t ifica cio n e s ) o a t rib u t o s
( in fo rm a ció n s o b re u n t ip o o s u s m ie m b ro s )

● Ge s t ió n a u t o m á t ic a d e m e m o ria : Co m o ya s e co m e n t ó , t o d o le n g u a je d e . NET
t ie n e a s u d is p o s ició n e l re co le ct o r d e b a s u ra d e l CLR. Es t o t ie n e e l e fe ct o e n e l
le n g u a je d e q u e n o e s n e ce s a rio in clu ir in s t ru ccio n e s d e d e s t ru cció n d e o b je t o s . S in
e m b a rg o , d a d o q u e la d e s t ru cció n d e lo s o b je t o s a t ra vé s d e l re co le ct o r d e b a s u ra
e s in d e t e rm in is t a y s ó lo s e re a liza cu a n d o é s t e s e a ct ive - ya s e a p o r fa lt a d e
m e m o ria , fin a liza ció n d e la a p lica ció n o s o licit u d e xp lícit a e n e l fu e n t e - , C#
t a m b ié n p ro p o rcio n a u n m e ca n is m o d e lib e ra ció n d e re cu rs o s d e t e rm in is t a a t ra vé s
d e la in s t ru cció n using.

● S e g u rid a d d e t ip o s : C# in clu ye m e ca n is m o s q u e p e rm it e n a s e g u ra r q u e lo s
a cce s o s a t ip o s d e d a t o s s ie m p re s e re a lice n co rre ct a m e n t e , lo q u e p e rm it e e vit a
q u e s e p ro d u zca n e rro re s d ifícile s d e d e t e ct a r p o r a cce s o a m e m o ria n o
p e rt e n e cie n t e a n in g ú n o b je t o y e s e s p e cia lm e n t e n e ce s a rio e n u n e n t o rn o
g e s t io n a d o p o r u n re co le ct o r d e b a s u ra . Pa ra e llo s e t o m a n m e d id a s d e l t ip o :
❍ S ó lo s e a d m it e n c o n v e rs io n e s e n t re t ip o s c o m p a t ib le s . Es t o e s , e n t re u n
t ip o y a n t e ce s o re s s u yo s , e n t re t ip o s p a ra lo s q u e e xp lícit a m e n t e s e h a ya
d e fin id o u n o p e ra d o r d e co n ve rs ió n , y e n t re u n t ip o y u n t ip o h ijo s u yo d e l
q u e u n o b je t o d e l p rim e ro a lm a ce n a s e u n a re fe re n cia d e l s e g u n d o
( d o w n c a s t in g ) Ob via m e n t e , lo ú lt im o s ó lo p u e d e co m p ro b a rlo e n t ie m p o d e
e je cu ció n e l CLR y n o e l co m p ila d o r, p o r lo q u e e n re a lid a d e l CLR y e l
co m p ila d o r co la b o ra n p a ra a s e g u ra r la co rre cció n d e la s co n ve rs io n e s .
❍ No s e p u e d e n u s a r v a ria b le s n o in ic ia liz a d a s . El co m p ila d o r d a a lo s
ca m p o s u n va lo r p o r d e fe ct o co n s is t e n t e e n p o n e rlo s a ce ro y co n t ro la
m e d ia n t e a n á lis is d e l flu jo d e co n t ro l d e l fu e n t e q u e n o s e le a n in g u n a
va ria b le lo ca l s in q u e s e le h a ya a s ig n a d o p re via m e n t e a lg ú n va lo r.
❍ S e co m p ru e b a q u e t o d o a c c e s o a lo s e le m e n t o s d e u n a t a b la s e re a lice

http://www.programacion.com/tutorial.csharp.3.html (3 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

co n ín d ice s q u e s e e n cu e n t re n d e n t ro d e l ra n g o d e la m is m a .
❍ S e p u e d e co n t ro la r la p ro d u c c ió n d e d e s b o rd a m ie n t o s e n o p e ra cio n e s
a rit m é t ica s , in fo rm á n d o s e d e e llo co n u n a e xce p ció n cu a n d o o cu rra . S in
e m b a rg o , p a ra co n s e g u irs e u n m a yo r re n d im ie n t o e n la a rit m é t ica e s t a s
co m p ro b a cio n e s n o s e h a ce n p o r d e fe ct o a l o p e ra r co n va ria b le s s in o s ó lo
co n co n s t a n t e s ( s e p u e d e n d e t e ct a r e n t ie m p o d e co m p ila ció n )
❍ A d ife re n cia d e Ja va , C# in clu ye d e le g a d o s , q u e s o n s im ila re s a lo s
p u n t e ro s a fu n cio n e s d e C+ + p e ro s ig u e n u n e n fo q u e o rie n t a d o a o b je t o s ,
p u e d e n a lm a ce n a r re fe re n cia s a va rio s m é t o d o s s im u lt á n e a m e n t e , y s e
co m p ru e b a q u e lo s m é t o d o s a lo s q u e a p u n t e n t e n g a n p a rá m e t ro s y va lo r d e
re t o rn o d e l t ip o in d ica d o a l d e fin irlo s .
❍ Pu e d e n d e fin irs e m é t o d o s q u e a d m it a n u n n ú m e ro in d e fin id o d e p a rá m e t ro s
d e u n cie rt o t ip o , y a d ife re n cia le n g u a je s co m o C/ C+ + , e n C# s ie m p re s e
co m p ru e b a q u e lo s va lo re s q u e s e le s p a s e n e n ca d a lla m a d a s e a n d e lo s
t ip o s a p ro p ia d o s .

● I n s t ru c c io n e s s e g u ra s : Pa ra e vit a r e rro re s m u y co m u n e s , e n C# s e h a n
im p u e s t o u n a s e rie d e re s t riccio n e s e n e l u s o d e la s in s t ru ccio n e s d e co n t ro l m á s
co m u n e s . Po r e je m p lo , la g u a rd a d e t o d a co n d ició n h a d e s e r u n a e xp re s ió n
co n d icio n a l y n o a rit m é t ica , co n lo q u e s e e vit a n e rro re s p o r co n fu s ió n d e l o p e ra d o r
d e ig u a ld a d ( ==) co n e l d e a s ig n a ció n ( =) ; y t o d o ca s o d e u n switch h a d e
t e rm in a r e n u n break o goto q u e in d iq u e cu á l e s la s ig u ie n t e a cció n a re a liza r, lo
q u e e vit a la e je cu ció n a ccid e n t a l d e ca s o s y fa cilit a s u re o rd e n a ció n .

● S is t e m a d e t ip o s u n ific a d o : A d ife re n cia d e C+ + , e n C# t o d o s lo s t ip o s d e d a t o s


q u e s e d e fin a n s ie m p re d e riva rá n , a u n q u e s e a d e m a n e ra im p lícit a , d e u n a cla s e
b a s e co m ú n lla m a d a S y s t e m . Ob je c t , p o r lo q u e d is p o n d rá n d e t o d o s lo s
m ie m b ro s d e fin id o s e n é s t a cla s e ( e s d e cir, s e rá n "o b je t o s ")

A d ife re n cia d e Ja va , e n C# e s t o t a m b ié n e s a p lica b le a lo s t ip o s d e d a t o s b á s ico s Ad e m á s ,


p a ra co n s e g u ir q u e e llo n o t e n g a u n a re p e rcu s ió n n e g a t iva e n s u n ive l d e re n d im ie n t o , s e h a
in clu id o u n m e ca n is m o t ra n s p a re n t e d e b o x in g y u n b o x in g co n e l q u e s e co n s ig u e q u e s ó lo
s e a n t ra t a d o s co m o o b je t o s cu a n d o la s it u a ció n lo re q u ie ra , y m ie n t ra s t a n t o p u e d e
a p licá rs e le s o p t im iza cio n e s e s p e cífica s .

El h e ch o d e q u e t o d o s lo s t ip o s d e l le n g u a je d e rive n d e u n a cla s e co m ú n fa cilit a


e n o rm e m e n t e e l d is e ñ o d e co le ccio n e s g e n é rica s q u e p u e d a n a lm a ce n a r o b je t o s d e cu a lq u ie r
t ip o .

● Ex t e n s ib ilid a d d e t ip o s b á s ic o s : C# p e rm it e d e fin ir, a t ra vé s d e e s t ru c t u ra s ,


t ip o s d e d a t o s p a ra lo s q u e s e a p liq u e n la s m is m a s o p t im iza cio n e s q u e p a ra lo s
t ip o s d e d a t o s b á s ico s . Es d e cir, q u e s e p u e d a n a lm a ce n a r d ire ct a m e n t e e n p ila
( lu e g o s u cre a ció n , d e s t ru cció n y a cce s o s e rá n m á s rá p id o s ) y s e a s ig n e n p o r va lo r
y n o p o r re fe re n cia . Pa ra co n s e g u ir q u e lo ú lt im o n o t e n g a e fe ct o s n e g a t ivo s a l
p a s a r e s t ru ct u ra s co m o p a rá m e t ro s d e m é t o d o s , s e d a la p o s ib ilid a d d e p a s a r
re fe re n cia s a p ila a t ra vé s d e l m o d ifica d o r d e p a rá m e t ro ref.

● Ex t e n s ib ilid a d d e o p e ra d o re s : Pa ra fa cilit a r la le g ib ilid a d d e l có d ig o y co n s e g u ir


q u e lo s n u e vo s t ip o s d e d a t o s b á s ico s q u e s e d e fin a n a t ra vé s d e la s e s t ru ct u ra s
e s t é n a l m is m o n ive l q u e lo s b á s ico s p re d e fin id o s e n e l le n g u a je , a l ig u a l q u e C+ +

http://www.programacion.com/tutorial.csharp.3.html (4 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

y a d ife re n cia d e Ja va , C# p e rm it e re d e fin ir e l s ig n ifica d o d e la m a yo ría d e lo s


o p e ra d o re s - in clu id o s lo s d e co n ve rs ió n , t a n t o p a ra co n ve rs io n e s im p lícit a s co m o
e xp lícit a s - cu a n d o s e a p liq u e n a d ife re n t e s t ip o s d e o b je t o s .

La s re d e fin icio n e s d e o p e ra d o re s s e h a ce n d e m a n e ra in t e lig e n t e , d e m o d o q u e a p a rt ir d e


u n a ú n ica d e fin ició n d e lo s o p e ra d o re s ++ y -- e l co m p ila d o r p u e d e d e d u cir a u t o m á t ica m e n t e
co m o e je cu t a rlo s d e m a n e ra p re fija s y p o s t ifja ; y d e fin ie n d o o p e ra d o re s s im p le s ( co m o +) , e l
co m p ila d o r d e d u ce có m o a p lica r s u ve rs ió n d e a s ig n a ció n co m p u e s t a ( +=) Ad e m á s , p a ra
a s e g u ra r la co n s is t e n cia , e l co m p ila d o r vig ila q u e lo s o p e ra d o re s co n o p u e s t o s ie m p re s e
re d e fin a n p o r p a re ja s ( p o r e je m p lo , s i s e re d e fin e ==, t a m b ié n h a y q u e re d e fin ir !=)

Ta m b ié n s e d a la p o s ib ilid a d , a t ra vé s d e l co n ce p t o d e in d iz a d o r, d e re d e fin ir e l s ig n ifica d o


d e l o p e ra d o r [] p a ra lo s t ip o s d e d a t o d e fin id o s p o r e l u s u a rio , co n lo q u e s e co n s ig u e q u e s e
p u e d a a cce d e r a l m is m o co m o s i fu e s e u n a t a b la . Es t o e s m u y ú t il p a ra t ra b a ja r co n t ip o s q u e
a ct ú e n co m o co le ccio n e s d e o b je t o s .

Ex t e n s ib ilid a d d e m o d ific a d o re s : C# o fre ce , a t ra vé s d e l co n ce p t o d e a t rib u t o s , la


p o s ib ilid a d d e a ñ a d ir a lo s m e t a d a t o s d e l m ó d u lo re s u lt a n t e d e la co m p ila ció n d e cu a lq u ie r
fu e n t e in fo rm a ció n a d icio n a l a la g e n e ra d a p o r e l co m p ila d o r q u e lu e g o p o d rá s e r co n s u lt a d a
e n t ie m p o e je cu ció n a t ra vé s d e la lib re ría d e re fle xió n d e . NET . Es t o , q u e m á s b ie n e s u n a
ca ra ct e rís t ica p ro p ia d e la p la t a fo rm a . NET y n o d e C# , p u e d e u s a rs e co m o u n m e ca n is m o
p a ra d e fin ir n u e vo s m o d ifica d o re s .

● Ve rs io n a b le : C# in clu ye u n a p o lít ic a d e v e rs io n a d o q u e p e rm it e cre a r n u e va s


ve rs io n e s d e t ip o s s in t e m o r a q u e la in t ro d u cció n d e n u e vo s m ie m b ro s p ro vo q u e n
e rro re s d ifícile s d e d e t e ct a r e n t ip o s h ijo s p re via m e n t e d e s a rro lla d o s y ya
e xt e n d id o s co n m ie m b ro s d e ig u a l n o m b re a lo s re cié n in t ro d u cid o s .

S i u n a cla s e in t ro d u ce u n n u e vo m é t o d o cu ya s re d e fin icio n e s d e b a n s e g u ir la re g la d e lla m a r


a la ve rs ió n d e s u p a d re e n a lg ú n p u n t o d e s u có d ig o , d ifícilm e n t e s e g u iría n e s t a re g la
m ie m b ro s d e s u m is m a s ig n a t u ra d e fin id o s e n cla s e s h ija s p re via m e n t e a la d e fin ició n d e l
m is m o e n la cla s e p a d re ; o s i in t ro d u ce u n n u e vo ca m p o co n e l m is m o n o m b re q u e a lg ú n
m é t o d o d e u n a cla s e h ija , la cla s e h ija d e ja rá d e fu n cio n a r. Pa ra e vit a r q u e e s t o o cu rra , e n
C# s e t o m a n d o s m e d id a s :

❍ S e o b lig a a q u e t o d a re d e fin ició n d e b a in clu ir e l m o d ifica d o r override, co n lo


q u e la ve rs ió n d e la cla s e h ija n u n ca s e ría co n s id e ra d a co m o u n a re d e fin ició n
d e la ve rs ió n d e m ie m b ro e n la cla s e p a d re ya q u e n o in clu iría override.
Pa ra e vit a r q u e p o r a ccid e n t e u n p ro g ra m a d o r in clu ya e s t e m o d ifica d o r, s ó lo
s e p e rm it e in clu irlo e n m ie m b ro s q u e t e n g a n la m is m a s ig n a t u ra q u e
m ie m b ro s m a rca d o s co m o re d e fin ib le s m e d ia n t e e l m o d ifica d o r virtual. As í
a d e m á s s e e vit a e l e rro r t a n fre cu e n t e e n Ja va d e cre e rs e h a b e r re d e fin id o
u n m ie m b ro , p u e s s i e l m ie m b ro co n override n o e xis t e e n la cla s e p a d re s e
p ro d u cirá u n e rro r d e co m p ila ció n .
❍ S i n o s e co n s id e ra re d e fin ició n , e n t o n ce s s e co n s id e ra q u e lo q u e s e d e s e a e s
o cu lt a r e l m é t o d o d e la cla s e p a d re , d e m o d o q u e p a ra la cla s e h ija s e a co m o
s i n u n ca h u b ie s e e xis t id o . El co m p ila d o r a vis a rá d e e s t a d e cis ió n a t ra vé s d e
u n m e n s a je d e a vis o q u e p u e d e s u p rim irs e in clu ye n d o e l m o d ifica d o r new e n
la d e fin ició n d e l m ie m b ro e n la cla s e h ija p a ra a s í in d ica rle e xp lícit a m e n t e la
in t e n ció n d e o cu lt a ció n .

http://www.programacion.com/tutorial.csharp.3.html (5 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

● Efic ie n t e : En p rin cip io , e n C# t o d o e l có d ig o in clu ye n u m e ro s a s re s t riccio n e s p a ra


a s e g u ra r s u s e g u rid a d y n o p e rm it e e l u s o d e p u n t e ro s . S in e m b a rg o , y a
d ife re n cia d e Ja va , e n C# e s p o s ib le s a lt a rs e d ich a s re s t riccio n e s m a n ip u la n d o
o b je t o s a t ra vé s d e p u n t e ro s . Pa ra e llo b a s t a m a rca r re g io n e s d e có d ig o co m o
in s e g u ra s ( m o d ifica d o r unsafe) y p o d rá n u s a rs e e n e lla s p u n t e ro s d e fo rm a s im ila r
a có m o s e h a ce e n C+ + , lo q u e p u e d e re s u lt a r vit a l p a ra s it u a cio n e s d o n d e s e
n e ce s it e u n a e ficie n cia y ve lo cid a d p ro ce s a m ie n t o m u y g ra n d e s .

● Co m p a t ib le : Pa ra fa cilit a r la m ig ra ció n d e p ro g ra m a d o re s , C# n o s ó lo m a n t ie n e
u n a s in t a xis m u y s im ila r a C, C+ + o Ja va q u e p e rm it e in clu ir d ire ct a m e n t e e n
có d ig o e s crit o e n C# fra g m e n t o s d e có d ig o e s crit o e n e s t o s le n g u a je s , s in o q u e e l
CLR t a m b ié n o fre ce , a t ra vé s d e lo s lla m a d o s P la t fo rm I n v o c a t io n S e rv ic e s
( P I n v o k e ) , la p o s ib ilid a d d e a cce d e r a có d ig o n a t ivo e s crit o co m o fu n cio n e s
s u e lt a s n o o rie n t a d a s a o b je t o s t a le s co m o la s DLLs d e la API Win 3 2 . Nó t e s e q u e la
ca p a cid a d d e u s a r p u n t e ro s e n có d ig o in s e g u ro p e rm it e q u e s e p u e d a a cce d e r co n
fa cilid a d a e s t e t ip o d e fu n cio n e s , ya q u e é s t a s m u ch a s ve ce s e s p e ra n re cib ir o
d e vu e lve n p u n t e ro s .

Ta m b ié n e s p o s ib le a cce d e r d e s d e có d ig o e s crit o e n C# a o b je t o s COM. Pa ra fa cilit a r e s t o , e l


. NET Fra m e w o rk S DK in clu ye u n a h e rra m ie n t a s lla m a d a s tlbimp y regasm m e d ia n t e la s
q u e e s p o s ib le g e n e ra r a u t o m á t ica m e n t e cla s e s p ro xy q u e p e rm it a n , re s p e ct iva m e n t e , u s a r
o b je t o s COM d e s d e . NET co m o s i d e o b je t o s . NET s e t ra t a s e y re g is t ra r o b je t o s . NET p a ra s u
u s o d e s d e COM.

Fin a lm e n t e , t a m b ié n s e d a la p o s ib ilid a d d e u s a r co n t ro le s Act ive X d e s d e có d ig o . NET y


vice ve rs a . Pa ra lo p rim e ro s e u t iliza la u t ilid a d a x im p , m ie n t ra s q u e p a ra lo s e g u n d o s e u s a
la ya m e n cio n a d a re g a s m .

Es c rit u ra d e a p lic a c io n e s

Ap lic a c ió n b á s ic a ¡Ho la Mu n d o !

Bá s ica m e n t e u n a a p lica ció n e n C# p u e d e ve rs e co m o u n co n ju n t o d e u n o o m á s fich e ro s d e có d ig o


fu e n t e co n la s in s t ru ccio n e s n e ce s a ria s p a ra q u e la a p lica ció n fu n cio n e co m o s e d e s e a y q u e s o n
p a s a d o s a l co m p ila d o r p a ra q u e g e n e re u n e je cu t a b le . Ca d a u n o d e e s t o s fich e ro s n o e s m á s q u e u n
fich e ro d e t e xt o p la n o e s crit o u s a n d o ca ra ct e re s Un ico d e y s ig u ie n d o la s in t a xis p ro p ia d e C# .

Co m o p rim e r co n t a ct o co n e l le n g u a je , n a d a m e jo r q u e e l t íp ico p ro g ra m a d e in icia ció n "¡Ho la


Mu n d o !" q u e lo ú n ico q u e h a ce a l e je cu t a rs e e s m o s t ra r p o r p a n t a lla e l m e n s a je ¡Ho la Mu n d o ! S u
có d ig o e s :

1: class HolaMundo
2: {
3: static void Main()
4: {
5: System.Console.WriteLine("¡Hola Mundo!");
6: }
7: }

To d o e l có d ig o e s crit o e n C# s e h a d e e s crib ir d e n t ro d e u n a d e fin ició n d e cla s e , y lo q u e e n la lín e a


1 : s e d ice e s q u e s e va a d e fin ir u n a cla s e ( c la s s ) d e n o m b re Ho la Mu n d o 1 cu ya d e fin ició n e s t a rá

http://www.programacion.com/tutorial.csharp.3.html (6 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

co m p re n d id a e n t re la lla ve d e a p e rt u ra d e la lín e a 2 : y s u co rre s p o n d ie n t e lla ve d e cie rre e n la lín e a


lín e a 7 :

De n t ro d e la d e fin ició n d e la cla s e ( lín e a 3 :) s e d e fin e u n m é t o d o d e n o m b re Ma in cu yo có d ig o e s e l


in d ica d o e n t re la lla ve d e a p e rt u ra d e la lín e a 4 : y s u re s p e ct iva lla ve d e cie rre ( lín e a 6 :) Un m é t o d o
n o e s m á s q u e u n co n ju n t o d e in s t ru ccio n e s a la s q u e s e le s a s o cia u n n o m b re , d e m o d o q u e p a ra
p o s t e rio rm e n t e e je cu t a rla s b a s t e re fe re n cia rla s p o r s u n o m b re e n ve z d e t e n e r q u e re e s crib irla s .

La p a rt ícu la q u e a n t e ce d e a l n o m b re d e l m é t o d o in d ica cu á l e s e l t ip o d e va lo r q u e s e d e vu e lve t ra s


la e je cu ció n d e l m é t o d o , y e n e s t e ca s o e s void q u e s ig n ifica q u e n o s e d e vu e lve n a d a . Po r s u
p a rt e , lo s p a ré n t e s is q u e s e co lo ca d o t ra s e l n o m b re d e l m é t o d o in d ica n cu á le s s o n lo s p a rá m e t ro s
é s t e t o m a , y co m o e n e s t e ca s o e s t á n va cío s e llo s ig n ifica q u e e l m é t o d o n o t o m a p a rá m e t ro s . Lo s
p a rá m e t ro s d e u n m é t o d o p e rm it e n va ria r e l re s u lt a d o d e s u e je cu ció n s e g ú n lo s va lo re s q u e s e le s
d é e n ca d a lla m a d a .

La p a la b ra static q u e a n t e ce d e a la d e cla ra ció n d e l t ip o d e va lo r d e vu e lt o e s u n m o d ific a d o r d e l


s ig n ifica d o d e la d e cla ra ció n d e m é t o d o q u e in d ica q u e e l m é t o d o e s t á a s o cia d o a la cla s e d e n t ro d e
la q u e s e d e fin e y n o a lo s o b je t o s q u e s e cre e n a p a rt ir d e e lla . Ma in ( ) e s lo q u e e s d e n o m in a e l
p u n t o d e e n t ra d a d e la a p lica ció n , q u e n o e s m á s q u e e l m é t o d o p o r e l q u e co m e n za rá s u
e je cu ció n . Ne ce s it a d e l m o d ifica d o r static p a ra e vit a r q u e p a ra lla m a rlo h a ya q u e cre a r a lg ú n
o b je t o d e la cla s e d o n d e s e h a ya d e fin id o .

Fin a lm e n t e , la lín e a 5 : co n t ie n e la in s t ru cció n co n e l có d ig o a e je cu t a r, q u e lo q u e s e h a ce e s


s o licit a r la e je cu ció n d e l m é t o d o WriteLine() d e la cla s e Console d e fin id a e n e l e s p a cio d e
n o m b re s System p a s á n d o le co m o p a rá m e t ro la ca d e n a d e t e xt o co n e l co n t e n id o ¡Ho la Mu n d o !
Nó t e s e q u e la s ca d e n a s d e t e xt o s s o n s e cu e n cia s d e ca ra ct e re s d e lim it a d a s p o r co m illa s d o b le s
a u n q u e d ich a s co m illa s n o fo rm a n p a rt e d e la ca d e n a . Po r s u p a rt e , u n e s p a cio d e n o m b re s p u e d e
co n s id e ra rs e q u e e s a lg o s im ila r p a ra la s cla s e s a lo q u e u n d ire ct o rio e s p a ra lo s fich e ro s ; e s d e cir,
e s u n a fo rm a d e a g ru p a rla s .

El m é t o d o WriteLine() s e u s a rá m u y a m e n u d o e n lo s p ró xim o s t e m a s , p o r lo q u e e s co n ve n ie n t e
s e ñ a la r a h o ra q u e u n a fo rm a d e lla m a rlo q u e s e u t iliza rá e n re p e t id a s o ca s io n e s co n s is t e e n p a s a rle
u n n ú m e ro in d e fin id o d e o t ro s p a rá m e t ro s d e cu a lq u ie r t ip o e in clu ir e n e l p rim e ro s u b ca d e n a s d e la
fo rm a {i}. Co n e llo s e co n s ig u e q u e s e m u e s t re p o r la ve n t a n a d e co n s o la la ca d e n a q u e s e le p a s a
co m o p rim e r p a rá m e t ro p e ro s u s t it u yé n d o le la s s u b ca d e n a s {i} p o r e l va lo r co n ve rt id o e n ca d e n a
d e t e xt o d e l p a rá m e t ro q u e o cu p e la p o s ició n i+ 2 e n la lla m a d a a WriteLine(). Po r e je m p lo , la
s ig u ie n t e in s t ru cció n m o s t ra ría Te n g o 5 a ñ o s p o r p a n t a lla s i x va lie s e 5 :

System.Console.WriteLine("Tengo {0} años", x);

Pa ra in d ica r có m o co n ve rt ir ca d a o b je t o e n u n ca d e n a d e t e xt o b a s t a re d e fin ir s u m é t o d o
ToString(), a u n q u e e s t o e s a lg o q u e n o s e ve rá h a s t a e l Te m a 5 : Cla s e s .

An t e s d e s e g u ir e s im p o rt a n t e re s a lt a r q u e C# e s s e n s ib le a la s m a yú s cu la s , lo s q u e s ig n ifica q u e n o
d a ig u a l la ca p it a liza ció n co n la q u e s e e s crib a n lo s id e n t ifica d o re s . Es d e cir, n o e s lo m is m o e s crib ir
Co n s o le q u e COn s o le o CONS OLE, y s i s e h a ce d e a lg u n a d e la s d o s ú lt im a s fo rm a s e l co m p ila d o r
p ro d u cirá u n e rro r d e b id o a q u e e n e l e s p a cio d e n o m b re s System n o e xis t e n in g u n a cla s e co n
d ich o s n o m b re s . En e s t e s e n t id o , ca b e s e ñ a la r q u e u n e rro r co m ú n e n t re p ro g ra m a d o re s
a co s t u m b ra d o s a Ja va e s lla m a r a l p u n t o d e e n t ra d a m a in e n ve z d e Ma in , lo q u e p ro vo ca u n e rro r
a l co m p ila r e je cu t a b le s e n t a n t o q u e e l co m p ila d o r n o d e t e ct a rá n in g u n a d e fin ició n d e p u n t o d e
e n t ra d a .

http://www.programacion.com/tutorial.csharp.3.html (7 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

P u n t o s d e e n t ra d a

Ya s e h a d ich o q u e e l p u n t o d e e n t ra d a d e u n a a p lica ció n e s u n m é t o d o d e n o m b re Ma in q u e


co n t e n d rá e l có d ig o p o r d o n d e s e h a d e in icia r la e je cu ció n d e la m is m a . Ha s t a a h o ra s ó lo s e h a
vis t o u n a ve rs ió n d e Main() q u e n o t o m a p a rá m e t ro s y t ie n e co m o t ip o d e re t o rn o void, p e ro e n
re a lid a d t o d a s s u s p o s ib le s ve rs io n e s s o n :

static void Main()


static int Main()
static int Main(string[] args)
static void Main(string[] args)

Co m o s e ve , h a y ve rs io n e s d e Main() q u e d e vu e lve n u n va lo r d e t ip o in t . Un in t n o e s m á s q u e u n
t ip o d e d a t o s ca p a z d e a lm a ce n a r va lo r e n t e ro s co m p re n d id o s e n t re - 2 . 1 4 7 1 4 8 3 . 6 4 8 y
2 . 1 4 7 1 4 8 3 . 6 4 7 , y e l n ú m e ro d e vu e lt o p o r Main() s e ría in t e rp re t a d o co m o có d ig o d e re t o rn o d e la
a p lica ció n . És t e va lo r s u e le u s a rs e p a ra in d ica r s i la a p lica ció n a t e rm in a d o co n é xit o ( g e n e ra lm e n t e
va lo r 0 ) o n o ( va lo r s e g ú n la ca u s a d e la t e rm in a ció n a n o rm a l) , y e n e l Te m a 8 : Mé t o d o s s e
e xp lica rá co m o d e vo lve r va lo re s .

Ta m b ié n h a y ve rs io n e s d e Main() q u e t o m a n u n p a rá m e t ro d o n d e s e a lm a ce n a rá la lis t a d e
a rg u m e n t o s co n lo s q u e s e lla m ó a la a p lica ció n , p o r lo q u e s ó lo e s ú t il u s a r e s t a s ve rs io n e s d e l
p u n t o d e e n t ra d a s i la a p lica ció n va a u t iliza r d ich o s a rg u m e n t o s p a ra a lg o . El t ip o d e e s t e
p a rá m e t ro e s string[], lo q u e s ig n ifica q u e e s u n a t a b la d e ca d e n a s d e t e xt o ( e n e l Te m a 5 :
Ca m p o s s e e xp lica rá d e t e n id a m e n t e q u é s o n la s t a b la s y la s ca d e n a s ) , y s u n o m b re - q u e e s e l q u e
h a b rá d e u s a rs e d e n t ro d e l có d ig o d e Main() p a ra h a ce rle re fe re n cia - e s args e n e l e je m p lo ,
a u n q u e p o d ría d á rs e le cu a lq u ie r o t ro

Co m p ila c ió n e n lín e a d e c o m a n d o s

Un a ve z e s crit o e l có d ig o a n t e rio r co n a lg ú n e d it o r d e t e xt o s - co m o e l Blo c d e N o t a s d e Win d o ws -


y a lm a ce n a d o e n fo rm a t o d e t e xt o p la n o e n u n fich e ro HolaMundo.cs, p a ra co m p ila rlo b a s t a a b rir
u n a ve n t a n a d e co n s o la ( MS - DOS e n Win d o ws ) , co lo ca rs e e n e l d ire ct o rio d o n d e s e e n cu e n t re y
p a s á rs e lo co m o p a rá m e t ro a l co m p ila d o r a s í:

csc HolaMundo.cs

csc.exe e s e l co m p ila d o r d e C# in clu id o e n e l . NET Fra m e wo rk S DK p a ra Win d o ws d e Micro s o ft , y


e s p o s ib le lla m a rlo d e s d e cu a lq u ie r d ire ct o rio e n t a n t o q u e a l in s t a la rlo s e a ñ a d e u n a re fe re n cia a l
m is m o e n e l p a t h . S i u t iliza o t ro s co m p ila d o re s d e C# p u e d e q u e va rie la fo rm a e n q u e s e re a lice la
co m p ila ció n , p o r lo q u e lo q u e a q u í s e e xp lica e n p rin cip io s ó lo p o d ría s e r vá lid o p a ra e l co m p ila d o r
d e Micro s o ft p a ra Win d o ws .

Tra s la co m p ila ció n s e o b t e n d ría u n e je cu t a b le lla m a d o Ho la Mu n d o . e xe cu ya e je cu ció n p ro d u ciría la


s ig u ie n t e s a lid a p o r la ve n t a n a d e co n s o la :

¡Hola Mundo!

S i la a p lica ció n q u e s e va ya a co m p ila r n o u t iliza s e la ve n t a n a d e co n s o la p a ra m o s t ra r s u s a lid a


s in o u n a in t e rfa z g rá fica d e ve n t a n a s , e n t o n ce s h a b ría q u e co m p ila rla p a s a n d o a l co m p ila d o r la
o p ció n / t co n e l va lo r w in e x e a n t e s d e l n o m b re d e l fich e ro a co m p ila r. S i n o s e h icie s e a s í s e
a b ríría la ve n t a n a d e co n s o la ca d a ve z q u e e je cu t a s e la a p lica ció n d e ve n t a n a s , lo q u e s u e le s e r

http://www.programacion.com/tutorial.csharp.3.html (8 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

in d e s e a b le e n e s t e t ip o d e a p lica cio n e s . As í, p a ra co m p ila r Ve n t a n a s . cs co m o e je cu t a b le d e


ve n t a n a s s e ría co n ve n ie n t e e s crib ir:

csc /t:winexe Ventanas.cs

Nó t e s e q u e a u n q u e e l n o m b re w in e x e d é la s e n s a ció n d e q u e e s t e va lo r p a ra la o p ció n / t s ó lo
p e rm it e g e n e ra r e je cu t a b le s d e ve n t a n a s , e n re a lid a d lo q u e p e rm it e e s g e n e ra r e je cu t a b le s s in
ve n t a n a d e co n s o la a s o cia d a . Po r t a n t o , t a m b ié n p u e d e u s a rs e p a ra g e n e ra r e je cu t a b le s q u e n o
t e n g a n n in g u n a in t e rfa z a s o cia d a , n i d e co n s o la n i g rá fica .

S i e n lu g a r d e u n e je cu t a b le - ya s e a d e co n s o la o d e ve n t a n a s - s e d e s e a o b t e n e r u n a lib re ría ,
e n t o n ce s a l co m p ila r h a y q u e p a s a r a l co m p ila d o r la o p ció n / t co n e l va lo r lib ra ry . Po r e je m p lo ,
s ig u ie n d o co n e l e je m p lo in icia l h a b ría q u e e s crib ir:

csc /t:library HolaMundo.cs

En e s t e ca s o s e g e n e ra ría u n fich e ro Ho la Mu n d o . d ll cu yo s t ip o s d e d a t o s p o d ría n u t iliza rs e d e s d e


o t ro s fu e n t e s p a s a n d o a l co m p ila d o r u n a re fe re n cia a lo s m is m o s m e d ia n t e la o p ció n / r. Po r
e je m p lo , p a ra co m p ila r co m o e je cu t a b le u n fu e n t e A. cs q u e u s e la cla s e Ho la Mu n d o d e la lib re ría
Ho la Mu n d o . d ll s e e s crib iría :

csc /r:HolaMundo.dll A.cs

En g e n e ra l / r p e rm it e re fe re n cia r a t ip o s d e fin id o s e n cu a lq u ie r e n s a m b la d o , p o r lo q u e e l va lo r q u e
s e le in d iq u e t a m b ié n p u e d e s e r e l n o m b re d e u n e je cu t a b le . Ad e m á s , e n ca d a co m p ila ció n e s
p o s ib le re fe re n cia r m ú lt ip le s e n s a m b la d o s ya s e a in clu iye n d o la o p ció n / r u n a ve z p o r ca d a u n o o
in clu iye n d o m ú lt ip le s re fe re n cia s e n u n a ú n ica o p ció n / r u s a n d o co m a s o p u n t o s y co m a s co m o
s e p a ra d o re s . Po r e je m p lo , la s s ig u ie n t e s t re s lla m a d a s a l co m p ila d o r s o n e q u iva le n t e s :

csc /r:HolaMundo.dll;Otro.dll;OtroMás.exe A.cs

csc /r:HolaMundo.dll,Otro.dll,OtroMás.exe A.cs

csc /t:HolaMundo.dll /r:Otro.dll /r:OtroMás.exe A.cs

Ha y q u e s e ñ a la r q u e a u n q u e n o s e in d iq u e n a d a , e n t o d a co m p ila ció n s ie m p re s e re fe re n cia p o r


d e fe ct o a la lib re ría m s c o rlib . d ll d e la BCL, q u e in clu ye lo s t ip o s d e u s o m á s fre cu e n t e . S i s e u s a n
t ip o s d e la BCL n o in clu id o s e n e lla h a b rá q u e in clu ir a l co m p ila r re fe re n cia s a la s lib re ría s d o n d e
e s t é n d e fin id o s ( e n la d o cu m e n t a ció n d e l S DK s o b re ca d a t ip o d e la BCL p u e d e e n co n t ra r
in fo rm a ció n s o b re d o n d e s e d e fin ió )

Ta n t o la s lib re ría s co m o lo s e je cu t a b le s s o n e n s a m b la d o s . Pa ra g e n e ra r u n m ó d u lo d e có d ig o q u e n o
fo rm e p a rt e d e n in g ú n e n s a m b la d o s in o q u e co n t e n g a d e fin icio n e s d e t ip o s q u e p u e d a n a ñ a d irs e a
e n s a m b la d o s q u e s e co m p ile n p o s t e rio rm e n t e , e l va lo r q u e h a d e d a rs e a l co m p ila r a la o p ció n / t e s
m o d u le . Po r e je m p lo :

csc /t:module HolaMundo.cs

Co n la in s t ru cció n a n t e rio r s e g e n e ra ría u n m ó d u lo lla m a d o Ho la Mu n d o . n e t m o d u le q u e p o d ría s e r


a ñ a d id o a co m p ila cio n e s d e e n s a m b la d o s in clu yé n d o lo co m o va lo r d e la o p ció n / a d d m o d u le . Po r
e je m p lo , p a ra a ñ a d ir e l m ó d u lo a n t e rio r a la co m p ila ció n d e l fu e n t e lib re ría Lib . cs co m o lib re ría s e
e s crib iría :

http://www.programacion.com/tutorial.csharp.3.html (9 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

csc /t:library /addmodule:HolaMundo.netmodule Lib.cs

Au n q u e h a s t a a h o ra t o d a s la s co m p ila cio n e s d e e je m p lo s e h a n re a liza d o u t iliza n d o u n ú n ico fich e ro


d e có d ig o fu e n t e , e n re a lid a d n a d a im p id e q u e s e p u e d a n u t iliza r m á s . Po r e je m p lo , p a ra co m p ila r
lo s fich e ro s A. cs y B. cs e n u n a lib re ría A. d ll s e e je cu t a ría :

csc /t:library A.cs B.cs

Nó t e s e q u e e l n o m b re q u e p o r d e fe ct o s e d é a l e je cu t a b le g e n e ra d o s ie m p re e s ig u a l a l d e l p rim e r
fu e n t e e s p e cifica d o p e ro co n la e xt e n s ió n p ro p ia d e l t ip o d e co m p ila ció n re a liza d a ( . e x e p a ra
e je cu t a b le s , . d ll p a ra lib re ría s y . n e t m o d u le p a ra m ó d u lo s ) S in e m b a rg o , p u e d e e s p e cificá rs e co m o
va lo r e n la o p ció n / o u t d e l co m p ila d o r cu a lq u ie r o t ro t a l y co m o m u e s t ra e l s ig u ie n t e e je m p lo q u e
co m p ila e l fich e ro A. cs co m o u n a lib re ría d e n o m b re Lib . e xe :

csc /t:library /out:Lib.exe A.cs

Vé a s e q u e a u n q u e s e h a ya d a d o u n n o m b re t e rm in a d o e n . e x e a l fich e ro re s u lt a n t e , é s t e s ig u e
s ie n d o u n a lib re ría y n o u n e je cu t a b le e in t e n t a r e je cu t a rlo p ro d u ciría u n m e n s a je d e e rro r.
Ob via m e n t e n o t ie n e m u ch o s e n t id o d a rle e s a e xt e n s ió n , y s ó lo s e le h a d a d o e n e s t e e je m p lo p a ra
d e m o s t ra r q u e , a u n q u e re co m e n d a b le , la e xt e n s ió n d e l fich e ro n o t ie n e p o rq u é co rre s p o n d e rs e
re a lm e n t e co n e l t ip o d e fich e ro d e l q u e s e t ra t e .

A la h o ra d e e s p e cifica r fich e ro s a co m p ila r t a m b ié n e s p u e d e n u t iliza r lo s ca ra ct e re s d e co m o d ín


t íp ico s d e l s is t e m a o p e ra t ivo . Po r e je m p lo , p a ra co m p ila r t o d o s lo s fich e ro s co n e xt e n s ió n . cs d e l
d ire ct o rio a ct u a l e n u n a lib re ría lla m a d a Va rio s . d ll s e h a ría :

csc /t:library /out:varios.dll *.cs

Co n lo q u e h a y q u e t e n e r cu id a d o , y e n e s p e cia l a l co m p ila r va rio s fu e n t e s , e s co n q u e n o s e


co m p ile n a la ve z m á s d e u n t ip o d e d a t o co n p u n t o d e e n t ra d a , p u e s e n t o n ce s e l co m p ila d o r n o
s a b ría cu á l u s a r co m o in icio d e la a p lica ció n . Pa ra o rie n t a rlo , p u e d e e s p e cifica rs e co m o va lo r d e la
o p ció n / m a in e l n o m b re d e l t ip o q u e co n t e n g a e l Ma in ( ) h a u s a r co m o p u n t o d e e n t ra d a . As í, p a ra
co m p ila r lo s fich e ro s A. cs y B. cs e n u n e je cu t a b le cu yo p u n t o d e e n t ra d a s e a e l d e fin id o e n e l t ip o
Prin cip a l, h a b ría q u e e s crib ir:

csc /main:Principal A.cs B.cs

Ob via m e n t e , p a ra q u e e s t o fu n cio n e A. cs o B. cs t ie n e q u e co n t e n e r a lg u n a d e fin ició n d e a lg ú n t ip o


lla m a d o Prin cip a l co n u n ú n ico m é t o d o vá lid o co m o p u n t o d e e n t ra d a . ( o b via m e n t e s i co n t ie n e
va ria s s e vo lve ría a t e n e r e l p ro b le m a d e n o s a b e r cu á l u s a r)

Co m p ila c ió n c o n Vis u a l S t u d io . N ET

Pa ra co m p ila r u n a a p lica ció n e n Vis u a l S t u d io . NET p rim e ro h a y q u e in clu irla d e n t ro d e a lg ú n


p ro ye ct o . Pa ra e llo b a s t a p u ls a r e l b o t ó n N e w P ro je c t e n la p á g in a d e in icio q u e s e m u e s t ra n a d a
m á s a rra n ca r d ich a h e rra m ie n t a , t ra s lo q u e s e o b t e n d rá u n a p a n t a lla co n e l a s p e ct o m o s t ra d o e n la
I lu s t ra c ió n 1 .

En e l re cu a d ro d e la ve n t a n a m o s t ra d a e t iq u e t a d o co m o P ro je c t Ty p e s s e h a d e s e le ccio n a r e l t ip o
d e p ro ye ct o a cre a r. Ob via m e n t e , s i s e va a t ra b a ja r e n C# la o p ció n q u e h a b rá q u e e s co g e r e n la
m is m a s e rá s ie m p re Vis u a l C# Pro je ct s .

http://www.programacion.com/tutorial.csharp.3.html (10 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

En e l re cu a d ro Te m p la t e s s e h a d e s e le ccio n a r la p la n t illa co rre s p o n d ie n t e a l s u b t ip o d e p ro ye ct o


d e n t ro d e l t ip o in d ica d o e n P ro je c t Ty p e s q u e s e va a re a liza r. Pa ra re a liza r u n e je cu t a b le d e
co n s o la , co m o e s n u e s t ro ca s o , h a y q u e s e le ccio n a r e l ico n o e t iq u e t a d o co m o Co n s o le Ap p lica t io n .
S i s e q u is ie s e re a liza r u n a lib re ría h a b ría q u e s e le ccio n a r Cla s s Lib ra ry, y s i s e q u is ie s re a liza r u n
e je cu t a b le d e ve n t a n a s h a b ría q u e s e le ccio n a r Win d o ws Ap p lica t io n . Nó t e s e q u e n o s e o fre ce
n in g u n a p la n t illa p a ra re a liza r m ó d u lo s , lo q u e s e d e b e a q u e d e s d e Vis u a l S t u d io . NET n o p u e d e n
cre a rs e .

Po r ú lt im o , e n e l re cu a d ro d e t e xt o N a m e s e h a d e e s crib ir e l n o m b re a d a r a l p ro ye ct o y e n
Lo c a t io n e l d e l d ire ct o rio b a s e a s o cia d o a l m is m o . Nó t e s e q u e b a jo d e Lo c a t io n a p a re ce rá u n
m e n s a je in fo rm a n d o s o b re cu a l s e rá e l d ire ct o rio d o n d e fin a lm e n t e s e a lm a ce n a rá n lo s a rch ivo s d e l
p ro ye ct o , q u e s e rá e l re s u lt a n t e d e co n ca t e n a r la ru t a e s p e cifica d a p a ra e l d ire ct o rio b a s e y e l
n o m b re d e l p ro ye ct o .

Un a ve z co n fig u ra d a s t o d a s e s t a s o p cio n e s , a l p u ls a r b o t ó n OK Vis u a l S t u d io cre a rá t o d a la


in fra e s t ru ct u ra a d e cu a d a p a ra e m p e za r a t ra b a ja r có m o d a m e n t e e n e l p ro ye ct o . Co m o p u e d e
a p re cia rs e e n la I lu s t ra c ió n 2 , e s t a in fra e s t ru ct u ra co n s is t irá e n la g e n e ra ció n d e u n fu e n t e q u e
s e rvirá d e p la n t illa p a ra la re a liza ció n d e p ro ye ct o s d e l t ip o e le g id o ( e n n u e s t ro ca s o , a p lica cio n e s d e
co n s o la e n C# ) :

http://www.programacion.com/tutorial.csharp.3.html (11 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

A p a rt ir d e e s t a p la n t illa , e s crib ir e l có d ig o d e la a p lica ció n d e e je m p lo e s t a n s e n cillo co n


s im p le m e n t e t e cle a r System.Console.WriteLine("¡Hola Mundo!") d e n t ro d e la d e fin ició n
d e l m é t o d o Main() cre a d a p o r Vis u a l S t u d io . NET. Cla ro e s t á , o t ra p o s ib ilid a d e s b o rra r t o d a la
p la n t illa y s u s t it u irla p o r e l có d ig o p a ra Ho la Mu n d o m o s t ra d o a n t e rio rm e n t e .

S e h a g a co m o s e h a g a , p a ra co m p ila r y e je cu t a r t ra s e llo la a p lica ció n s ó lo h a y q u e p u ls a r


CTRL+ F5 o s e le ccio n a r D e b u g - > S t a rt W it h o u t D e b u g g in g e n e l m e n ú p rin cip a l d e Vis u a l
S t u d io . NET. Pa ra s ó lo co m p ila r e l p ro ye ct o , e n t o n ce s h a y q u e s e le ccio n a r Bu ild - > Re b u ild All. De
t o d a s fo rm a s , e n a m b o s ca s o s e l e je cu t a b le g e n e ra d o s e a lm a ce n a rá e n e l s u b d ire ct o rio Bin \ De b u g
d e l d ire ct o rio d e l p ro ye ct o .

En e l e xt re m o d e re ch o d e la ve n t a n a p rin cip a l d e Vis u a l S t u d io . NET p u e d e e n co n t ra r e l d e n o m in a d o


S o lu t io n Ex p lo re r ( s i n o lo e n cu e n t ra , s e le ccio n e Vie w - > S o lu t io n Ex p lo re r) , q u e e s u n a
h e rra m ie n t a q u e p e rm it e co n s u lt a r cu á le s s o n lo s a rch ivo s q u e fo rm a n e l p ro ye ct o . S i s e le ccio n a e n
é l e l ico n o co rre s p o n d ie n t e a l p ro ye ct o e n q u e e s t a m o s t ra b a ja n d o y p u ls a Vie w - > P ro p e rt y
P a g e s o b t e n d rá u n a h o ja d e p ro p ie d a d e s d e l p ro ye ct o co n e l a s p e ct o m o s t ra d o e n la I lu s t ra c ió n
3:

http://www.programacion.com/tutorial.csharp.3.html (12 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

Es t a ve n t a n a p e rm it e co n fig u ra r d e m a n e ra vis u a l la m a yo ría d e o p cio n e s co n la s q u e s e lla m a rá a l


co m p ila d o r e n lín e a d e co m a n d o s . Po r e je m p lo , p a ra ca m b ia r e l n o m b re d e l fich e ro d e s a lid a
( o p ció n / o u t ) s e in d ica s u n u e vo n o m b re e n e l cu a d ro d e t e xt o Co m m o n P ro p e rt ie s - > Ge n e ra l -
> As s e m b ly N a m e ; p a ra ca m b ia r e l t ip o d e p ro ye ct o a g e n e ra r ( o p ció n / t ) s e u t iliza Co m m o n
P ro p e rt ie s - > Ge n e ra l - > Ou t p u t Ty p e ( co m o ve rá s i in t e n t a ca m b ia rlo , n o e s p o s ib le g e n e ra r
m ó d u lo s d e s d e Vis u a l S t u d io . NET) ; y e l t ip o q u e co n t ie n e e l p u n t o d e e n t ra d a a u t iliza r ( o p ció n
/ m a in ) s e in d ica e n Co m m o n P ro p e rt ie s - > Ge n e ra l - > S t a rt u p Ob je c t

Fin a lm e n t e , p a ra a ñ a d ir a l p ro ye ct o re fe re n cia s a e n s a m b la d o s e xt e rn o s ( o p ció n / r) b a s t a


s e le ccio n a r P ro je c t - > Ad d Re fe re n c e e n e l m e n ú p rin cip a l d e VS . NET.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.3.html (13 de 13) [20/10/2002 18:20:21]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 3 : El p re p ro ce s a d o r
❍ Co n ce p t o d e p re p ro ce s a d o r
❍ Dire ct iva s d e p re p ro ce s a d o

Te m a 3 : El p re p ro c e s a d o r

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

Co n c e p t o d e p re p ro c e s a d o r

El p re p ro c e s a d o e s u n p a s o p re vio a la co m p ila ció n m e d ia n t e e l q u e e s p o s ib le co n t ro la r la fo rm a e n q u e s e


re a liza rá é s t a . El p re p ro c e s a d o r e s e l m ó d u lo a u xilia r q u e u t iliza e l co m p ila d o r p a ra re a liza r e s t a s t a re a s , y lo q u e
fin a lm e n t e e l co m p ila d o r co m p ila e s e l re s u lt a d o d e a p lica r e l p re p ro ce s a d o r a l fich e ro d e t e xt o fu e n t e , re s u lt a d o q u e
t a m b ié n e s u n fich e ro d e t e xt o . Nó t e s e p u e s , q u e m ie n t ra s q u e e l co m p ila d o r h a ce u n a t ra d u cció n d e t e xt o a b in a rio ,
lo q u e e l p re p ro ce s a d o r h a ce e s u n a t ra d u cció n d e t e xt o a t e xt o .

Aq u e llo s q u e t e n g a n e xp e rie n cia e n e l u s o d e l p re p ro ce s a d o r e n le n g u a je s co m o C+ + y co n o zca n lo s p ro b le m a s q u e


im p lica e l u s o d e l m is m o p u e d e n re s p ira r t ra n q u ilo s , ya q u e e n C# s e h a n e lim in a d o la m a yo ría d e ca ra ct e rís t ica s d e
é s t e q u e p ro vo ca b a n e rro re s d ifícile s d e d e t e ct a r ( m a cro s , d ire ct iva s d e in clu s ió n , e t c. ) y p rá ct ica m e n t e s ó lo s e u s a
p a ra p e rm it ir re a liza r co m p ila cio n e s co n d icio n a le s d e có d ig o .

D ire c t iv a s d e p re p ro c e s a d o

Co n c e p t o d e d ire c t iv a . S in t a x is

El p re p ro ce s a d o r n o in t e rp re t a d e n in g u n a m a n e ra e l có d ig o fu e n t e d e l fich e ro , s in o q u e s ó lo in t e rp re t a d e d ich o
fich e ro lo q u e s e d e n o m in a n d ire c t iv a s d e p re p ro c e s a d o . Es t a s d ire ct iva s s o n lín e a s d e t e xt o d e l fich e ro fu e n t e
q u e s e ca ra ct e riza n p o rq u e e n e lla s e l p rim e r ca rá ct e r n o b la n co q u e a p a re ce e s u n a a lm o h a d illa ( ca rá ct e r # ) Po r
e je m p lo :

#define TEST
#error Ha habido un error fatal

No s e p re o cu p e a h o ra s i n o e n t ie n d o e l s ig n ifica d o d e e s t a s d ire ct iva s , ya q u e s e e xp lica rá n m á s a d e la n t e . Lo ú n ico


d e b e s a b e r e s q u e e l n o m b re q u e s e in d ica t ra s e l s ím b o lo # e s e l n o m b re d e la d ire ct iva , y e l t e xt o q u e s e in clu ye
t ra s é l ( n o t o d a s la s d ire ct iva s t ie n e n p o rq u é in clu irlo ) e s e l va lo r q u e s e le d a . Po r t a n t o , la s in t a xis d e u n a d ire ct iva
es:

http://www.programacion.com/tutorial.csharp.4.html (1 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

#<nombreDirectiva> <valorDirectiva>

Es p o s ib le in clu ir co m e n t a rio s e n la m is m a lín e a e n q u e s e d e cla ra u n a d ire ct iva , a u n q u e e s t o s s ó lo p u e d e n s e r


co m e n t a rio s d e u n a lín e a q u e e m p ie ce n co n // Po r e je m p lo , e l s ig u ie n t e co m e n t a rio e s vá lid o :

#define TEST // Ha habido algún error durante el preprocesado

Pe ro e s t e o t ro n o , p u e s a u n q u e o cu p a u n a lín e a t ie n e la s in t a xis d e lo s co m e n t a rio s q u e p u e d e n o cu p a r va ria s lín e a s :

#define TEST /* Ha habido algún error durante el preprocesado */

D e fin ic ió n d e id e n t ific a d o re s d e p re p ro c e s a d o

Co m o ya s e h a co m e n t a d o , la p rin cip a l u t ilid a d d e l p re p ro ce s a d o r e n C# e s la d e p e rm it ir d e t e rm in a r cu á le s re g io n e s


d e có d ig o d e u n fich e ro fu e n t e s e h a n d e co m p ila r. Pa ra e llo , lo q u e s e h a ce e s e n ce rra r la s s e ccio n e s d e có d ig o
o p cio n a le s d e n t ro d e d ire ct iva s d e co m p ila ció n co n d icio n a l, d e m o d o q u e s ó lo s e co m p ila rá n s i d e t e rm in a d o s
id e n t ifica d o re s d e p re p ro ce s a d o e s t á n d e fin id o s . Pa ra d e fin ir u n id e n t ifica d o r d e e s t e t ip o la d ire ct iva q u e s e u s a
s ig u e e s t a s in t a xis :

#define <nombreIdentificador>

Es t a d ire ct iva d e fin e u n id e n t ifica d o r d e p re p ro ce s a d o <nombreIdentificador>. Au n q u e m á s a d e la n t e


e s t u d ia re m o s d e t a lla d a m e n t e cu á le s s o n lo s n o m b re s vá lid o s co m o id e n t ifica d o re s e n C# , p o r a h o ra p o d e m o s
co n s id e ra r q u e s o n vá lid o s a q u e llo s fo rm a d o s p o r u n o o m á s ca ra ct e re s a lfa n u m é rico s t a le s q u e n o s e a n n i t ru e n i
fa ls e y n o e m p ie ce n co n u n n u m e ro . Po r e je m p lo , p a ra d e fin ir u n id e n t ifica d o r d e p re p ro ce s a d o d e n o m b re PRUEBA
s e h a ría :

#define PRUEBA

Po r co n ve n io s e d a a e s t o s id e n t ifica d o re s n o m b re s e n lo s q u e t o d a s la s le t ra s s e e s crib e n e n m a yú s cu la s , co m o e n e l
e je m p lo a n t e rio r. Au n q u e e s s ó lo u n co n ve n io y n a d a o b lig a a u s a rlo , é s t a s e rá la n o m e n cla t u ra q u e u s a re m o s e n e l
p re s e n t e d o cu m e n t o , q u e e s la u s a d a p o r Micro s o ft e n s u s có d ig o s d e e je m p lo . Co n vie n e fa m ilia riza rs e co n e lla
p o rq u e p o r u n la d o h a y m u ch o có d ig o e s crit o q u e la u s a y p o r o t ro u s a rla fa cilit a la le ct u ra d e n u e s t ro có d ig o a lo s
d e m á s a l s e r la n o t a ció n q u e e s p e ra rá n e n co n t ra r.

Es im p o rt a n t e s e ñ a la r q u e cu a lq u ie r d e fin ició n d e id e n t ifica d o r h a d e p re ce d e r a cu a lq u ie r a p a rició n d e có d ig o e n e l


fich e ro fu e n t e . Po r e je m p lo , e l s ig u ie n t e có d ig o n o e s vá lid o , p u e s a n t e s d e l # d e fin e s e h a in clu id o có d ig o fu e n t e ( e l
class A) :

class A
#define PRUEBA
{}

S in e m b a rg o , a u n q u e n o p u e d a h a b e r có d ig o a n t e s d e u n # d e fin e , s í q u e e s p o s ib le in clu ir a n t e s d e é l o t ra s
d ire ct iva s d e p re p ro ce s a d o co n t o t a l lib e rt a d .

Exis t e u n a fo rm a a lt e rn a t iva d e d e fin ir u n id e n t ifica d o r d e p re p ro ce s a d o y q u e a d e m á s p e rm it e q u e d ich a d e fin ició n


s ó lo s e a vá lid a e n u n a co m p ila ció n e n co n cre t o . Es t a fo rm a co n s is t e e n p a s a rle a l co m p ila d o r e n s u lla m a d a la o p ció n
/d:<nombreIdentificador> ( fo rm a a b re via d a d e /define:<nombreIdentificador>) , ca s o e n q u e d u ra n t e la
co m p ila ció n s e co n s id e ra rá q u e a l p rin cip io d e t o d o s lo s fich e ro s fu e n t e a co m p ila r s e e n cu e n t ra d e fin id o e l
id e n t ifica d o r in d ica d o . La s s ig u ie n t e s t re s fo rm a s d e lla m a r a l co m p ila d o r s o n e q u iva le n t e s y d e fin e n id e n t ifica d o re s
d e p re p ro ce s a d o d e n o m b re s PRUEBA y TRAZA d u ra n t e la co m p ila ció n d e u n fich e ro fu e n t e d e n o m b re ejemplo.cs:

csc /d:PRUEBA /d:TRAZA ejemplo.cs


csc /d:PRUEBA,TRAZA ejemplo.cs
csc /d:PRUEBA;TRAZA ejemplo.cs

Nó t e s e e n e l e je m p lo q u e s i q u e re m o s d e fin ir m á s d e u n id e n t ifica d o r u s a n d o e s t a t é cn ica t e n e m o s d o s a lt e rn a t iva s :


in clu ir va ria s o p cio n e s / d e n la lla m a d a a l co m p ila d o r o d e fin ir va rio s d e e s t o s id e n t ifica d o re s e n u n a m is m a o p ció n
/ d s e p a rá n d o lo s m e d ia n t e ca ra ct e re s d e co m a ( , ) o p u n t o y co m a ( ;)

http://www.programacion.com/tutorial.csharp.4.html (2 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

S i s e t ra b a ja co n Vis u a l S t u d io . NET e n lu g a r d e d ire ct a m e n t e co n e l co m p ila d o r e n lín e a d e co m a n d o s , e n t o n ce s


p u e d e co n s e g u ir m is m o e fe ct o a t ra vé s d e Vie w - > P ro p e rt y P a g e s - > Co n fig u ra t io n Op t io n s - > Bu ild - >
Co n d it io n a l Co m p ila t io n Co n s t a n t s , d o n d e n u e va m e n t e u s a d o e l p u n t o y co m a ( ;) o la co m a ( , ) co m o
s e p a ra d o re s , p u e d e d e fin ir va ria s co n s t a n t e s . Pa ra q u e t o d o fu n cio n e b ie n , a n t e s d e s e le ccio n a r Vie w h a d e
s e le ccio n a r e n e l S o lu t io n Ex p lo re r ( s e a b re co n Vie w - > S o lu t io n Ex p lo re r) e l p ro ye ct o a l q u e a p lica r la
d e fin ició n d e la s co n s t a n t e s .

Fin a lm e n t e , re s p e ct o a l u s o d e # d e fin e s ó lo q u e d a co m e n t a r q u e e s p o s ib le d e fin ir va ria s ve ce s u n a m is m a d ire ct iva


s in q u e e llo p ro vo q u e n in g ú n t ip o d e e rro r e n e l co m p ila d o r, lo q u e p e rm it e q u e p o d a m o s p a s a r t a n t o s va lo re s a la
o p ció n / d d e l co m p ila d o r co m o q u e ra m o s s in t e m o r a q u e e n t re n e n co n flict o co n id e n t ifica d o re s d e p re p ro ce s a d o ya
in clu id o s e n lo s fu e n t e s a co m p ila r.

Elim in a c ió n d e id e n t ific a d o re s d e p re p ro c e s a d o

De l m is m o m o d o q u e e s p o s ib le d e fin ir id e n t ifica d o re s d e p re p ro ce s a d o , t a m b ié n e s p o s ib le e lim in a r d e fin icio n e s d e


e s t e t ip o d e id e n t ifica d o re s p re via m e n t e re a liza d a s . Pa ra e llo la d ire ct iva q u e s e u s a t ie n e la s ig u ie n t e s in t a xis :

#undef <nombreIdentificador>

En ca s o d e q u e s e in t e n t e e lim in a r co n e s t a d ire ct iva u n id e n t ifica d o r q u e n o h a ya s id o d e fin id o o cu ya d e fin ició n ya


h a ya s id o e lim in a d a n o s e p ro d u cirá e rro r a lg u n a , s in o q u e s im p le m e n t e la d ire ct iva d e e lim in a ció n s e rá ig n o ra d a . El
s ig u ie n t e e je m p lo m u e s t ra u n e je m p lo d e e s t o e n e l q u e e l s e g u n d o # u n d e f e s ig n o ra d o :

#define VERSION1
#undef VERSION1
#undef VERSION1

Al ig u a l q u e o cu rría co n la s d ire ct iva s # d e fin e , n o s e p u e d e in clu ir có d ig o fu e n t e a n t e s d e la s d ire ct iva s # u n d e f,


s in o q u e , t o d o lo m á s , lo ú n ico q u e p o d ría n in clu irs e a n t e s q u e e lla s s e ría n d ire ct iva s d e p re p ro ce s a d o .

Co m p ila c ió n c o n d ic io n a l

Co m o s e h a re p e t id o va ria s ve ce s a lo la rg o d e l t e m a , la p rin cip a l u t ilid a d d e l p re p ro ce s a d o r e n C# e s la d e p e rm it ir


la co m p ila ció n d e có d ig o co n d icio n a l, lo q u e co n s is t e e n s ó lo p e rm it ir q u e s e co m p ile d e t e rm in a d a s re g io n e s d e
có d ig o fu e n t e s i la s va ria b le s d e p re p ro ce s a d o d e fin id a s cu m p le n a lg u n a co n d ició n d e t e rm in a d a . Pa ra co n s e g u ir e s t o
s e u t iliza e l s ig u ie n t e ju e g o d e d ire ct iva s :

#if <condición1>
<código1>
#elif <condición2>
<código2>
...
#else
<códigoElse>
#endif

El s ig n ifica d o d e u n a e s t ru ct u ra co m o e s t a e s q u e s i s e cu m p le <condición1> e n t o n ce s s e p a s a a l co m p ila d o r e l


<código1>, s i n o o cu rre e s t o p e ro s e cu m p le <condición2> e n t o n ce s lo q u e s e p a s a ría a l co m p ila d o r s e ría
<código2>, y a s í co n t in u a m e n t e h a s t a q u e s e lle g u e a u n a ra m a # e lif cu ya co n d ició n s e cu m p la . S i n o s e cu m p le
n in g u n a p e ro h a y u n a ra m a # e ls e s e p a s a rá a l co m p ila d o r e l <códigoElse>, p e ro s i d ich a ra m a n o e xis t ie s e
e n t o n ce s n o s e le p a s a ría có d ig o a lg u n o y s e co n t in u a ría p re p ro ce s a n d o e l có d ig o s ig u ie n t e a l # e n d if e n e l fu e n t e
o rig in a l.

Au n q u e la s ra m a s # e ls e y # e n d if s o n o p cio n a le s , h a y q u e t e n e r cu id a d o y n o m e zcla rla s ya q u e la ra m a # e ls e s ó lo


p u e d e a p a re ce r co m o ú lt im a ra m a d e l b lo q u e # if. . . # e n d if.

Es p o s ib le a n id a r va ria s e s t ru ct u ra s # if. . . # e n d if, co m o m u e s t ra e l s ig u ie n t e có d ig o :

http://www.programacion.com/tutorial.csharp.4.html (3 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

#define PRUEBA

using System;

class A
{
public static void Main()
{
#if PRUEBA
Console.Write ("Esto es una prueba");
#if TRAZA
Console.Write(" con traza");
#elif !TRAZA
Console.Write(" sin traza");
#endif
#endif
}
}

Co m o s e ve e n e l e je m p lo , la s co n d icio n e s e s p e cifica d a s s o n n o m b re s d e id e n t ifica d o re s d e p re p ro ce s a d o ,


co n s id e rá n d o s e q u e ca d a co n d ició n s ó lo s e cu m p le s i e l id e n t ifica d o r q u e s e in d ica e n e lla e s t á d e fin id o . O lo q u e e s
lo m is m o : u n id e n t ifica d o r d e p re p ro ce s a d o va le cie rt o ( t ru e e n C# ) s i e s t á d e fin id o y fa ls o ( fa ls e e n C# ) s i n o .

El s ím b o lo ! in clu id o e n ju n t o a l va lo r d e la d ire ct iva # e lif e s e l s ím b o lo d e "n o " ló g ico , y e l # e lif e n e l q u e s e u s a lo


q u e n o s p e rm it e e s in d ica r q u e e n ca s o d e q u e n o s e e n cu e n t re d e fin id o e l id e n t ifica d o r d e p re p ro ce s a d o TRAZA s e
h a n d e p a s a r a l co m p ila d o r la s in s t ru ccio n e s a co n t in u a ció n in d ica d a s ( o s e a , e l Console.Write("sin traza");)

El có d ig o fu e n t e q u e e l p re p ro ce s a d o r p a s a rá a l co m p ila d o r e n ca s o d e q u e co m p ile m o s s in e s p e cifica r n in g u n a


o p ció n / d e n la lla m a d a a l co m p ila d o r s e rá :

using System;

class A
{
public static void Main()
{
Console.Write("Esto es una prueba");
Console.Write(" sin traza");
}
}

Nó t e s e co m o e n e l có d ig o q u e s e p a s a a l co m p ila d o r ya n o a p a re ce n in g u n a d ire ct iva d e p re p ro ce s a d o , p u e s lo q u e e l


p re p ro ce s a d o r le p a s a e s e l có d ig o re s u lt a n t e d e a p lica r a l o rig in a l la s d ire ct iva s d e p re p ro ce s a d o q u e co n t u vie s e .

As im is m o , s i co m p ilá s e m o s e l có d ig o fu e n t e o rig in a l lla m a n d o a l co m p ila d o r co n /d:TRAZA, lo q u e e l p re p ro ce s a d o r


p a s a ría a l co m p ila d o r s e ría :

using System;

class A
{
public static void Main()
{
Console.Write ("Esto es una prueba");
Console.Write(" sin traza");
}
}

Ha s t a a h o ra s o lo h e m o s vis t o q u e la co n d ició n d e u n # if o # e lif p u e d e s e r u n id e n t ifica d o r d e p re p ro ce s a d o , y q u e


e s t e va ld rá true o false s e g ú n e s t é o n o d e fin id o . Pu e s b ie n , e s t o s n o s o n e l ú n ico t ip o d e co n d icio n e s vá lid a s e n

http://www.programacion.com/tutorial.csharp.4.html (4 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

C# , s in o q u e t a m b ié n e s p o s ib le in clu ir co n d icio n e s q u e co n t e n g a n e xp re s io n e s ló g ica s fo rm a d a s p o r id e n t ifica d o re s


d e p re p ro ce s a d o , o p e ra d o re s ló g ico s ( ! p a ra "n o t ", && p a ra "a n d " y | | p a ra "o r") , o p e ra d o re s re la cio n a le s d e
ig u a ld a d ( = = ) y d e s ig u a ld a d ( != ) , p a ré n t e s is ( ( y ) ) y lo s id e n t ifica d o re s e s p e cia le s t ru e y fa ls e . Po r e je m p lo :

#if TRAZA // Se cumple si TRAZA esta definido.


#if TRAZA==true // Idem al ejemplo anterior aunque con una sintaxis menos cómoda
#if !TRAZA // Sólo se cumple si TRAZA no está definido.
#if TRAZA==false // Idema al ejemplo anterior aunque con una sintaxis menos cómoda
#if TRAZA == PRUEBA // Solo se cumple si tanto TRAZA como PRUEBA están
// definidos o si no ninguno lo está.
#if TRAZA != PRUEBA // Solo se cumple si TRAZA esta definido y PRUEBA no o
// viceversa
#if TRAZA && PRUEBA // Solo se cumple si están definidos TRAZA y PRUEBA.
#if TRAZA || PRUEBA // Solo se cumple si están definidos TRAZA o PRUEBA.
#if false // Nunca se cumple (por lo que es absurdo ponerlo)
#if true // Siempre se cumple (por lo que es absurdo ponerlo)

Es fá cil ve r q u e la ca u s a d e la re s t ricció n a n t e s co m e n t a d a d e q u e n o e s vá lid o d a r u n co m o n o m b re t ru e o fa ls e a


u n id e n t ifica d o r d e p re p ro ce s a d o s e d e b e a l s ig n ifica d o e s p e cia l q u e e s t o s t ie n e n e n la s co n d icio n e s d e lo s # if y # e lif

Ge n e ra c ió n d e a v is o s y e rro re s

El p re p ro ce s a d o r d e C# t a m b ié n o fre ce d ire ct iva s q u e p e rm it e n g e n e ra r a vis o s y e rro re s d u ra n t e e l p ro ce s o d e


p re p ro ce s a d o e n ca s o d e q u e s e r in t e rp re t a d a s p o r e l p re p ro ce s a d o r. Es t a s d ire ct iva s t ie n e n la s ig u ie n t e s in t a xis :

#warning <mensajeAviso>
#error <mensajeError>

La d ire ct iva # w a rn in g lo q u e h a ce a l s e r p ro ce s a d a e s p ro vo ca r q u e e l co m p ila d o r p ro d u zca u n m e n s a je d e a vis o


q u e s ig a e l fo rm a t o e s t á n d a r u s a d o p o r é s t e p a ra e llo y cu yo t e xt o d e s crip t ivo t e n g a e l co n t e n id o in d ica d o e n
<mensajeAviso>; y # e rro r h a ce lo m is m o p e ro p ro vo ca n d o u n m e n s a je d e e rro r e n ve z d e u n o d e a vis o .

Us a n d o d ire ct iva s d e co m p ila ció n co n d icio n a l s e p u e d e co n t ro la r cu a n d o s e h a n d e p ro d u cir e s t o s m e n s a je s , cu a n d o


s e h a n d e p ro ce s a r e s t a s d ire ct iva s . De h e ch o la p rin cip a l u t ilid a d d e e s t a s d ire ct iva s e s p e rm it ir co n t ro la r e rro re s d e
a s ig n a ció n d e va lo re s a lo s d ife re n t e s id e n t ifica d o re s d e p re p ro ce s a d o d e u n có d ig o , y u n e je m p lo d e e llo e s e l
s ig u ie n t e :

#warning Código aun no revisado


#define PRUEBA
#if PRUEBA && FINAL
#error Un código no puede ser simultáneamente de prueba y versión final
#endif
class A
{}

En e s t e có d ig o s ie m p re s e p ro d u cirá e l m e n s a je d e a vis o , p e ro e l # if in d ica q u e s ó lo s e p ro d u cirá e l m e n s a je d e e rro r


s i s e h a n d e fin id o s im u lt á n e a m e n t e lo s id e n t ifica d o re s d e p re p ro ce s a d o PRUEBA y FINAL.

Co m o p u e d e d e d u cirs e d e l e je m p lo , e l p re p ro ce s a d o r d e C# co n s id e ra q u e lo s m e n s a je s a s o cia d o s a d ire ct iva s


# w a rn in g o # e rro rs o n t o d o e l t e xt o q u e s e e n cu e n t ra t ra s e l n o m b re d e d ich a s d ire ct iva s y h a s t a e l fin a l d e la lín e a
d o n d e é s t a s a p a re ce n . Po r t a n t o , t o d o co m e n t a rio q u e s e in clu ya e n u n a lín e a d e e s t e t ip o s e rá co n s id e ra d o co m o
p a rt e d e l m e n s a je a m o s t ra r, y n o co m o co m e n t a rio co m o t a l. Po r e je m p lo , a n t e la d ire ct iva :

#error La compilación ha fallado // Error

Lo q u e s e m o s t ra rá e n p a n t a lla e s u n m e n s a je d e la s ig u ie n t e fo rm a :

Fichero.cs(3,5): error CS1029: La compilación ha fallado // Error

http://www.programacion.com/tutorial.csharp.4.html (5 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

Ca m b io s e n la n u m e ra c ió n d e lín e a s

Po r d e fe ct o e l co m p ila d o r e n u m e ra la s lín e a s d e ca d a fich e ro fu e n t e s e g ú n e l o rd e n n o rm a l e n q u e e s t a s a p a re ce n e n


e l m is m o , y e s t e o rd e n e s e l q u e s ig u e a la h o ra d e in fo rm a r d e e rro re s o d e a vis o s d u ra n t e la co m p ila ció n . S in
e m b a rg o , h a y s it u a cio n e s e n la s q u e in t e re s a ca m b ia r e s t a n u m e ra ció n , y p a ra e llo s e o fre ce u n a d ire ct iva co n la
s ig u ie n t e s in t a xis :

#line <número> "<nombreFichero>"

Es t a d ire ct iva in d ica a l p re p ro ce s a d o r q u e h a d e co n s id e ra r q u e la s ig u ie n t e lín e a d e l fich e ro fu e n t e e n q u e a p a re ce


e s la lín e a cu yo n ú m e ro s e le in d ica , in d e p e n d ie n t e m e n t e d e l va lo r q u e t u vie s e s e g ú n la n u m e ra ció n u s a d a e n e s e
m o m e n t o . El va lo r in d ica d o e n "<nombreFichero>" e s o p cio n a l, y e n ca s o d e a p a re ce r in d ica e l n o m b re q u e s e h a
d e co n s id e ra r q u e t ie n e e l fich e ro a la h o ra d e d a r m e n s a je s d e e rro r. Un e je m p lo :

#line 127 "csmace.cs"

Es t e u s o d e # lin e in d ica q u e e l co m p ila d o r h a d e co n s id e ra r q u e la lín e a s ig u ie n t e e s la lín e a 1 2 7 d e l fich e ro


csmace.cs. A p a rt ir d e e lla s e s e g u irá u s a n d o e l s is t e m a d e n u m e ra ció n n o rm a l ( la s ig u ie n t e a e s a s e rá la 1 2 8 d e
csmace.cs, la p ró xim a la 1 2 9 , e t c. ) s a lvo q u e m á s a d e la n t e s e vu e lva a ca m b ia r la n u m e ra ció n co n o t ra d ire ct iva
# lin e .

Au n q u e e n p rin cip io p u e d e p a re ce r q u e e s t a d ire ct iva e s d e e s ca s a u t ilid a d , lo cie rt o e s q u e s u e le ve n ir b a s t a n t e b ie n


p a ra la e s crit u ra d e co m p ila d o re s y o t ra s h e rra m ie n t a s q u e g e n e re n có d ig o e n C# a p a rt ir d e có d ig o e s crit o e n o t ro s
le n g u a je s .

Ma rc a c ió n d e re g io n e s d e c ó d ig o

Es p o s ib le m a rca r re g io n e s d e có d ig o y a s o cia rle s u n n o m b re u s a n d o e l ju e g o d e d ire ct iva s # re g io n y # e n d re g io n .


Es t a s d ire ct iva s s e u s a n a s í:

#region <nombreRegión>
<código>
#endregion

La u t ilid a d q u e s e d é a e s t a s m a rca cio n e s d e p e n d e d e ca d a h e rra m ie n t a , p e ro e n e l m o m e n t o d e e s crib ir e s t a s lín e a s


la ú n ica h e rra m ie n t a d is p o n ib le q u e h a cía u s o d e e lla s e ra Vis u a l S t u d io . NET, d o n d e s e u s a p a ra m a rca r có d ig o d e
m o d o q u e d e s d e la ve n t a n a d e có d ig o p o d a m o s e xp a n d irlo y co n t ra e rlo co n u n a ú n ica p u ls a ció n d e ra t ó n . En
co n cre t o , e n la ve n t a n a d e có d ig o d e Vis u a l S t u d io a p a re ce rá u n s ím b o lo [ - ] ju n t o a la s re g io n e s d e có d ig o a s í
m a rca d a s d e m a n e ra q u e p u ls a n d o s o b re é l t o d o e l có d ig o co n t e n id o e n la re g ió n s e co m p rim irá y s e rá s u s t it u id o p o r
e l n o m b re d a d o e n <nombreRegión>. Tra s e llo , e l [ - ] s e co n ve rt irá e n u n [ + ] y s i vo lve m o s a p u ls a rlo e l có d ig o
co n t ra íd o s e e xp a n d irá y re cu p e ra rá s u a s p e ct o o rig in a l. A co n t in u a ció n s e m u e s t ra u n e je m p lo d e ca d a ca s o :

Ilustración 4: Código de
región expandido

Ilustración 5: Código de
región contraído

Ha y q u e t e n e r cu id a d o a l a n id a r re g io n e s co n d ire ct iva s d e co m p ila ció n co n d icio n a l, ya q u e t o d o b lo q u e


# if. . . # e n d ifq u e co m ie n ce d e n t ro d e u n a re g ió n h a d e t e rm in a r t a m b ié n d e n t ro d e e lla . Po r t a n t o , e l s ig u ie n t e u s o d e
la d ire ct iva # re g io n n o e s va lid o ya q u e Re g ió n Erró n e a t e rm in a e s t a n d o e l b lo q u e # if. . . # e n d if a b ie rt o :

#region RegiónErrónea
#if A
#endregion
#endif

http://www.programacion.com/tutorial.csharp.4.html (6 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.4.html (7 de 7) [20/10/2002 18:20:31]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 4 : As p e ct o s lé xico s
❍ Co m e n t a rio s
❍ Id e n t ifica d o re s
❍ Pa la b ra s re s e rva d a s
❍ Lit e ra le s
❍ Op e ra d o re s

Te m a 4 : As p e c t o s lé x ic o s

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

Co m e n t a rio s

Un c o m e n t a rio e s t e xt o q u e in clu id o e n e l có d ig o fu e n t e d e u n p ro g ra m a co n la id e a d e fa cilit a r s u le g ib ilid a d a lo s


p ro g ra m a d o re s y cu yo co n t e n id o e s , p o r d e fe ct o , co m p le t a m e n t e ig n o ra d o p o r e l co m p ila d o r. S u e le n u s a rs e p a ra in clu ir
in fo rm a ció n s o b re e l a u t o r d e l có d ig o , p a ra a cla ra r e l s ig n ifica d o o e l p o rq u é d e d e t e rm in a d a s s e ccio n e s d e có d ig o , p a ra
d e s crib ir e l fu n cio n a m ie n t o d e lo s m é t o d o s d e la s cla s e s , e t c.

En C# h a y d o s fo rm a s d e e s crib ir co m e n t a rio s . La p rim e ra co n s is t e e n e n ce rra r t o d o e l t e xt o q u e s e d e s e e co m e n t a r e n t re


ca ra ct e re s /* y */ s ig u ie n d o la s ig u ie n t e s in t a xis :

/*<texto>*/

Es t o s co m e n t a rio s p u e d e n a b a rca r t a n t a s lín e a s co m o s e a n e ce s a rio . Po r e je m p lo :

/* Esto es un comentario
que ejemplifica cómo se escribe comentarios que ocupen varias líneas */

Ah o ra b ie n , h a y q u e t e n e r cu id a d o co n e l h e ch o d e q u e n o e s p o s ib le a n id a r co m e n t a rio s d e e s t e t ip o . Es d e cir, n o va le
e s crib ir co m e n t a rio s co m o e l s ig u ie n t e :

/* Comentario contenedor /* Comentario contenido */ */

Es t o s e d e b e a q u e co m o e l co m p ila d o r ig n o ra t o d o e l t e xt o co n t e n id o e n u n co m e n t a rio y s ó lo b u s ca la s e cu e n cia */ q u e


m a rca s u fin a l, ig n o ra rá e l s e g u n d o /* y cu a n d o lle g u e a l p rim e r */ co n s id e ra rá q u e h a a ca b a d o e l co m e n t a rio a b ie rt o co n e l
p rim e r /* ( n o e l a b ie rt o co n e l s e g u n d o ) y p a s a rá a b u s ca r có d ig o . Co m o e l */ s ó lo lo a d m it e s i h a d e t e ct a d o a n t e s a lg ú n
co m e n t a rio a b ie rt o y a ú n n o ce rra d o ( n o m ie n t ra s b u s ca có d ig o ) , cu a n d o lle g u e a l s e g u n d o */ co n s id e ra rá q u e h a h a b id o u n
e rro r ya q u e e n co n t ra rá e l */ d o n d e e s p e ra b a e n co n t ra r có d ig o

Da d o q u e m u ch a s ve ce s lo s co m e n t a rio s q u e s e e s crib e n s o n m u y co rt o s y n o s u e le n o cu p a r m á s d e u n a lín e a , C# o fre ce u n a


s in t a xis a lt e rn a t iva m á s co m p a ct a p a ra la e s crit u ra e s t e t ip o d e co m e n t a rio s e n la s q u e s e co n s id e ra co m o in d ica d o r d e l

http://www.programacion.com/tutorial.csharp.5.html (1 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

co m ie n zo d e l co m e n t a rio la p a re ja d e ca ra ct e re s / / y co m o in d ica d o r d e s u fin a l e l fin d e lín e a . Po r t a n t o , la s in t a xis q u e


s ig u e n e s t o s co m e n t a rio s e s :

// <texto>

Y u n e je m p lo d e s u u s o e s :

// Este comentario ejemplifica como escribir comentarios abreviados de una sola línea

Es t o s co m e n t a rio s d e u n a s o la lín e a s í q u e p u e d e n a n id a rs e s in n in g ú n p ro b le m a . Po r e je m p lo , e l s ig u ie n t e co m e n t a rio e s


p e rfe ct a m e n t e vá lid o :

// Comentario contenedor // Comentario contenido

I d e n t ific a d o re s

Al ig u a l q u e e n cu a lq u ie r le n g u a je d e p ro g ra m a ció n , e n C# u n id e n t ific a d o r n o e s m á s q u e , co m o s u p ro p io n o m b re in d ica ,


u n n o m b re co n e l q u e id e n t ifica re m o s a lg ú n e le m e n t o d e n u e s t ro có d ig o , ya s e a u n a cla s e , u n a va ria b le , u n m é t o d o , e t c.

Típ ica m e n t e e l n o m b re d e u n id e n t ifica d o r s e rá u n a s e cu e n cia d e cu a lq u ie r n ú m e ro d e ca ra ct e re s a lfa n u m é rico s - in clu id a s


vo ca le s a ce n t u a d a s y e ñ e s - t a le s q u e e l p rim e ro d e e llo s n o s e a u n n ú m e ro . Po r e je m p lo , id e n t ifica d o re s vá lid o s s e ría n :
Arriba, caña, C3P0, áëÎò, e t c; p e ro n o lo s e ría n 3com, 127, e t c.

S in e m b a rg o , y a u n q u e p o r m o t ivo s d e le g ib ilid a d d e l có d ig o n o s e re co m ie n d a , C# t a m b ié n p e rm it e in clu ir d e n t ro d e u n


id e n t ifica d o r ca ra ct e re s e s p e cia le s im p rim ib le s t a le s co m o s ím b o lo s d e d ié re s is , s u b ra ya d o s , e t c. s ie m p re y cu a n d o e s t o s n o
t e n g a n u n s ig n ifica d o e s p e cia l d e n t ro d e l le n g u a je . Po r e je m p lo , t a m b ié n s e ría n id e n t ifica d o re s vá lid o s _barco_, c¨k y A·B
p e ro n o C# ( # in d ica in icio d e d ire ct iva d e p re p ro ce s a d o ) o a!b ( ! in d ica o p e ra ció n ló g ica "n o t ")

Fin a lm e n t e , C# d a la p o s ib ilid a d d e p o d e r e s crib ir id e n t ifica d o re s q u e in clu ya n ca ra ct e re s Un ico d e q u e n o s e p u e d a n im p rim ir


u s a n d o e l t e cla d o d e la m á q u in a d e l p ro g ra m a d o r o q u e n o s e a n d ire ct a m e n t e vá lid o s d e b id o a q u e t e n g a n u n s ig n ifica d o
e s p e cia l e n e l le n g u a je . Pa ra e llo , lo q u e p e rm it e e s e s crib ir e s t o s ca ra ct e re s u s a n d o s e c u e n c ia s d e e s c a p e , q u e n o s o n
m á s q u e s e cu e n cia s d e ca ra ct e re s co n la s s in t a xis :

\u<dígito><dígito><dígito><dígito>

\U<dígito><dígito><dígito><dígito><dígito><dígito><dígito><dígito>

Es t o s d íg it o s in d ica n e s e l có d ig o Un ico d e d e l ca rá ct e r q u e s e d e s e a in clu ir co m o p a rt e d e l id e n t ifica d o r, y ca d a u n o d e e llo s


h a d e s e r u n d íg it o h e xa d e cim a l vá lid o . ( 0-9, a-f ó A-F) Ha y q u e s e ñ a la r q u e e l ca rá ct e r u h a d e e s crib is e e n m in ú s cu la
cu a n d o s e in d iq u e n ca ra ct e re s Un ico d e co n 4 d íg it o s y e n m a yú s cu la cu a n d o s e in d iq u e n co n ca ra ct e re s d e o ch o . Eje m p lo s d e
id e n t ifica d o re s vá lid o s s o n C\u0064 ( e q u iva le a C#, p u e s 6 4 e s e l có d ig o d e # e n Un ico d e ) ó a \ U0 0 0 0 0 0 3 3 b ( e q u iva le a
a!b) .

P a la b ra s re s e rv a d a s

Au n q u e a n t e s s e h a n d a d o u n a s e rie d e re s t riccio n e s s o b re cu á le s s o n lo s n o m b re s vá lid o s q u e s e p u e d e n d a r e n C# a lo s


id e n t ifica d o re s , fa lt a t o d a vía p o r d a r u n a : lo s s ig u ie n t e s n o m b re s n o s o n vá lid o s co m o id e n t ifica d o re s ya q u e t ie n e n u n
s ig n ifica d o e s p e cia l e n e l le n g u a je :

abstract, as, base, bool, break, byte, case, catch, char, checked, class, const,
continue, decimal, default, delegate, do, double, else, enum, event, explicit,
extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int,
interface,
internal, lock, is, long, namespace, new, null, object, operator, out, override,
params, private, protected, public, readonly, ref, return, sbyte, sealed, short,
sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof,
uint, ulong, unchecked, unsafe, ushort, using, virtual, void, while

Ap a rt e d e e s t a s p a la b ra s re s e rva d a s , s i e n fu t u ra s im p le m e n t a cio n e s d e l le n g u a je s e d e cid ie s e in clu ir n u e va s p a la b ra s


re s e rva d a s , Micro s o ft d ice q u e d ich a s p a la b ra s h a b ría n d e in clu ir a l m e n o s d o s s ím b o lo s d e s u b ra ya d o co n s e cu t ivo s ( __) Po r
t a n t o , p a ra e vit a r p o s ib le s co n flict o s fu t u ro s n o s e re co m ie n d a d a r a n u e s t ro s id e n t ifica d o re s n o m b re s q u e co n t e n g a n d ich a

http://www.programacion.com/tutorial.csharp.5.html (2 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

s e cu e n cia d e s ím b o lo s .

Au n q u e d ire ct a m e n t e n o p o d e m o s d a r e s t o s n o m b re s a n u e s t ro s id e n t ifica d o re s , C# p ro p o rcio n a u n m e ca n is m o p a ra h a ce rlo


in d ire ct a m e n t e y d e u n a fo rm a m u ch o m á s le g ib le q u e u s a n d o s e cu e n cia s d e e s ca p e . Es t e m e ca n is m o co n s is t e e n u s a r e l
ca rá ct e r @ p a ra p re fija r e l n o m b re co in cid e n t e co n e l d e u n a p a la b ra re s e rva d a q u e q u e ra m o s d a r a n u e s t ra va ria b le . Po r
e je m p lo , e l s ig u ie n t e có d ig o e s vá lid o :

class @class
{
static void @static(bool @bool)
{
if (@bool)
Console.WriteLine("cierto");
else
Console.WriteLine("falso");
}
}

Lo q u e s e h a h e ch o e n e l có d ig o a n t e rio r h a s id o u s a r @ p a ra d e cla ra r u n a cla s e d e n o m b re class co n u n m é t o d o d e n o m b re


static q u e t o m a u n p a rá m e t ro d e n o m b re bool, a ú n cu a n d o t o d o s e s t o s n o m b re s s o n p a la b ra s re s e rva d a s e n C# .

Ha y q u e p re cis a r q u e a u n q u e e l n o m b re q u e n o s o t ro s e s crib a m o s s e a p o r e je m p lo @class, e l n o m b re co n e l q u e e l


co m p ila d o r va a t ra t a r in t e rn a m e n t e a l id e n t ifica d o r e s s o la m e n t e class. De h e ch o , s i d e s d e có d ig o e s crit o e n o t ro le n g u a je
a d a p t a d o a . NET d is t in t o a C# h a ce m o s re fe re n cia a é s t e id e n t ifica d o r y e n e s e le n g u a je s u n o m b re n o e s u n a p a la b ra
re s e rva d a , e l n o m b re co n e l q u e d e b e re m o s re fe re n cia rlo e s class, y n o @class ( s i t a m b ié n fu e s e e n e s e le n g u a je p a la b ra
re s e rva d a h a b ría q u e re fe re n cia rlo co n e l m e ca n is m o q u e e l le n g u a je in clu ye s e p a ra e llo , q u e q u izá s t a m b ié n p o d ría co n s is t ir
e n u s a r @ co m o e n C# )

En re a lid a d , e l u s o d e @ n o s e t ie n e p o rq u é lim it a r a p re ce d e r p a la b ra s re s e rva d a s e n C# , s in o q u e p o d e m o s p re ce d e r


cu a lq u ie r n o m b re co n é l. S in e m b a rg o , h a ce r e s t o n o s e re co m ie n d a , p u e s e s co n s id e ra d o co m o u n m a l h á b it o d e
p ro g ra m a ció n y p u e d e p ro vo ca r e rro re s m u y s u t ile s co m o e l q u e m u e s t ra e l s ig u ie n t e e je m p lo :

class A
{
int a; // (1)
int @a; // (2)

public static void Main()


{}
}

S i in t e n t a m o s co m p ila r e s t e có d ig o s e p ro d u cirá u n e rro r q u e n o s in fo rm a rá d e q u e e l ca m p o d e n o m b re a h a s id o d e cla ra d o


m ú lt ip le s ve ce s e n la cla s e A. Es t o s e d e b e a q u e co m o @ n o fo rm a p a rt e e n re a lid a d d e l n o m b re d e l id e n t ifica d o r a l q u e
p re ce d e , la s d e cla ra cio n e s m a rca d a s co n co m e n t a rio s co m o ( 1 ) y ( 2 ) s o n e q u iva le n t e s .

Ha y q u e s e ñ a la r p o r ú lt im o u n a co s a re s p e ct o a l ca rá ct e r @: s ó lo p u e d e p re ce d e r a l n o m b re d e u n id e n t ifica d o r, p e ro n o
p u e d e e s t a r co n t e n id o d e n t ro d e l m is m o . Es d e cir, id e n t ifica d o re s co m o i5322@fie.us.es n o s o n vá lid o s .

Lit e ra le s

Un lit e ra l e s la re p re s e n t a ció n e xp lícit a d e lo s va lo re s q u e p u e d e n t o m a r lo s t ip o s b á s ico s d e l le n g u a je . A co n t in u a ció n s e


e xp lica cu á l e s la s in t a xis co n q u e s e e s crib e n lo s lit e ra le s e n C# d e s g lo s á n d o lo s s e g ú n e l t ip o d e va lo re s q u e re p re s e n t a n :

● Lit e ra le s e n t e ro s : Un n ú m e ro e n t e ro s e p u e d e re p re s e n t a r e n C# t a n t o e n fo rm a t o d e cim a l co m o
h e xa d e cim a l. En e l p rim e r ca s o b a s t a e s crib ir lo s d íg it o s d e cim a le s ( 0-9) d e l n ú m e ro u n o s t ra s o t ro s ,
m ie n t ra s q u e e n e l s e g u n d o h a y q u e p re ce d e r lo s d íg it o s h e xa d e cim a le s ( 0-9, a-f, A-F) co n e l p re fijo 0x.
En a m b o s ca s o s e s p o s ib le p re ce d e r e l n ú m e ro d e lo s o p e ra d o re s + ó - p a ra in d ica r s i e s p o s it ivo o
n e g a t ivo , a u n q u e s i n o s e p o n e n a d a s e co n s id e ra rá q u e e s p o s it ivo . Eje m p lo s d e lit e ra le s e n t e ro s s o n 0,
5, +15, -23, 0x1A, -0x1a, e t c

En re a lid a d , la s in t a xis co m p le t a p a ra la e s crit u ra d e lit e ra le s e n t e ro s t a m b ié n p u e d e in clu ir u n s u fijo q u e in d iq u e e l


t ip o d e d a t o e n t e ro a l q u e h a d e p e rt e n e ce r e l lit e ra l. Es t o n o lo ve re m o s h a s t a e l Te m a 7 : Va ria b le s y t ip o s d e d a t o s .

http://www.programacion.com/tutorial.csharp.5.html (3 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

● Lit e ra le s re a le s : Lo s n ú m e ro s re a le s s e e s crib e n d e fo rm a s im ila r a lo s e n t e ro s , a u n q u e s ó lo s e p u e d e n


e s crib ir e n fo rm a d e cim a l y p a ra s e p a ra r la p a rt e e n t e ra d e la re a l u s a n e l t ra d icio n a l p u n t o d e cim a l
( ca rá ct e r .) Ta m b ié n e s p o s ib le re p re s e n t a r lo s re a le s e n fo rm a t o cie n t ífico , u s á n d o s e p a ra in d ica r e l
e xp o n e n t e lo s ca ra ct e re s e ó E. Eje m p lo s d e lit e ra le s re a le s s o n 0.0, 5.1, -5.1, +15.21, 3.02e10, 2.02e-
2, 98.8E+1, e t c.

Al ig u a l q u e o cu rría co n lo s lit e ra le s e n t e ro s , lo s lit e ra le s re a le s t a m b ié n p u e d e n in clu ir s u fijo s q u e in d iq u e n e l t ip o d e


d a t o re a l a l q u e p e rt e n e ce n , a u n q u e n u e va m e n t e n o lo s ve re m o s h a s t a e l Te m a 7 : Va ria b le s y t ip o s d e d a t o s

● Lit e ra le s ló g ic o s : Lo s ú n ico s lit e ra le s ló g ico s vá lid o s s o n t ru e y fa ls e , q u e re s p e ct iva m e n t e re p re s e n t a n


lo s va lo re s ló g ico s cie rt o y fa ls o .

● Lit e ra le s d e c a rá c t e r: Prá ct ica m e n t e cu a lq u ie r ca rá ct e r s e p u e d e re p re s e n t a r e n ce rrá n d o lo e n t re


co m illa s s im p le s . Po r e je m p lo , 'a' ( le t ra a ) , ' ' ( ca rá ct e r d e e s p a cio ) , '? ' ( s ím b o lo d e in t e rro g a ció n ) , e t c.
La s ú n ica s e xce p cio n e s a e s t o s o n lo s ca ra ct e re s q u e s e m u e s t ra n e n la Ta b la 4 . 1 , q u e h a n d e
re p re s e n t a rs e co n s e cu e n cia s d e e s ca p e q u e in d iq u e n s u va lo r co m o có d ig o Un ico d e o m e d ia n t e u n
fo rm a t o e s p e cia l t a l y co m o s e in d ica a co n t in u a ció n :

Ca rá c t e r Có d ig o d e e s c a p e Un ic o d e Có d ig o d e e s c a p e e s p e c ia l
Co m illa s im p le \ u0027 \'
Co m illa d o b le \ u0022 \"
Ca rá ct e r n u lo \ u0000 \0
Ala rm a \ u0007 \a
Re t ro ce s o \ u0008 \b
S a lt o d e p á g in a \ u000C \f
Nu e va lín e a \ u000A \n
Re t o rn o d e ca rro \ u000D \r
Ta b u la ció n h o rizo n t a l \ u 0 0 0 9 \t
Ta b u la ció n ve rt ica l \ u000B \v
Ba rra in ve rt id a \ u005C \\

Ta b la 4 . 1 : Có d ig o s d e e s ca p e e s p e cia le s

En re a lid a d , d e la t a b la a n t e rio r h a y q u e m a t iza r q u e e l ca rá ct e r d e co m illa d o b le t a m b ié n p u e d e a p a re ce r d e n t ro d e u n lit e ra l


d e ca d e n a d ire ct a m e n t e , s in n e ce s id a d d e u s a r s e cu e n cia s d e e s ca p e . Po r t a n t o , o t ro s e je m p lo s d e lit e ra le s d e ca rá ct e r
vá lid o s s e rá n '\"', '"', '\f', '\u0000', '\\', '\'', e t c.

Ap a rt e d e p a ra re p re s e n t a r lo s ca ra ct e re s d e la t a b la a n t e rio r, t a m b ié n e s p o s ib le u s a r lo s có d ig o s d e e s ca p e Un ico d e p a ra
re p re s e n t a r cu a lq u ie r có d ig o Un ico d e , lo q u e s u e le u s a rs e p a ra re p re s e n t a r lit e ra le s d e ca ra ct e re s n o in clu id o s e n lo s t e cla d o s
e s t á n d a re s .

Ju n t o a l fo rm a t o d e re p re s e n t a ció n d e có d ig o s d e e s ca p e Un ico d e ya vis t o , C# in clu ye u n fo rm a t o a b re via d o p a ra re p re s e n t a r


e s t o s có d ig o s e n lo s lit e ra le s d e ca rá ct e r s i n e ce s id a d d e e s crib ir s ie m p re cu a t ro d íg it o s a ú n cu a n d o e l có d ig o a re p re s e n t a r
t e n g a m u ch o s ce ro s e n s u p a rt e izq u ie rd a . Es t e fo rm a t o co n s is t e e n p re ce d e r e l có d ig o d e \ x e n ve z d e \ u . De e s t e m o d o ,
lo s lit e ra le s d e ca rá ct e r '\U00000008', '\u0008', '\x0008', '\x008', '\x08' y '\x8' s o n t o d o s e q u iva le n t e s . Ha y
q u e t e n e r e n cu e n t a q u e e s t e fo rm a t o a b re via d o s ó lo e s vá lid o e n lo s lit e ra le s d e ca rá ct e r, y n o a la h o ra d e d a r n o m b re s a
lo s id e n t ifica d o re s .

● Lit e ra le s d e c a d e n a : Un a c a d e n a n o e s m á s q u e u n a s e cu e n cia d e ca ra ct e re s e n ce rra d o s e n t re


co m illa s d o b le s . Po r e je m p lo "Hola, mundo", "camión", e t c. El t e xt o co n t e n id o d e n t ro e s t o s lit e ra le s
p u e d e e s t a r fo rm a d o p o r cu a lq u ie r n ú m e ro d e lit e ra le s d e ca rá ct e r co n ca t e n a d o s y s in la s co m illa s
s im p le s , a u n q u e s i in clu ye co m illa s d o b le s é s t a s h a n d e e s crib irs e u s a n d o s e cu e n cia s d e e s ca p e p o rq u e s i
n o e l co m p ila d o r la s in t e rp re t a ría co m o e l fin a l d e la ca d e n a .

Ap a rt e d e l fo rm a t o d e e s crit u ra d e lit e ra le s d e ca d e n a s a n t e s co m e n t a d o , q u e e s e l co m ú n m e n t e u s a d o e n la m a yo ría d e


le n g u a je s d e p ro g ra m a ció n , C# t a m b ié n a d m it e u n n u e vo fo rm a t o p a ra la e s crit u ra e s t o s lit e ra le s t ip o d e lit e ra le s co n s is t e n t e
e n p re ce d e rla s d e u n s ím b o lo @, ca s o e n q u e t o d o e l co n t e n id o d e la ca d e n a s e ría in t e rp re t a d o t a l cu a l, s in co n s id e ra r la
e xis t e n cia d e s e cu e n cia s d e e s ca p e . A e s t e t ip o d e lit e ra le s s e le s co n o ce co m o lit e ra le s d e c a d e n a p la n o s y p u e d e n
in clu s o o cu p a r m ú lt ip le s lín e a s . La s ig u ie n t e t a b la re co g e a lg u n o s e je m p lo s d e có m o s e in t e rp re t a n :

http://www.programacion.com/tutorial.csharp.5.html (4 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

Lit e ra l d e c a d e n a I n t e rp re t a d o c o m o . . .
"Hola\tMundo" Hola Mundo

@"Hola\tMundo" Hola\tMundo

@"Hola Hola
Mundo" Mundo

@"""Hola Mundo""" "Hola Mundo"

Ta b la 4 . 2 : Eje m p lo s d e lit e ra le s d e ca d e n a p la n o s

El ú lt im o e je m p lo d e la t a b la s e h a a p ro ve ch a d o p a ra m o s t ra r q u e s i d e n t ro d e u n lit e ra l d e ca d e n a p la n o s e d e s e a in clu ir
ca ra ct e re s d e co m illa d o b le s in q u e s e a n co n fu n d id o s co n e l fin a l d e la ca d e n a b a s t a d u p lica rlo s .

● Lit e ra l n u lo : El lit e ra l n u lo e s u n va lo r e s p e cia l q u e s e re p re s e n t a e n C# co n la p a la b ra re s e rva d a n u ll y


s e u s a co m o va lo r d e la s va ria b le s d e o b je t o n o in icia liza d a s p a ra a s í in d ica r q u e co n t ie n e n re fe re n cia s
n u la s .

Op e ra d o re s

Un o p e ra d o r e n C# e s u n s ím b o lo fo rm a d o p o r u n o o m á s ca ra ct e re s q u e p e rm it e re a liza r u n a d e t e rm in a d a o p e ra ció n e n t re
u n o o m á s d a t o s y p ro d u ce u n re s u lt a d o .

A co n t in u a ció n s e d e s crib e n cu á le s s o n lo s o p e ra d o re s in clu id o s e n e l le n g u a je cla s ifica d o s s e g ú n e l t ip o d e o p e ra cio n e s q u e


p e rm it e n re a liza r, a u n q u e h a y q u e t e n e r e n cu e n t a q u e C# p e rm it e la re d e fin ició n d e l s ig n ifica d o d e la m a yo ría d e lo s
o p e ra d o re s s e g ú n e l t ip o d e d a t o s o b re e l q u e s e a p liq u e n , p o r lo q u e lo q u e a q u í s e cu e n t a s e co rre s p o n d e co n lo s u s o s m á s
co m u n e s d e lo s m is m o s :

● Op e ra c io n e s a rit m é t ic a s : Lo s o p e ra d o re s a rit m é t ico s in clu id o s e n C# s o n lo s t íp ico s d e s u m a ( +) , re s t a


( -) , p ro d u ct o ( *) , d ivis ió n ( /) y m ó d u lo ( %) Ta m b ié n s e in clu ye n o p e ra d o re s d e "m e n o s u n a rio " ( -) y
"m á s u n a rio " ( +)

Re la cio n a d o s co n la s o p e ra cio n e s a rit m é t ica s s e e n cu e n t ra n u n p a r d e o p e ra d o re s lla m a d o s checked y unchecked


q u e p e rm it e n co n t ro la r s i s e d e s e a d e t e ct a r lo s d e s b o rd a m ie n t o s q u e p u e d a n p ro d u cirs e s i a l re a liza r e s t e t ip o d e
o p e ra cio n e s e l re s u lt a d o e s s u p e rio r a la ca p a cid a d d e l t ip o d e d a t o s d e s u s o p e ra n d o s . Es t o s o p e ra d o re s s e u s a n a s í:

checked (<expresiónAritmética>)
unchecked(<expresiónAritmética>)

Am b o s o p e ra d o re s ca lcu la n e l re s u lt a d o d e <expresiónAritmética> y lo d e vu e lve n s i d u ra n t e e l cá lcu lo n o s e


p ro d u ce n in g ú n d e s b o rd a m ie n t o . S in e m b a rg o , e n ca s o d e q u e h a ya d e s b o rd a m ie n t o ca d a u n o a ct ú a d e u n a fo rm a
d is t in t a : checked p ro vo ca u n e rro r d e co m p ila ció n s i <expresiónAritmética> e s u n a e xp re s ió n co n s t a n t e y u n a
e xce p ció n System.OverflowException s i n o lo e s , m ie n t ra s q u e unchecked d e vu e lve e l re s u lt a d o d e la e xp re s ió n
a rit m é t ica t ru n ca d o p a ra m o d o q u e q u e p a e n e l t a m a ñ o e s p e ra d o .

Po r d e fe ct o , e n a u s e n cia d e lo s o p e ra d o re s checked y unchecked lo q u e s e h a ce e s e va lu a r la s o p e ra cio n e s


a rit m é t ica s e n t re d a t o s co n s t a n t e s co m o s i s e le s a p lica s e checked y la s o p e ra cio n e s e n t re d a t o s n o co n s t a n t e s co m o
s i s e le s h u b ie s e a p lica d o unchecked.

● Op e ra c io n e s ló g ic a s : S e in clu ye n o p e ra d o re s q u e p e rm it e n re a liza r la s o p e ra cio n e s ló g ica s t íp ica s :


"a n d " ( && y &) , "o r" ( || y |) , "n o t " ( !) y "xo r" ( ^)

Lo s o p e ra d o re s && y || s e d ife re n cia d e & y | e n q u e lo s p rim e ro s re a liza n e va lu a ció n p e re zo s a y lo s s e g u n d o s n o . La


e va lu a ció n p e re zo s a co n s is t e e n q u e s i e l re s u lt a d o d e e va lu a r e l p rim e r o p e ra n d o p e rm it e d e d u cir e l re s u lt a d o d e la
o p e ra ció n , e n t o n ce s n o s e e va lú a e l s e g u n d o y s e d e vu e lve d ich o re s u lt a d o d ire ct a m e n t e , m ie n t ra s q u e la e va lu a ció n
n o p e re zo s a co n s is t e e n e va lu a r s ie m p re a m b o s o p e ra n d o s . Es d e cir, s i e l p rim e r o p e ra n d o d e u n a o p e ra ció n && e s
fa ls o s e d e vu e lve false d ire ct a m e n t e , s in e va lu a r e l s e g u n d o ; y s i e l p rim e r o p e ra n d o d e u n a || e s cie rt o s e

http://www.programacion.com/tutorial.csharp.5.html (5 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

d e vu e lve true d ire ct a m e n t e , s in e va lu a r e l o t ro .

● Op e ra c io n e s re la c io n a le s : S e h a n in clu id o lo s t ra d icio n a le s o p e ra d o re s d e ig u a ld a d ( ==) , d e s ig u a ld a d


( !=) , "m a yo r q u e " ( >) , "m e n o r q u e " ( <) , "m a yo r o ig u a l q u e " ( >=) y "m e n o r o ig u a l q u e " ( <=)

● Op e ra c io n e s d e m a n ip u la c ió n d e b it s : S e h a n in clu id o o p e ra d o re s q u e p e rm it e n re a liza r a n ive l d e


b it s o p e ra cio n e s "a n d " ( &) , "o r" ( |) , "n o t " ( ~) , "xo r" ( ^) , d e s p la za m ie n t o a izq u ie rd a ( <<) y
d e s p la za m ie n t o a d e re ch a ( >>) El o p e ra d o r << d e s p la za a izq u ie rd a re lle n a n d o co n ce ro s , m ie n t ra s q u e e l
t ip o d e re lle n o re a liza d o p o r >> d e p e n d e d e l t ip o d e d a t o s o b re e l q u e s e a p lica : s i e s u n d a t o co n s ig n o
m a n t ie n e e l s ig n o , y e n ca s o co n t ra rio re lle n a co n ce ro s .

● Op e ra c io n e s d e a s ig n a c ió n : Pa ra re a liza r a s ig n a cio n e s s e u s a e n C# e l o p e ra d o r =, o p e ra d o r q u e
a d e m á s d e re a liza r la a s ig n a ció n q u e s e le s o licit a d e vu e lve e l va lo r a s ig n a d o . Po r e je m p lo , la e xp re s ió n a
= b a s ig n a a la va ria b le a e l va lo r d e la va ria b le b y d e vu e lve d ich o va lo r, m ie n t ra s q u e la e xp re s ió n c = a
= b a s ig n a a c y a e l va lo r d e b ( e l o p e ra d o r = e s a s o cia t ivo p o r la d e re ch a )

Ta m b ié n s e h a n in clu id o o p e ra d o re s d e a s ig n a ció n co m p u e s t o s q u e p e rm it e n a h o rra r t e cle o a la h o ra d e re a liza r a s ig n a cio n e s


t a n co m u n e s co m o :

temperatura = temperatura + 15; // Sin usar asignación compuesta


temperatura += 15; // Usando asignación compuesta

La s d o s lín e a s a n t e rio re s s o n e q u iva le n t e s , p u e s e l o p e ra d o r co m p u e s t o +=lo q u e h a ce e s a s ig n a r a s u p rim e r o p e ra n d o e l


va lo r q u e t e n ía m á s e l va lo r d e s u s e g u n d o o p e ra n d o . Co m o s e ve , p e rm it e co m p a ct a r b a s t a n t e e l có d ig o .

Ap a rt e d e l o p e ra d o r d e a s ig n a ció n co m p u e s t o +=, t a m b ié n s e o fre ce n o p e ra d o re s d e a s ig n a ció n co m p u e s t o s p a ra la m a yo ría


d e lo s o p e ra d o re s b in a rio s ya vis t o s . Es t o s s o n : +=, -=, *=, /=, %=, &=, |=, ^=, <<= y >>=. Nó t e s e q u e n o h a y ve rs io n e s
co m p u e s t a s p a ra lo s o p e ra d o re s b in a rio s && y ||.

Ot ro s d o s o p e ra d o re s d e a s ig n a ció n in clu id o s s o n lo s d e in cre m e n t o ( ++) y d e cre m e n t o ( --) Es t o s o p e ra d o re s p e rm it e n ,


re s p e ct iva m e n t e , a u m e n t a r y d is m in u ir e n u n a u n id a d e l va lo r d e la va ria b le s o b re e l q u e s e a p lica n . As í, e s t a s lín e a s d e
có d ig o s o n e q u iva le n t e s :

temperatura = temperatura + 1; // Sin usar asignación compuesta ni incremento


temperatura += 1; // Usando asignación compuesta
temperatura++; // Usando incremento

S i e l o p e ra d o r ++ s e co lo ca t ra s e l n o m b re d e la va ria b le ( co m o e n e l e je m p lo ) d e vu e lve e l va lo r d e la va ria b le a n t e s d e


in cre m e n t a rla , m ie n t ra s q u e s i s e co lo ca a n t e s , d e vu e lve e l va lo r d e é s t a t ra s in cre m e n t a rla ; y lo m is m o o cu rre co n e l
o p e ra d o r --. Po r e je m p lo :

c = b++; // Se asigna a c el valor de b y luego se incrementa b


c = ++b; // Se incrementa el valor de b y luego se asigna a c

La ve n t a ja d e u s a r lo s o p e ra d o re s ++ y -- e s q u e e n m u ch a s m á q u in a s s o n m á s e ficie n t e s q u e e l re s t o d e fo rm a s d e re a liza r
s u m a s o re s t a s d e u n a u n id a d , p u e s e l co m p ila d o r t ra d u cirlo s e n u n a ú n ica in s t ru cció n e n có d ig o m á q u in a .

● Op e ra c io n e s c o n c a d e n a s : Pa ra re a liza r o p e ra cio n e s d e co n ca t e n a ció n d e ca d e n a s s e p u e d e u s a r e l


m is m o o p e ra d o r q u e p a ra re a liza r s u m a s , ya q u e e n C# s e h a re d e fin id o s u s ig n ifica d o p a ra q u e cu a n d o
s e a p liq u e e n t re o p e ra n d o s q u e s e a n ca d e n a s o q u e s e a n u n a ca d e n a y u n ca rá ct e r lo q u e h a g a s e a
co n ca t e n a rlo s . Po r e je m p lo , "Ho la "+ " m u n d o " d e vu e lve "Ho la m u n d o ", y "Ho la m u n d " + "o " t a m b ié n .

● Op e ra c io n e s d e a c c e s o a t a b la s : Un a t a b la e s u n co n ju n t o d e o rd e n a d o d e o b je t o s d e t a m a ñ o fijo .
Pa ra a cce d e r a cu a lq u ie r e le m e n t o d e e s t e co n ju n t o s e a p lica e l o p e ra d o r p o s t fijo [] s o b re la t a b la p a ra
in d ica r e n t re co rch e t e s la p o s ició n q u e o cu p a e l o b je t o a l q u e s e d e s e a a cce d e r d e n t ro d e l co n ju n t o . Es
d e cir, e s t e o p e ra d o r s e u s a a s í:

[<posiciónElemento>]

Un e je m p lo d e s u u s o e n e l q u e s e a s ig n a a l e le m e n t o q u e o cu p a la p o s ició n 3 e n u n a t a b la d e n o m b re t a b la Pru e b a e l
va lo r d e l e le m e n t o q u e o cu p a la p o s ició n 1 8 d e d ich a t a b la e s e l s ig u ie n t e :

http://www.programacion.com/tutorial.csharp.5.html (6 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

tablaPrueba[3] = tablaPrueba[18];

La s t a b la s s e e s t u d ia n d e t e n id a m e n t e e n e l Te m a 7 : Va ria b le s y t ip o s d e d a t o s

● Op e ra d o r c o n d ic io n a l: Es e l ú n ico o p e ra d o r in clu id o e n C# q u e t o m a 3 o p e ra n d o s , y s e u s a a s í:

<condición> ? <expresión1> : <expresión2>

El s ig n ifica d o d e l o p e ra n d o e s e l s ig u ie n t e : s e e va lú a <condición> S i e s cie rt a s e d e vu e lve e l re s u lt a d o d e e va lu a r


<expresión1>, y s i e s fa ls a s e d e vu e lve e l re s u lt a d o d e e va lu a r <condición2>. Un e je m p lo d e s u u s o e s :

b = (a>0)? a : 0; // Suponemos a y b de tipos enteros

En e s t e e je m p lo , s i e l va lo r d e la va ria b le a e s s u p e rio r a 0 s e a s ig n a rá a b e l va lo r d e a, m ie n t ra s q u e e n ca s o
co n t ra rio e l va lo r q u e s e le a s ig n a rá s e rá 0 .

Ha y q u e t e n e r e n cu e n t a q u e e s t e o p e ra d o r e s a s o cia t ivo p o r la d e re ch a , p o r lo q u e u n a e xp re s ió n co m o a?b:c?d:e


e s e q u iva le n t e a a?b:(c?d:e)

No h a y q u e co n fu n d ir e s t e o p e ra d o r co n la in s t ru cció n co n d icio n a l if q u e s e t ra t a rá e n e l Te m a 8 : In s t ru ccio n e s , p u e s


a u n q u e s u u t ilid a d e s s im ila r a l d e é s t a , ? d e vu e lve u n va lo r e if n o .

● Op e ra c io n e s d e d e le g a d o s : Un d e le g a d o e s u n o b je t o q u e p u e d e a lm a ce n a r e n re fe re n cia s a u n o o
m á s m é t o d o s y a t ra vé s d e l cu a l e s p o s ib le lla m a r a e s t o s m é t o d o s . Pa ra a ñ a d ir o b je t o s a u n d e le g a d o s e
u s a n lo s o p e ra d o re s + y +=, m ie n t ra s q u e p a ra q u it á rs e lo s s e u s a n lo s o p e ra d o re s - y -=. Es t o s co n ce p t o s
s e e s t u d ia rá n d e t a lla d a m e n t e e n e l Te m a 1 3 : Ev e n t o s y d e le g a d o s

● Op e ra c io n e s d e a c c e s o a o b je t o s : Pa ra a cce d e r a lo s m ie m b ro s d e u n o b je t o s e u s a e l o p e ra d o r .,
cu ya s in t a xis e s :

<objeto>.<miembro>

S i a e s u n o b je t o , e je m p lo s d e có m o lla m a r a d ife re n t e s m ie m b ro s s u yo s s o n :

a.b = 2; // Asignamos a su propiedad a el valor 2


a.f(); // Llamamos a su método f()
a.g(2); // Llamamos a su método g() pasándole como parámetro el valor entero 2
a.c += new adelegado(h) // Asociamos a su evento c el código del método h() de
// "tipo" adelegado

No s e p re o cu p e s i n o co n o ce lo s co n ce p t o s d e m é t o d o s , p ro p ie d a d e s , e ve n t o s y d e le g a d o s e n lo s q u e s e b a s a e s t e
e je m p lo , p u e s s e e xp lica n d e t a lla d a m e n t e e n t e m a s p o s t e rio re s .

● Op e ra c io n e s c o n p u n t e ro s : Un p u n t e ro e s u n a va ria b le q u e a lm a ce n a u n a re fe re n cia a u n a d ire cció n


d e m e m o ria . Pa ra o b t e n e r la d ire cció n d e m e m o ria d e u n o b je t o s e u s a e l o p e ra d o r &, p a ra a cce d e r a l
co n t e n id o d e la d ire cció n d e m e m o ria a lm a ce n a d a e n u n p u n t e ro s e u s a e l o p e ra d o r *, p a ra a cce d e r a u n
m ie m b ro d e u n o b je t o cu ya d ire cció n s e a lm a ce n a e n u n p u n t e ro s e u s a ->, y p a ra re fe re n cia r u n a
d ire cció n d e m e m o ria d e fo rm a re la t iva a u n p u n t e ro s e le a p lica e l o p e ra d o r [] d e la fo rm a
p u n t e ro [ d e s p la za m ie n t o ] . To d o s e s t o s co n ce p t o s s e e xp lica rá n m á s a fo n d o e n e l Te m a 1 8 : Có d ig o
in s e g u ro .

● Op e ra c io n e s d e o b t e n c ió n d e in fo rm a c ió n s o b re t ip o s : De t o d o s lo s o p e ra d o re s q u e n o s p e rm it e n
o b t e n e r in fo rm a ció n s o b re t ip o s d e d a t o s e l m á s im p o rt a n t e e s typeof, cu ya fo rm a d e u s o e s :

typeof(<nombreTipo>)

Es t e o p e ra d o r d e vu e lve u n o b je t o d e t ip o System.Type co n in fo rm a ció n s o b re e l t ip o d e n o m b re <nombreTipo> q u e


p o d re m o s co n s u lt a r a t ra vé s d e lo s m ie m b ro s o fre cid o s p o r d ich o o b je t o . Es t a in fo rm a ció n in clu ye d e t a lle s t a le s co m o
cu á le s s o n s u s m ie m b ro s , cu á l e s s u t ip o p a d re o a q u é e s p a cio d e n o m b re s p e rt e n e ce .

http://www.programacion.com/tutorial.csharp.5.html (7 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

S i lo q u e q u e re m o s e s d e t e rm in a r s i u n a d e t e rm in a d a e xp re s ió n e s d e u n t ip o u o t ro , e n t o n ce s e l o p e ra d o r a u s a r e s
is, cu ya s in t a xis e s la s ig u ie n t e :

<expresión> is <nombreTipo>

El s ig n ifica d o d e e s t e o p e ra d o r e s e l s ig u ie n t e : s e e va lú a <expresión>. S i e l re s u lt a d o d e é s t a e s d e l t ip o cu yo
n o m b re s e in d ica e n < n o m b re Tip o > s e d e vu e lve t ru e ; y s i n o , s e d e vu e lve fa ls e . Co m o s e ve rá e n e l Te m a 5 : Cla s e s ,
e s t e o p e ra d o r s u e le u s a rs e e n m é t o d o s p o lim ó rfico s .

Fin a lm e n t e , C# in co rp o ra u n t e rce r o p e ra d o r q u e p e rm it e o b t e n e r in fo rm a ció n s o b re u n t ip o d e d a t o : s iz e o f Es t e


o p e ra d o r p e rm it e o b t e n e r e l n ú m e ro d e b yt e s q u e o cu p a rá n e n m e m o ria lo s o b je t o s d e u n t ip o , y s e u s a a s í:

sizeof(<nombreTipo>)

s iz e o f s ó lo p u e d e u s a rs e d e n t ro d e có d ig o in s e g u ro , q u e p o r a h o ra b a s t a co n s id e ra r q u e s o n zo n a s d e có d ig o d o n d e
e s p o s ib le u s a r p u n t e ro s . No s e rá h a s t a e l Te m a 1 8 : Có d ig o in s e g u ro cu a n d o lo t ra t a re m o s e n p ro fu n d id a d .

Ad e m á s , sizeof s ó lo s e p u e d e a p lica r s o b re n o m b re s d e t ip o s d e d a t o s cu yo s o b je t o s s e p u e d a n a lm a ce n a r
d ire ct a m e n t e e n p ila . Es d e cir, q u e s e a n e s t ru ct u ra s ( s e ve rá n e n e l Te m a 1 3 ) o t ip o s e n u m e ra d o s ( s e ve rá n e n e l
Te m a 1 4 )

● Op e ra c io n e s d e c re a c ió n d e o b je t o s : El o p e ra d o r m á s t íp ica m e n t e u s a d o p a ra cre a r o b je t o s e s n e w ,
q u e s e u s a a s í:

new <nombreTipo>(<parametros>)

Es t e o p e ra d o r cre a u n o b je t o d e <nombreTipo> p a s á n d o le a s u m é t o d o co n s t ru ct o r lo s p a rá m e t ro s in d ica d o s e n


<parámetros> y d e vu e lve u n a re fe re n cia a l m is m o . En fu n ció n d e l t ip o y n ú m e ro d e e s t o s p a rá m e t ro s s e lla m a rá a
u n o u o t ro d e lo s co n s t ru ct o re s d e l o b je t o . As í, s u p o n ie n d o q u e a 1 y a 2 s e a n va ria b le s d e t ip o Avió n , e je m p lo s d e u s o
d e l o p e ra d o r new s o n :

Avión a1 = new Avión(); // Se llama al constructor sin parámetros de Avión


Avión a2 = new Avión("Caza"); // Se llama al constructor de Avión que toma
// como parámetro una cadena

En ca s o d e q u e e l t ip o d e l q u e s e h a ya s o licit a d o la cre a ció n d e l o b je t o s e a u n a cla s e , é s t e s e cre a rá e n m e m o ria


d in á m ica , y lo q u e new d e vo lve rá s e rá u n a re fe re n cia a la d ire cció n d e p ila d o n d e s e a lm a ce n a u n a re fe re n cia a la
d ire cció n d e l o b je t o e n m e m o ria d in á m ica . S in e m b a rg o , s i e l o b je t o a cre a r p e rt e n e ce a u n a e s t ru ct u ra o a u n t ip o
e n u m e ra d o , e n t o n ce s é s t e s e cre a rá d ire ct a m e n t e e n la p ila y la re fe re n cia d e vu e lt a p o r e l new s e re fe rirá
d ire ct a m e n t e a l o b je t o cre a d o . Po r e s t a s ra zo n e s , a la s cla s e s s e le s co n o ce co m o t ip o s re fe re n c ia ya q u e d e s u s
o b je t o s e n p ila s ó lo s e a lm a ce n a u n a re fe re n cia a la d ire cció n d e m e m o ria d in á m ica d o n d e ve rd a d e ra m e n t e s e
e n cu e n t ra n ; m ie n t ra s q u e a la s e s t ru ct u ra s y t ip o s e n u m e ra d o s s e le s co n o ce co m o t ip o s v a lo r ya s u s o b je t o s s e
a lm a ce n a n d ire ct a m e n t e e n p ila .

C# p ro p o rcio n a o t ro o p e ra d o r q u e t a m b ié n n o s p e rm it e cre a r o b je t o s . És t e e s stackalloc, y s e u s a a s í:

stackalloc <nombreTipo>[<nElementos>]

Es t e o p e ra d o r lo q u e h a ce e s cre a r e n p ila u n a t a b la d e t a n t o s e le m e n t o s d e t ip o <nombreTipo> co m o in d iq u e


<nElementos> y d e vo lve r la d ire cció n d e m e m o ria e n q u e é s t a h a s id o cre a d a . Po r e je m p lo :

s t a c k a llo c s ó lo p u e d e u s a rs e p a ra in icia liza r p u n t e ro s a o b je t o s d e t ip o s va lo r d e cla ra d o s co m o va ria b le s lo ca le s . Po r


e je m p lo :

int * p = stackalloc[100]; // p apunta a una tabla de 100 enteros.

● Op e ra c io n e s d e c o n v e rs ió n : Pa ra co n ve rt ir u n o s o b je t o s e n o t ro s s e u t iliza e l o p e ra d o r d e co n ve rs ió n ,
q u e n o co n s is t e m á s q u e e n p re ce d e r la e xp re s ió n a co n ve rt ir d e l n o m b re e n t re p a ré n t e s is d e l t ip o a l q u e
s e d e s e a co n ve rt ir e l re s u lt a d o d e e va lu a rla . Po r e je m p lo , s i l e s u n a va ria b le d e t ip o lo n g y s e d e s e a
a lm a ce n a r s u va lo r d e n t ro d e u n a va ria b le d e t ip o in t lla m a d a i, h a b ría q u e co n ve rt ir p re via m e n t e s u
va lo r a t ip o in t a s í:

http://www.programacion.com/tutorial.csharp.5.html (8 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

i = (int) l; // Asignamos a i el resultado de convertir el valor de l a tipo int

Lo s t ip o s in t y lo n g e s t á n p re d e fin id o s e n C# y p e rm it e a lm a ce n a r va lo re s e n t e ro s co n s ig n o . La ca p a cid a d d e in t e s
d e 3 2 b it s , m ie n t ra s q u e la d e lo n g e s d e 6 4 b it s . Po r t a n t o , a n o s e r q u e h a g a m o s u s o d e l o p e ra d o r d e co n ve rs ió n , e l
co m p ila d o r n o n o s d e ja rá h a ce r la a s ig n a ció n , ya q u e a l s e r m a yo r la ca p a cid a d d e lo s lo n g , n o t o d o va lo r q u e s e
p u e d a a lm a ce n a r e n u n lo n g t ie n e p o rq u é p o d e rs e a lm a ce n a r e n u n in t . Es d e cir, n o e s vá lid o :

i = l; //ERROR: El valor de l no tiene porqué caber en i

Es t a re s t ricció n e n la a s ig n a ció n la im p o n e e l co m p ila d o r d e b id o a q u e s in e lla p o d ría n p ro d u cirs e e rro re s m u y d ifícile s


d e d e t e ct a r a n t e t ru n ca m ie n t o s n o e s p e ra d o s d e b id o a l q u e e l va lo r d e la va ria b le fu e n t e e s s u p e rio r a la ca p a cid a d d e
la va ria b le d e s t in o .

Exis t e o t ro o p e ra d o r q u e p e rm it e re a liza r o p e ra cio n e s d e co n ve rs ió n d e fo rm a m u y s im ila r a l ya vis t o . És t e e s e l


o p e ra d o r a s , q u e s e u s a a s í:

<expresión> as <tipoDestino>

Lo q u e h a ce e s d e vo lve r e l re s u lt a d o d e co n ve rt ir e l re s u lt a d o d e e va lu a r < e xp re s ió n > a l t ip o in d ica d o e n


< t ip o De s t in o > Po r e je m p lo , p a ra a lm a ce n a r e n u n a va ria b le p e l re s u lt a d o d e co n ve rt ir u n o b je t o t a t ip o t ip o Pe rs o n a
s e h a ría :

p = t as Persona;

La s ú n ica s d ife re n cia s e n t re u s a r u n o u o t ro o p e ra d o r d e co n ve rs ió n s o n :

❍ as s ó lo e s a p lica b le a t ip o s re fe re n cia y s ó lo a a q u e llo s ca s o s e n q u e e xis t a n co n ve rs io n e s


p re d e fin id a s e n e l le n g u a je . Co m o s e ve rá m á s a d e la n t e , e s t o s ó lo in clu ye co n ve rs io n e s e n t re u n
t ip o y t ip o s p a d re s s u yo s y e n t re u n t ip o y t ip o s h ijo s s u yo s .

Un a co n s e cu e n cia d e e s t o e s q u e e l p ro g ra m a d o r p u e d e d e fin ir có m o h a ce r co n ve rs io n e s d e t ip o s p o r é l
d e fin id o s y o t ro s m e d ia n t e e l o p e ra d o r (), p e ro n o m e d ia n t e as.

Es t o s e d e b e a q u e a s ú n ica m e n t e in d ica q u e s e d e s e a q u e u n a re fe re n cia a u n o b je t o e n m e m o ria d in á m ica s e


t ra t e co m o s i e l o b je t o fu e s e d e o t ro t ip o , p e ro n o im p lica co n ve rs ió n n in g u n a . S in e m b a rg o , () s í q u e im p lica
co n ve rs ió n s i e l <tipoDestino> n o e s co m p a t ib le co n e l t ip o d e l o b je t o re fe re n cia d o . Ob via m e n t e , e l o p e ra d o r
s e a p lira rá m u ch o m á s rá p id o e n lo s ca s o s d o n d e n o s e a n e ce s a rio co n ve rt ir.

❍ En ca s o d e q u e s e s o licit e h a ce r u n a co n ve rs ió n in vá lid a a s d e vu e lve n u ll m ie n t ra s q u e () p ro d u ce


u n a e xce p ció n System.InvalidCastException.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.5.html (9 de 9) [20/10/2002 18:20:42]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 5 : Cla s e s
❍ De fin ició n d e cla s e s
❍ Cre a ció n d e o b je t o s
❍ He re n cia y m é t o d o s virt u a le s
❍ La cla s e p rim ig e n ia : S ys t e m . Ob je ct
❍ Po lim o rfis m o
❍ Ocu lt a ció n d e m ie m b ro s
❍ Mie m b ro s d e t ip o
❍ En ca p s u la ció n

Te m a 5 : Cla s e s

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

D e fin ic ió n d e c la s e s

Co n c e p t o s d e c la s e y o b je t o

C# e s u n le n g u a je o rie n t a d o a o b je t o s p u ro , lo q u e s ig n ifica q u e t o d o co n lo q u e va m o s a t ra b a ja r e n e s t e le n g u a je s o n
o b je t o s . Un o b je t o e s u n a g re g a d o d e d a t o s y d e m é t o d o s q u e p e rm it e n m a n ip u la r d ich o s d a t o s , y u n p ro g ra m a e n C# n o
e s m á s q u e u n co n ju n t o d e o b je t o s q u e in t e ra ccio n a n u n o s co n o t ro s a t ra vé s d e s u s m é t o d o s .

Un a c la s e e s la d e fin ició n d e la s ca ra ct e rís t ica s co n cre t a s d e u n d e t e rm in a d o t ip o d e o b je t o s . Es d e cir, d e cu á le s s o n lo s


d a t o s y lo s m é t o d o s d e lo s q u e va n a d is p o n e r t o d o s lo s o b je t o s d e e s e t ip o . Po r e s t a ra zó n , s e s u e le d e cir q u e e l t ip o d e
d a t o d e u n o b je t o e s la cla s e q u e d e fin e la s ca ra ct e rís t ica s d e l m is m o .

S in t a x is d e d e fin ic ió n d e c la s e s

La s in t a xis b á s ica p a ra d e fin ir u n a cla s e e s la q u e a co n t in u a ció n s e m u e s t ra :

class <nombreClase>
{
<miembros>
}

De e s t e m o d o s e d e fin iría u n a cla s e d e n o m b re <nombreClase> cu yo s m ie m b ro s s o n lo s d e fin id o s e n <miembros> Lo s


m ie m b ro s d e u n a cla s e s o n lo s d a t o s y m é t o d o s d e lo s q u e va n a d is p o n e r t o d o s lo s o b je t o s d e la m is m a . Un e je m p lo d e
có m o d e cla ra r u n a cla s e d e n o m b re A q u e n o t e n g a n in g ú n m ie m b ro e s la s ig u ie n t e :

class A

http://www.programacion.com/tutorial.csharp.6.html (1 de 24) [20/10/2002 18:21:00]


Programación en castellano. El lenguaje de programación C#

{}

Un a cla s e a s í d e cla ra d a n o d is p o n d rá d e n in g ú n m ie m b ro a e xce p ció n d e lo s im p lícit a m e n t e d e fin id o s d e m a n e ra co m ú n


p a ra t o d o s lo s o b je t o s q u e cre e m o s e n C# . Es t o s m ie m b ro s lo s ve re m o s d e n t ro d e p o co e n e s t e m is m o t e m a b a jo e l
e p íg ra fe La cla s e p rim ig e n ia : S y s t e m . Ob je ct .

Au n q u e e n C# h a y m u ch o s t ip o s d e m ie m b ro s d is t in t o s , p o r a h o ra va m o s a co n s id e ra r q u e e s t o s ú n ica m e n t e p u e d e n s e r
ca m p o s o m é t o d o s y va m o s a h a b la r u n p o co a ce rca d e e llo s y d e có m o s e d e fin e n :

● Ca m p o s : Un c a m p o e s u n d a t o co m ú n a t o d o s lo s o b je t o s d e u n a d e t e rm in a d a cla s e . Pa ra d e fin ir
cu á le s s o n lo s ca m p o s d e lo s q u e u n a cla s e d is p o n e s e u s a la s ig u ie n t e s in t a xis d e n t ro d e la zo n a
s e ñ a la d a co m o <miembros> e n la d e fin ició n d e la m is m a :

<tipoCampo> <nombreCampo>;

El n o m b re q u e d e m o s a l ca m p o p u e d e s e r cu a lq u ie r id e n t ifica d o r q u e q u e ra m o s s ie m p re y cu a n d o s ig a la s re g la s d e s crit a s
e n e l Te m a 4 : As p e ct o s Lé x ico s p a ra la e s crit u ra d e id e n t ifica d o re s y n o co in cid a co n e l n o m b re d e n in g ú n o t ro m ie m b ro
p re via m e n t e d e fin id o e n la d e fin ició n d e cla s e .

Lo s ca m p o s d e u n o b je t o s o n a s u ve z o b je t o s , y e n <tipoCampo> h e m o s d e in d ica r cu á l e s e l t ip o d e d a t o d e l o b je t o q u e
va m o s a cre a r. És t e t ip o p u e d e co rre s p o n d e rs e co n cu a lq u ie ra q u e lo s p re d e fin id o s e n la BCL o co n cu a lq u ie r o t ro q u e
n o s o t ro s h a lla m o s d e fin id o s ig u ie n d o la s in t a xis a rrib a m o s t ra d a . A co n t in u a ció n s e m u e s t ra u n e je m p lo d e d e fin ició n d e
u n a cla s e d e n o m b re Pe rs o n a q u e d is p o n e d e t re s ca m p o s :

class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF
}

S e g ú n e s t a d e fin ició n , t o d o s lo s o b je t o s d e cla s e Pe rs o n a in co rp o ra rá n ca m p o s q u e a lm a ce n a rá n cu á l e s e l n o m b re d e la


p e rs o n a q u e ca d a o b je t o re p re s e n t a , cu á l e s s u e d a d y cu á l e s s u NIF. El t ip o in t in clu id o e n la d e fin ició n d e l ca m p o Ed a d
e s u n t ip o p re d e fin id o e n la BCL cu yo s o b je t o s s o n ca p a ce s d e a lm a ce n a r n ú m e ro s e n t e ro s co n s ig n o co m p re n d id o s e n t re -
2 . 1 4 7 . 4 8 3 . 6 4 8 y 2 . 1 4 7 . 4 8 3 . 6 4 7 ( 3 2 b it s ) , m ie n t ra s q u e s t rin g e s u n t ip o p re d e fin id o q u e p e rm it e a lm a ce n a r ca d e n a s d e
t e xt o q u e s ig a n e l fo rm a t o d e lo s lit e ra le s d e ca d e n a vis t o e n e l Te m a 4 : As p e ct o s Lé x ico s

Pa ra a cce d e r a u n ca m p o d e u n d e t e rm in a d o o b je t o s e u s a la s in t a xis :

<objeto>.<campo>

Po r e je m p lo , p a ra a cce d e r a l ca m p o Ed a d d e u n o b je t o Pe rs o n a lla m a d o p y ca m b ia r s u va lo r p o r 2 0 s e h a ría :

p.Edad = 20;

En re a lid a d lo m a rca d o co m o <objeto> n o t ie n e p o rq u é s e r n e ce s a ria m e n t e e l n o m b re d e a lg ú n o b je t o , s in o q u e p u e d e


s e r cu a lq u ie r e xp re s ió n q u e p ro d u zca co m o re s u lt a d o u n a re fe re n cia n o n u la a u n o b je t o ( s i p ro d u je s e null s e la n za ría
u n a e xce p ció n d e l t ip o p re d e fin id o System.NullPointerException)

● Mé t o d o s : Un m é t o d o e s u n co n ju n t o d e in s t ru ccio n e s a la s q u e s e le s a s o cia u n n o m b re d e m o d o q u e
s i s e d e s e a e je cu t a rla s b a s t a re fe re n cia rla s a t ra vé s d e d ich o n o m b re e n ve z d e t e n e r q u e e s crib irla s .
De n t ro d e e s t a s in s t ru ccio n e s e s p o s ib le a cce d e r co n t o t a l lib e rt a d a la in fo rm a ció n a lm a ce n a d a e n lo s
ca m p o s p e rt e n e cie n t e s a la cla s e d e n t ro d e la q u e e l m é t o d o s e h a d e fin id o , p o r lo q u e co m o a l
p rin cip io d e l t e m a s e in d icó , lo s m é t o d o s p e rm it e n m a n ip u la r lo s d a t o s a lm a ce n a d o s e n lo s o b je t o s .

La s in t a xis q u e s e u s a e n C# p a ra d e fin ir lo s m é t o d o s e s la s ig u ie n t e :

<tipoDevuelto> <nombreMétodo> (<parametros>)


{
<instrucciones>
}

http://www.programacion.com/tutorial.csharp.6.html (2 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

To d o m é t o d o p u e d e d e vo lve r u n o b je t o co m o re s u lt a d o d e la e je cu ció n d e la s in s t ru ccio n e s q u e lo fo rm a n , y e l t ip o


d e d a t o a l q u e p e rt e n e ce e s t e o b je t o e s lo q u e s e in d ica e n <tipoDevuelto>. S i n o d e vu e lve n a d a s e in d ica v o id ,
y s i d e vu e lve a lg o e s o b lig a t o rio fin a liza r la e je cu ció n d e s u s in s t ru ccio n e s co n a lg u n a in s t ru cció n return
<objeto>; q u e in d iq u e q u é o b je t o h a d e d e vo lve rs e .

Op cio n a lm e n t e t o d o m é t o d o p u e d e re cib ir e n ca d a lla m a d a u n a lis t a d e o b je t o s a lo s q u e p o d rá a cce d e r d u ra n t e la


e je cu ció n d e s u s in s t ru ccio n e s . En <parametros> s e in d ica e s cu á le s s o n lo s t ip o s d e d a t o d e e s t o s o b je t o s y cu á l
e s e l n o m b re co n e l q u e h a rá n re fe re n cia la s in s t ru ccio n e s d e l m é t o d o a ca d a u n o d e e llo s . Au n q u e lo s o b je t o s q u e
p u e d e re cib ir e l m é t o d o p u e d e n s e r d ife re n t e s ca d a ve z q u e s e s o licit e s u e je cu ció n , s ie m p re h a n d e s e r d e lo s
m is m o s t ip o s y h a n d e s e g u ir e l o rd e n e s t a b le cid o e n <parametros>.

Un e je m p lo d e có m o d e cla ra r u n m é t o d o d e n o m b re Cumpleaños e s la s ig u ie n t e m o d ifica ció n d e la d e fin ició n d e la


cla s e Pe rs o n a u s a d a a n t e s co m o e je m p lo :

class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF
void Cumpleaños() // Incrementa en uno de la edad del objeto Persona
{
Edad++;
}
}

La s in t a xis u s a d a p a ra lla m a r a lo s m é t o d o s d e u n o b je t o e s la m is m a q u e la u s a d a p a ra lla m a r a s u s ca m p o s , s ó lo


q u e a h o ra t ra s e l n o m b re d e l m é t o d o a l q u e s e d e s e a lla m a r h a y q u e in d ica r e n t re p a ré n t e s is cu á le s s o n lo s va lo re s
q u e s e d e s e a d a r a lo s p a rá m e t ro s d e l m é t o d o a l h a ce r la lla m a d a . O s e a , s e e s crib e :

<objeto>.<método>(<parámetros>)

Co m o e s ló g ico , s i e l m é t o d o n o t o m a s e p a rá m e t ro s s e d e ja ría n va cío s lo s p a rá m e t ro s e n la lla m a d a a l m is m o . Po r


e je m p lo , p a ra lla m a r a l m é t o d o Cumpleaños() d e u n o b je t o Persona lla m a d o p s e h a ría :

p.Cumpleaños(); // El método no toma parámetros, luego no le pasamos ninguno

Es im p o rt a n t e s e ñ a la r q u e e n u n a m is m a cla s e p u e d e n d e fin irs e va rio s m é t o d o s co n e l m is m o n o m b re s ie m p re y


cu a n d o t o m e n d ife re n t e n ú m e ro o t ip o d e p a rá m e t ro s . A e s t o s e le co n o ce co m o s o b re c a rg a r d e m é t o d o s , y e s
p o s ib le ya q u e cu a n d o s e le s lla m e e l co m p ila d o r s a b rá a cu a l lla m a r a p a rt ir d e <parámetros> p a s a d o s e n la
lla m a d a .

S in e m b a rg o , lo q u e n o e s p e rm it e e s d e fin ir va rio s m é t o d o s q u e s ó lo s e d ife re n cie n e n s u va lo r d e re t o rn o , ya q u e


co m o é s t e n o s e t ie n e p o rq u é in d ica r a l lla m a rlo s n o p o d ría d ife re n cia rs e a q u e m é t o d o e n co n cre t o s e h a ce
re fe re n cia e n ca d a lla m a d a . Po r e je m p lo , a p a rt ir d e la lla m a d a :

p.Cumpleaños();

S i a d e m á s d e la ve rs ió n d e Cu m p le a ñ o s ( ) q u e n o re t o rn a n a d a h u b ie s e o t ra q u e re t o rn a s e u n int, ¿ có m o s a b ría
e n t o n ce s e l co m p ila d o r a cu á l lla m a r?

An t e s d e co n t in u a r e s p re cis o s e ñ a la r q u e e n C# t o d o , in clu id o lo s lit e ra le s , s o n o b je t o s d e l t ip o d e ca d a lit e ra l y p o r t a n t o


p u e d e n co n t a r co n m ie m b ro s a lo s q u e s e a cce d e ría t a l y co m o s e h a e xp lica d o . Pa ra e n t e n d e r e s t o n o h a y n a d a m e jo r
q u e u n e je m p lo :

string s = 12.ToString();

Es t e có d ig o a lm a ce n a e l lit e ra l d e ca d e n a "12" e n la va ria b le s , p u e s 12 e s u n o b je t o d e t ip o int ( t ip o q u e re p re s e n t a


e n t e ro s ) y cu e n t a cu e n t a co n e l m é t o d o co m ú n a t o d o s lo s ints lla m a d o ToString() q u e lo q u e h a ce e s d e vo lve r u n a
ca d e n a cu yo s ca ra ct e re s s o n lo s d íg it o s q u e fo rm a n e l e n t e ro re p re s e n t a d o p o r e l int s o b re e l q u e s e a p lica ; y co m o la
va ria b le s e s d e t ip o string ( t ip o q u e re p re s e n t a ca d e n a s ) e s p e rfe ct a m e n t e p o s ib le a lm a ce n a r d ich a ca d e n a e n e lla , q u e
e s lo q u e s e h a ce e n e l có d ig o a n t e rio r.

http://www.programacion.com/tutorial.csharp.6.html (3 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

Cre a c ió n d e o b je t o s

Op e ra d o r n e w

Ah o ra q u e ya s a b e m o s có m o d e fin ir la s cla s e s d e o b je t o s q u e p o d re m o s u s a r e n n u e s t ra s a p lica cio n e s h a lle g a d o e l


m o m e n t o d e e xp lica r có m o cre a r o b je t o s d e u n a d e t e rm in a d a cla s e . Alg o d e e llo ya s e in t ro d u jo e n e l Te m a 4 : As p e ct o s
Lé x ico s cu a n d o s e co m e n t ó la u t ilid a d d e l o p e ra d o r new, q u e p re cis a m e n t e e s cre a r o b je t o s y cu ya s in t a xis e s :

new <nombreTipo>(<parametros>)

Es t e o p e ra d o r cre a u n n u e vo o b je t o d e l t ip o cu yo n o m b re s e le in d ica y lla m a d u ra n t e s u p ro ce s o d e cre a ció n a l


co n s t ru ct o r d e l m is m o a p ro p ia d o s e g ú n lo s va lo re s q u e s e le p a s e n e n <parametros>, d e vo lvie n d o u n a re fe re n cia a l
o b je t o re cié n cre a d o . Ha y q u e re s a lt a r e l h e ch o d e q u e n e w n o d e vu e lve e l p ro p io o b je t o cre a d o , s in o u n a re fe re n cia a la
d ire cció n d e m e m o ria d in á m ica d o n d e e n re a lid a d s e h a cre a d o .

El a n t e s co m e n t a d o c o n s t ru c t o r d e u n o b je t o n o e s m á s q u e u n m é t o d o d e fin id o e n la d e fin ició n d e s u t ip o q u e t ie n e e l


m is m o n o m b re q u e la cla s e a la q u e p e rt e n e ce e l o b je t o y n o t ie n e va lo r d e re t o rn o . Co m o new s ie m p re d e vu e lve u n a
re fe re n cia a la d ire cció n d e m e m o ria d o n d e s e cre e e l o b je t o y lo s co n s t ru ct o re s s ó lo p u e d e n u s a rs e co m o o p e ra n d o s d e
new, n o t ie n e s e n t id o q u e u n co n s t ru ct o r d e vu e lva o b je t o s , p o r lo q u e n o t ie n e s e n t id o in clu ir e n s u d e fin ició n u n ca m p o
< t ip o De vu e lt o > y e l co m p ila d o r co n s id e ra e rró n e o h a ce rlo ( a u n q u e s e in d iq u e void)

El co n s t ru ct o r re cib e e s e n o m b re d e b id o a q u e s u có d ig o s u e le u s a rs e p re cis a m e n t e p a ra co n s t ru ir e l o b je t o , p a ra
in icia liza r s u s m ie m b ro s . Po r e je m p lo , a n u e s t ra cla s e d e e je m p lo Pe rs o n a le p o d ría m o s a ñ a d ir u n co n s t ru ct o r d e já n d o la
a s í:

class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF

void Cumpleaños() // Incrementa en uno la edad del objeto Persona


{
Edad++;
}

Persona (string nombre, int edad, string nif) // Constructor


{
Nombre = nombre;
Edad = edad;
NIF = nif;
}
}

Co m o s e ve e n e l có d ig o , e l co n s t ru ct o r t o m a co m o p a rá m e t ro s lo s va lo re s co n lo s q u e d e s e e m o s in icia liza r e l o b je t o a
cre a r. Gra cia s a é l, p o d e m o s cre a r u n o b je t o Persona d e n o m b re Jo s é , d e 2 2 a ñ o s d e e d a d y NIF 1 2 3 4 4 3 2 1 - A a s í:

new Persona("José", 22, "12344321-A")

Nó t e s e q u e la fo rm a e n q u e s e p a s a n p a rá m e t ro s a l co n s t ru ct o r co n s is t e e n in d ica r lo s va lo re s q u e s e h a d e d a r a ca d a
u n o d e lo s p a rá m e t ro s in d ica d o s e n la d e fin ició n d e l m is m o s e p a rá n d o lo s p o r co m a s . Ob via m e n t e , s i u n p a rá m e t ro s e
d e fin ió co m o d e t ip o string h a b rá q u e p a s a rle u n a ca d e n a , s i s e d e fin ió d e t ip o int h a b rá q u e p a s a rle u n e n t e ro y, e n
g e n e ra l, h a t o d o p a rá m e t ro h a b rá q u e p a s a rle u n va lo r d e s u m is m o t ip o ( o d e a lg u n o co n ve rt ib le a l m is m o ) ,
p ro d u cié n d o s e u n e rro r a l co m p ila r s i n o s e h a ce a s í.

En re a lid a d u n o b je t o p u e d e t e n e r m ú lt ip le s co n s t ru ct o re s , a u n q u e p a ra d ife re n cia r a u n o s d e o t ro s e s o b lig a t o rio q u e s e


d ife re n cie n e n e l n ú m e ro u o rd e n d e lo s p a rá m e t ro s q u e a ce p t a n , ya q u e e l n o m b re d e t o d o s e llo s h a d e co in cid ir co n e l
n o m b re d e la cla s e d e la q u e s o n m ie m b ro s . De e s e m o d o , cu a n d o cre e m o s e l o b je t o e l co m p ila d o r p o d rá in t e lig e n t e m e n t e
d e t e rm in a r cu á l d e lo s co n s t ru ct o re s h a d e e je cu t a rs e e n fu n ció n d e lo s va lo re s q u e le p a s e m o s a l new.

Un a ve z cre a d o u n o b je t o lo m á s n o rm a l e s a lm a ce n a r la d ire cció n d e vu e lt a p o r new e n u n a va ria b le d e l t ip o a p ro p ia d o


p a ra e l o b je t o cre a d o . El s ig u ie n t e e je m p lo - q u e co m o e s ló g ico irá d e n t ro d e la d e fin ició n d e a lg ú n m é t o d o - m u e s t ra có m o

http://www.programacion.com/tutorial.csharp.6.html (4 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

cre a r u n a va ria b le d e t ip o Persona lla m a d a p y có m o a lm a ce n a r e n e lla la d ire cció n d e l o b je t o q u e d e vo lve ría la a n t e rio r
a p lica ció n d e l o p e ra d o r n e w :

Persona p; // Creamos variable p


p = new Persona("Jose", 22, "12344321-A");
// Almacenamos en p el objeto creado con new

A p a rt ir d e e s t e m o m e n t o la va ria b le p co n t e n d rá u n a re fe re n cia a u n o b je t o d e cla s e Persona q u e re p re s e n t a rá a u n a


p e rs o n a lla m a d a Jo s é d e 2 2 a ñ o s y NIF 1 2 3 4 4 3 2 1 - A. O lo q u e p rá ct ica m e n t e e s lo m is m o y s u e le s e r la fo rm a
co m ú n m e n t e u s a d a p a ra d e cirlo : la va ria b le p re p re s e n t a a u n a p e rs o n a lla m a d a Jo s é d e 2 2 a ñ o s y NIF 1 2 3 4 4 3 2 1 - A.

Co m o lo m á s n o rm a l s u e le s e r cre a r va ria b le s d o n d e a lm a ce n a r re fe re n cia s a o b je t o s q u e cre e m o s , la s in s t ru ccio n e s


a n t e rio re s p u e d e n co m p a ct a rs e e n u n a s o la a s í:

Persona p = new Persona("José", 22, "12344321-A");

De h e ch o , u n a s in t a xis m á s g e n e ra l p a ra la d e fin ició n d e va ria b le s e s la s ig u ie n t e :

<tipoDato> <nombreVariable> = <valorInicial>;

La p a rt e = <valorInicial> d e e s t a s in t a xis e s e n re a lid a d o p cio n a l, y s i n o s e in clu ye la va ria b le d e cla ra d a p a s a rá a


a lm a ce n a r u n a re fe re n cia n u la ( co n t e n d rá e l lit e ra l null)

Co n s t ru c t o r p o r d e fe c t o

No e s o b lig a t o rio d e fin ir u n co n s t ru ct o r p a ra ca d a cla s e , y e n ca s o d e q u e n o d e fin a m o s n in g u n o e l co m p ila d o r cre a rá u n o


p o r n o s o t ro s s in p a rá m e t ro s n i in s t ru ccio n e s . Es d e cir, co m o s i s e h u b ie s e d e fin id o d e e s t a fo rm a :

<nombreTipo>()
{
}

Gra cia s a e s t e co n s t ru ct o r in t ro d u cid o a u t o m á t ica m e n t e p o r e l co m p ila d o r, s i Coche e s u n a cla s e e n cu ya d e fin ició n n o s e


h a in clu id o n in g ú n co n s t ru ct o r, s ie m p re s e rá p o s ib le cre a r u n o n u e vo u s a n d o e l o p e ra d o r new a s í:

Coche c = new Coche();


// Crea coche c llamando al constructor por defecto de Coche

Ha y q u e t e n e r e n cu e n t a u n a co s a : e l co n s t ru ct o r p o r d e fe ct o e s s ó lo in clu id o p o r e l co m p ila d o r s i n o h e m o s d e fin id o


n in g ú n o t ro co n s t ru ct o r. Po r t a n t o , s i t e n e m o s u n a cla s e e n la q u e h a ya m o s d e fin id o a lg ú n co n s t ru ct o r co n p a rá m e t ro s
p e ro n in g u n o s in p a rá m e t ro s n o s e rá vá lid o cre a r o b je t o s d e la m is m a lla m a n d o a l co n s t ru ct o r s in p a rá m e t ro s , p u e s e l
co m p ila d o r n o lo h a b rá d e fin id o a u t o m á t ica m e n t e . Po r e je m p lo , co n la ú lt im a ve rs ió n d e la cla s e d e e je m p lo Pe rs o n a e s
in vá lid o h a ce r:

Persona p = new Persona();


// ERROR: El único constructor de persona toma 3 parámetros

Re fe re n c ia a l o b je t o a c t u a l c o n t h is

De n t ro d e l có d ig o d e cu a lq u ie r m é t o d o d e u n o b je t o s ie m p re e s p o s ib le h a ce r re fe re n cia a l p ro p io o b je t o u s a n d o la p a la b ra
re s e rva d a this. Es t o p u e d e ve n ir b ie n a la h o ra d e e s crib ir co n s t ru ct o re s d e o b je t o s d e b id o a q u e p e rm it e q u e lo s
n o m b re s q u e d e m o s a lo s p a rá m e t ro s d e l co n s t ru ct o r p u e d a n co in cid ir n o m b re s d e lo s ca m p o s d e l o b je t o s in q u e h a ya
n in g ú n p ro b le m a . Po r e je m p lo , e l co n s t ru ct o r d e la cla s e Pe rs o n a e s crit o a n t e rio rm e n t e s e p u e d e re e s crib ir a s í u s a n d o
this:

Persona (string Nombre, int Edad, string NIF)


{
this.Nombre = Nombre;
this.Edad = Edad;
this.NIF = NIF;
}

http://www.programacion.com/tutorial.csharp.6.html (5 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

Es d e cir, d e n t ro d e u n m é t o d o co n p a rá m e t ro s cu yo s n o m b re s co in cid a n co n ca m p o s , s e d a p re fe re n cia a lo s p a rá m e t ro s y


p a ra h a ce r re fe re n cia a lo s ca m p o s h a y q u e p re fija rlo s co n e l this t a l y co m o s e m u e s t ra e n e l e je m p lo .

El e je m p lo a n t e rio r p u e d e q u e n o re s u lt e m u y in t e re s a n t e d e b id o a q u e p a ra e vit a r t e n e r q u e u s a r this p o d ría h a b e rs e


e s crit o e l co n s t ru ct o r t a l y co m o s e m o s t ró e n la p rim e ra ve rs ió n d e l m is m o : d a n d o n o m b re s q u e e m p ie ce n e n m in ú s cu la a
lo s p a rá m e t ro s y n o m b re s q u e e m p ie ce n co n m a yú s cu la s a lo s ca m p o s . De h e ch o , e s e e s e l co n ve n io q u e Micro s o ft
re co m ie n d a u s a r. S in e m b a rg o , co m o m á s a d e la n t e s e ve rá s í q u e p u e d e s e r ú t il this cu a n d o lo s ca m p o s a in icia liza r a
s e a n p riva d o s , ya q u e e l co n ve n io d e e s crit u ra d e id e n t ifica d o re s p a ra ca m p o s p riva d o s re co m e n d a d o p o r Micro s o ft
co in cid e co n e l u s a d o p a ra d a r id e n t ifica d o re s a p a rá m e t ro s ( o b via m e n t e o t ra s o lu ció n s e ría d a r cu a lq u ie r o t ro n o m b re a
lo s p a rá m e t ro s d e l co n s t ru ct o r o lo s ca m p o s a fe ct a d o s , a u n q u e a s í e l có d ig o p e rd e ría a lg o le g ib ilid a d )

Un u s o m á s fre cu e n t e d e this e n C# e s e l d e p e rm it ir re a liza r lla m a d a s a u n m é t o d o d e u n o b je t o d e s d e có d ig o u b ica d o


e n m é t o d o s d e l m is m o o b je t o . Es d e cir, e n C# s ie m p re e s n e ce s a rio q u e cu a n d o lla m e m o s a a lg ú n m é t o d o d e u n o b je t o
p re ce d a m o s a l o p e ra d o r . d e a lg u n a e xp re s ió n q u e in d iq u e cu á l e s e l o b je t o a cu yo m é t o d o s e d e s e a lla m a r, y s i é s t e
m é t o d o p e rt e n e ce a l m is m o o b je t o q u e h a ce la lla m a d a la ú n ica fo rm a d e co n s e g u ir in d ica rlo e n C# e s u s a n d o this.

Fin a lm e n t e , u n a t e rce ra u t ilid a d d e this e s p e rm it ir e s crib ir m é t o d o s q u e p u e d a n d e vo lve r co m o o b je t o e l p ro p io o b je t o


s o b re e l q u e e l m é t o d o e s a p lica d o . Pa ra e llo b a s t a ría u s a r u n a in s t ru cció n return this; a l in d ica r e l o b je t o a d e vo lve r

He re n c ia y m é t o d o s v irt u a le s

Co n c e p t o d e h e re n c ia

El m e ca n is m o d e h e re n c ia e s u n o d e lo s p ila re s fu n d a m e n t a le s e n lo s q u e s e b a s a la p ro g ra m a ció n o rie n t a d a a o b je t o s .


Es u n m e ca n is m o q u e p e rm it e d e fin ir n u e va s cla s e s a p a rt ir d e o t ra s ya d e fin id a s d e m o d o q u e s i e n la d e fin ició n d e u n a
cla s e in d ica m o s q u e é s t a d e riva d e o t ra , e n t o n ce s la p rim e ra - a la q u e s e le s u e le lla m a r c la s e h ija - s e rá t ra t a d a p o r e l
co m p ila d o r a u t o m á t ica m e n t e co m o s i s u d e fin ició n in clu ye s e la d e fin ició n d e la s e g u n d a - a la q u e s e le s u e le lla m a r c la s e
p a d re o c la s e b a s e . La s cla s e s q u e d e riva n d e o t ra s s e d e fin e n u s a n d o la s ig u ie n t e s in t a xis :

class <nombreHija>:<nombrePadre>
{
<miembrosHija>
}

A lo s m ie m b ro s d e fin id o s e n <miembrosHijas> s e le a ñ a d irá n lo s q u e h u b ié s e m o s d e fin id o e n la cla s e p a d re . Po r


e je m p lo , a p a rt ir d e la cla s e Persona p u e d e cre a rs e u n a cla s e Trabajador a s í:

class Trabajador:Persona
{
public int Sueldo;

public Trabajador(string nombre, int edad, string nif, int sueldo)


: base(nombre, edad, nif)
{
Sueldo = sueldo;
}
}

Lo s o b je t o s d e e s t a cla s e Trabajador co n t a rá n co n lo s m is m o s m ie m b ro s q u e lo s o b je t o s Persona y a d e m á s


in co rp o ra rá n u n n u e vo ca m p o lla m a d o Sueldo q u e a lm a ce n a rá e l d in e ro q u e ca d a t ra b a ja d o r g a n e . Nó t e s e a d e m á s q u e a
la h o ra d e e s crib ir e l co n s t ru ct o r d e e s t a cla s e h a s id o n e ce s a rio e s crib irlo co n u n a s in t a xis e s p e cia l co n s is t e n t e e n
p re ce d e r la lla ve d e a p e rt u ra d e l cu e rp o d e l m é t o d o d e u n a e s t ru ct u ra d e la fo rm a :

: base(<parametrosBase>)

A e s t a e s t ru ct u ra s e le lla m a in ic ia liz a d o r b a s e y s e u t iliza p a ra in d ica r có m o d e s e a m o s in icia liza r lo s ca m p o s h e re d a d o s


d e la cla s e p a d re . No e s m á s q u e u n a lla m a d a a l co n s t ru ct o r d e la m is m a co n lo s p a rá m e t ro s a d e cu a d o s , y s i n o s e in clu ye
e l co m p ila d o r co n s id e ra ría p o r d e fe ct o q u e va le :base(), lo q u e s e ría in co rre ct o e n e s t e e je m p lo d e b id o a q u e Persona
ca re ce d e co n s t ru ct o r s in p a rá m e t ro s .

Un e je m p lo q u e p o n e d e m a n ifie s t o có m o fu n cio n a la h e re n cia e s e l s ig u ie n t e :

http://www.programacion.com/tutorial.csharp.6.html (6 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

using System;

class Persona
{
public string Nombre; // Campo de cada objeto Persona que almacena su nombre
public int Edad; // Campo de cada objeto Persona que almacena su edad
public string NIF; // Campo de cada objeto Persona que almacena su NIF

void Cumpleaños() // Incrementa en uno de edad del objeto Persona


{
Edad++;
}

public Persona (string nombre, int edad, string nif) // Constructor de Persona
{
Nombre = nombre;
Edad = edad;
NIF = nif;
}
}

class Trabajador: Persona


{
public int Sueldo; // Campo de cada objeto Trabajador que almacena cuánto gana

Trabajador(string nombre, int edad, string nif, int sueldo):


base(nombre, edad, nif)
{ // Inicializamos cada Trabajador en base al constructor de Persona
Sueldo = sueldo;
}

public static void Main()


{
Trabajador p = new Trabajador("Josan", 22, "77588260-Z", 100000);

Console.WriteLine ("Nombre="+p.Nombre);
Console.WriteLine ("Edad="+p.Edad);
Console.WriteLine ("NIF="+p.NIF);
Console.WriteLine ("Sueldo="+p.Sueldo);
}
}

Nó t e s e q u e h a s id o n e ce s a rio p re fija r la d e fin ició n d e lo s m ie m b ro s d e Pe rs o n a d e l p a la b ra re s e rva d a public. Es t o s e


d e b e a q u e p o r d e fe ct o lo s m ie m b ro s d e u n a t ip o s ó lo s o n a cce s ib le s d e s d e có d ig o in clu id o d e n t ro d e la d e fin ició n d e d ich o
t ip o , e in clu ye n d o public co n s e g u im o s q u e s e a n a cce s ib le s d e s d e cu a lq u ie r có d ig o , co m o e l m é t o d o Ma in ( ) d e fin id o e n
Tra b a ja d o r. public e s lo q u e s e d e n o m in a u n m o d ific a d o r d e a c c e s o , co n ce p t o q u e s e t ra t a rá m á s a d e la n t e e n e s t e
m is m o t e m a b a jo e l e p íg ra fe t it u la d o Mo d ifica d o re s d e a cce s o .

Lla m a d a s p o r d e fe c t o a l c o n s t ru c t o r b a s e

S i e n la d e fin ició n d e l co n s t ru ct o r d e a lg u n a cla s e q u e d e rive d e o t ra n o in clu im o s in icia liza d o r b a s e e l co m p ila d o r


co n s id e ra rá q u e é s t e e s :base() Po r e llo h a y q u e e s t a r s e g u ro s d e q u e s i n o s e in clu ye base e n la d e fin ició n d e a lg ú n
co n s t ru ct o r, e l t ip o p a d re d e l t ip o a l q u e p e rt e n e zca d is p o n g a d e co n s t ru ct o r s in p a rá m e t ro s .

Es e s p e cia lm e n t e s ig n ifica t ivo re s e ñ a r e l ca s o d e q u e n o d e m o s la d e fin ició n d e n in g ú n co n s t ru ct o r e n la cla s e h ija , ya q u e


e n e s t o s ca s o s la d e fin ició n d e l co n s t ru ct o r q u e p o r d e fe ct o in t ro d u cirá e l co m p ila d o r s e rá e n re a lid a d d e la fo rm a :

<nombreClase>(): base()
{}

Es d e cir, e s t e co n s t ru ct o r s ie m p re lla m a a l co n s t ru ct o r s in p a rá m e t ro s d e l p a d re d e l t ip o q u e e s t e m o s d e fin ie n d o , y s i é s e


n o d is p o n e d e a lg u n o s e p ro d u cirá u n e rro r a l co m p ila r.

http://www.programacion.com/tutorial.csharp.6.html (7 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

Mé t o d o s v irt u a le s

Ya h e m o s vis t o q u e e s p o s ib le d e fin ir t ip o s cu yo s m é t o d o s s e h e re d e n d e d e fin icio n e s d e o t ro s t ip o s . Lo q u e a h o ra va m o s


a ve r e s q u e a d e m á s e s p o s ib le ca m b ia r d ich a d e fin ició n e n la cla s e h ija , p a ra lo q u e h a b ría q u e h a b e r p re ce d id o co n la
p a la b ra re s e rva d a v irt u a l la d e fin ició n d e d ich o m é t o d o e n la cla s e p a d re . A e s t e t ip o d e m é t o d o s s e le s lla m a m é t o d o s
v irt u a le s , y la s in t a xis q u e s e u s a p a ra d e fin irlo s e s la s ig u ie n t e :

virtual <tipoDevuelto> <nombreMétodo>(<parámetros>)


{
<código>
}

S i e n a lg u n a cla s e h ija q u is ié s e m o s d a r u n a n u e va d e fin ició n d e l <código> d e l m é t o d o , s im p le m e n t e lo vo lve ría m o s a


d e fin ir e n la m is m a p e ro s u s t it u ye n d o e n s u d e fin ició n la p a la b ra re s e rva d a virtual p o r override. Es d e cir, u s a ría m o s
e s t a s in t a xis :

override <tipoDevuelto> <nombreMétodo>(<parámetros>)


{
<nuevoCódigo>
}

Nó t e s e q u e e s t a p o s ib ilid a d d e ca m b ia r e l có d ig o d e u n m é t o d o e n s u cla s e h ija s ó lo s e d a s i e n la cla s e p a d re e l m é t o d o


fu e d e fin id o co m o v irt u a l. En ca s o co n t ra rio , e l co m p ila d o r co n s id e ra rá u n e rro r in t e n t a r re d e fin irlo .

El le n g u a je C# im p o n e la re s t ricció n d e q u e t o d a re d e fin ició n d e m é t o d o q u e q u e ra m o s re a liza r in co rp o re la p a rt ícu la


override p a ra fo rza r a q u e e l p ro g ra m a d o r e s t é s e g u ro d e q u e ve rd a d e ra m e n t e lo q u e q u ie re h a ce r e s ca m b ia r e l
s ig n ifica d o d e u n m é t o d o h e re d a d o . As í s e e vit a q u e p o r a ccid e n t e d e fin a u n m é t o d o d e l q u e ya e xis t a u n a d e fin ició n e n
u n a cla s e p a d re . Ad e m á s , C# n o p e rm it e d e fin ir u n m é t o d o co m o override y virtual a la ve z, ya q u e e llo t e n d ría u n
s ig n ifica d o a b s u rd o : e s t a ría m o s d a n d o u n a re d e fin ició n d e u n m é t o d o q u e va m o s a d e fin ir.

Po r o t ro la d o , cu a n d o d e fin a m o s u n m é t o d o co m o override h a d e cu m p lirs e q u e e n a lg u n a cla s e a n t e ce s o ra ( s u cla s e


p a d re , s u cla s e a b u e la , e t c. ) d e la cla s e e n la q u e s e h a re a liza d o la d e fin ició n d e l m is m o e xis t a u n m é t o d o virt u a l co n e l
m is m o n o m b re q u e e l re d e fin id o . S i n o , e l co m p ila d o r in fo rm a rá d e e rro r p o r in t e n t o d e re d e fin ició n d e m é t o d o n o
e xis t e n t e o n o virt u a l. As í s e e vit a q u e p o r a ccid e n t e u n p ro g ra m a d o r cre a q u e e s t á re d e fin ie n d o u n m é t o d o d e l q u e n o
e xis t a d e fin ició n p re via o q u e re d e fin a u n m é t o d o q u e e l cre a d o r d e la cla s e b a s e n o d e s e e q u e s e p u e d a re d e fin ir.

Pa ra a cla ra r m e jo r e l co n ce p t o d e m é t o d o virt u a l, va m o s a m o s t ra r u n e je m p lo e n e l q u e ca m b ia re m o s la d e fin ició n d e l


m é t o d o Cumpleaños() e n lo s o b je t o s Persona p o r u n a n u e va ve rs ió n e n la q u e s e m u e s t re u n m e n s a je ca d a ve z q u e s e
e je cu t e , y re d e fin ire m o s d ich a n u e va ve rs ió n p a ra lo s o b je t o s Tra b a ja d o r d e m o d o q u e e l m e n s a je m o s t ra d o s e a o t ro . El
có d ig o d e e s t e e je m p lo e s e l q u e s e m u e s t ra a co n t in u a ció n :

using System;

class Persona
{
public string Nombre; // Campo de cada objeto Persona que almacena su nombre
public int Edad; // Campo de cada objeto Persona que almacena su edad
public string NIF; // Campo de cada objeto Persona que almacena su NIF

public virtual void Cumpleaños() // Incrementa en uno de la edad del objeto Persona
{
Console.WriteLine("Incrementada edad de persona");
}

public Persona (string nombre, int edad, string nif) // Constructor de Persona
{
Nombre = nombre;
Edad = edad;
NIF = nif;
}
}

http://www.programacion.com/tutorial.csharp.6.html (8 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

class Trabajador: Persona


{
public int Sueldo; // Campo de cada objeto Trabajador que almacena cuánto gana

Trabajador(string nombre, int edad, string nif, int sueldo): base(nombre, edad, nif)
{ // Inicializamos cada Trabajador en base al constructor de Persona
Sueldo = sueldo;
}

public override Cumpleaños()


{
Edad++;
Console.WriteLine("Incrementada edad de persona");
}

public static void Main()


{
Persona p = new Persona("Carlos", 22, "77588261-Z", 100000);
Trabajador t = new Trabajador("Josan", 22, "77588260-Z", 100000);

t.Cumpleaños();
p.Cumpleaños();
}
}

Nó t e s e có m o s e h a a ñ a d id o e l m o d ifica d o r virtual e n la d e fin ició n d e Cumpleaños() e n la cla s e Pe rs o n a p a ra h a b ilit a r


la p o s ib ilid a d d e q u e d ich o m é t o d o p u e d e s e r re d e fin id o e n cla s e h ija s d e Pe rs o n a y có m o s e h a a ñ a d o override e n la
re d e fin ició n d e l m is m o d e n t ro d e la cla s e Tra b a ja d o r p a ra in d ica r q u e la n u e va d e fin ició n d e l m é t o d o e s u n a re d e fin ició n
d e l h e re d a d o d e la cla s e . La s a lid a d e e s t e p ro g ra m a co n firm a q u e la im p le m e n t a ció n d e Cumpleaños() e s d is t in t a e n
ca d a cla s e , p u e s e s d e la fo rm a :

Incrementada edad de trabajador


Incrementada edad de persona

Ta m b ié n e s im p o rt a n t e s e ñ a la r q u e p a ra q u e la re d e fin ició n s e a vá lid a h a s id o n e ce s a rio a ñ a d ir la p a rt ícu la public a la


d e fin ició n d e l m é t o d o o rig in a l, p u e s s i n o s e in clu ye s e s e co n s id e ra ría q u e e l m é t o d o s ó lo e s a cce s ib le d e s d e d e n t ro d e la
cla s e d o n d e s e h a d e fin id o , lo q u e n o t ie n e s e n t id o e n m é t o d o s virt u a le s ya q u e e n t o n ce s n u n ca p o d ría s e r re d e fin id o . De
h e ch o , s i s e e xclu ye s e e l m o d ifica d o r public e l co m p ila d o r in fo rm a ría d e u n e rro r a n t e e s t e a b s u rd o . Ad e m á s , e s t e
m o d ifica d o r t a m b ié n s e h a m a n t e n id o e n la re d e fin ició n d e Cumpleaños() p o rq u e t o d a re d e fin ició n d e u n m é t o d o virt u a l
h a d e m a n t e n e r lo s m is m o s m o d ifica d o re s d e a cce s o q u e e l m é t o d o o rig in a l p a ra s e r vá lid a .

Cla s e s a b s t ra c t a s

Un a c la s e a b s t ra c t a e s a q u e lla q u e fo rzo s a m e n t e s e h a d e d e riva r s i s e d e s e a q u e s e p u e d a n cre a r o b je t o s d e la m is m a o


a cce d e r a s u s m ie m b ro s e s t á t ico s ( e s t o ú lt im o s e ve rá m á s a d e la n t e e n e s t e m is m o t e m a ) Pa ra d e fin ir u n a cla s e a b s t ra ct a
s e a n t e p o n e abstract a s u d e fin ició n , co m o s e m u e s t ra e n e l s ig u ie n t e e je m p lo :

public abstract class A


{
public abstract void F();
}

abstract public class B: A


{
public void G() {}
}
class C: B
{
public override void F()
{}
}

La s cla s e s A y B d e l e je m p lo s o n a b s t ra ct a s , y co m o p u e d e ve rs e e s p o s ib le co m b in a r e n cu a lq u ie r o rd e n e l m o d ifica d o r

http://www.programacion.com/tutorial.csharp.6.html (9 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

abstract co n m o d ifica d o re s d e a cce s o .

La u t ilid a d d e la s cla s e s a b s t ra ct a s e s q u e p u e d e n co n t e n e r m é t o d o s p a ra lo s q u e n o s e d é d ire ct a m e n t e u n a


im p le m e n t a ció n s in o q u e s e d e je e n m a n o s d e s u s cla s e s h ija s d a rla . No e s o b lig a t o rio q u e la s cla s e s a b s t ra ct a s co n t e n g a n
m é t o d o s d e e s t e t ip o , p e ro s í lo e s m a rca r co m o a b s t ra ct a a t o d a la q u e t e n g a a lg u n o . Es t o s m é t o d o s s e d e fin e n
p re ce d ie n d o s u d e fin ició n d e l m o d ifica d o r abstract y s u s t it u ye n d o s u có d ig o p o r u n p u n t o y co m a ( ;) , co m o s e m u e s t ra
e n e l m é t o d o F() d e la cla s e A d e l e je m p lo ( n ó t e s e q u e B t a m b ié n h a d e d e fin irs e co m o a b s t ra ct a p o rq u e t a m p o co
im p le m e n t a e l m é t o d o F() q u e h e re d a d e A)

Ob via m e n t e , co m o u n m é t o d o a b s t ra ct o n o t ie n e có d ig o n o e s p o s ib le lla m a rlo . Ha y q u e t e n e r e s p e cia l cu id a d o co n e s t o a


la h o ra d e u t iliza r this p a ra lla m a r a o t ro s m é t o d o s d e u n m is m o o b je t o , ya q u e lla m a r a lo s a b s t ra ct o s p ro vo ca u n e rro r
a l co m p ila r.

Vé a s e q u e t o d o m é t o d o d e fin id o co m o a b s t ra ct o e s im p lícit a m e n t e virt u a l, p u e s s i n o s e ría im p o s ib le re d e fin irlo p a ra d a rle


u n a im p le m e n t a ció n e n la s cla s e s h ija s d e la cla s e a b s t ra ct a d o n d e e s t é d e fin id o . Po r e llo e s n e ce s a rio in clu ir e l
m o d ifica d o r override a la h o ra d e d a rle im p le m e n t a ció n y e s re d u n d a n t e m a rca r u n m é t o d o co m o abstract y
virtual a la ve z ( d e h e ch o , h a ce rlo p ro vo ca u n e rro r a l co m p ila r)

Es p o s ib le m a rca r u n m é t o d o co m o abstract y override a la ve z, lo q u e co n ve rt iría a l m é t o d o e n a b s t ra ct o p a ra s u s


cla s e s h ija s y fo rza ría a q u e é s t a s lo t u vie s e n q u e re im p le m e n t a r s i n o s e q u is ie s e q u e fu e s e n cla s e s a b s t ra ct a s .

La c la s e p rim ig e n ia : S y s t e m . Ob je c t

Ah o ra q u e s a b e m o s lo q u e e s la h e re n cia e s e l m o m e n t o a p ro p ia d o p a ra e xp lica r q u e e n . NET t o d o s lo s t ip o s q u e s e


d e fin a n h e re d a n im p lícit a m e n t e d e la cla s e S y s t e m . Ob je c t p re d e fin id a e n la BCL, p o r lo q u e d is p o n d rá n d e t o d o s lo s
m ie m b ro s d e é s t a . Po r e s t a ra zó n s e d ice q u e S y s t e m . Ob je c t e s la ra íz d e la je ra rq u ía d e o b je t o s d e . NET.

A co n t in u a ció n va m o s a e xp lica r cu á le s s o n e s t o s m é t o d o s co m u n e s a t o d o s lo s o b je t o s :

● public virtual bool Equals(object o): S e u s a p a ra co m p a ra r e l o b je t o s o b re e l q u e s e a p lica co n


cu a lq u ie r o t ro q u e s e le p a s e co m o p a rá m e t ro . De vu e lve true s i a m b o s o b je t o s s o n ig u a le s y false e n
ca s o co n t ra rio .

La im p le m e n t a ció n q u e p o r d e fe ct o s e h a d a d o a e s t e m é t o d o co n s is t e e n u s a r ig u a ld a d p o r re fe re n cia p a ra lo s t ip o s
p o r re fe re n cia e ig u a ld a d p o r va lo r p a ra lo s t ip o s p o r va lo r. Es d e cir, s i lo s o b je t o s a co m p a ra r s o n d e t ip o s p o r
re fe re n cia s ó lo s e d e vu e lve true s i a m b o s o b je t o s a p u n t a n a la m is m a re fe re n cia e n m e m o ria d in á m ica , y s i lo s
t ip o s a co m p a ra r s o n t ip o s p o r va lo r s ó lo s e d e vu e lve true s i t o d o s lo s b it s d e a m b o s o b je t o s s o n ig u a le s , a u n q u e
s e a lm a ce n e n e n p o s icio n e s d ife re n t e s d e m e m o ria .

Co m o s e ve , e l m é t o d o h a s id o d e fin id o co m o virtual, lo q u e p e rm it e q u e lo s p ro g ra m a d o re s p u e d a n re d e fin irlo


p a ra in d ica r cu á n d o h a d e co n s id e ra rs e q u e s o n ig u a le s d o s o b je t o s d e t ip o s d e fin id o s p o r e llo s . De h e ch o , m u ch o s
d e lo s t ip o s in clu id o s e n la BCL cu e n t a n co n re d e fin icio n e s d e e s t e t ip o , co m o e s e l ca s o d e string, q u ie n a ú n
s ie n d o u n t ip o p o r re fe re n cia , s u s o b je t o s s e co n s id e ra n ig u a le s s i a p u n t a n a ca d e n a s q u e s e a n ig u a le s ca rá ct e r a
ca rá ct e r ( a u n q u e re fe re n cie n a d is t in t a s d ire ccio n e s d e m e m o ria d in á m ica )

El s ig u ie n t e e je m p lo m u e s t ra có m o h a ce r u n a re d e fin ició n d e Equals() d e m a n e ra q u e a u n q u e lo s o b je t o s


Persona s e a n d e t ip o s p o r re fe re n cia , s e co n s id e re q u e d o s Pe rs o n a s s o n ig u a le s s i t ie n e n e l m is m o NIF:

public override bool Equals(object o)


{
if (o==null)
return this==null;
else
return (o is Persona) && (this.NIF == ((Persona) o).NIF);
}

Ha y q u e t e n e r e n cu e n t a q u e e s co n ve n ie n t e q u e t o d a re d e fin ició n d e l m é t o d o Equals() q u e h a g a m o s cu m p la co n


u n a s e rie d e p ro p ie d a d e s q u e m u ch o s d e lo s m é t o d o s in clu id o s e n la s d is t in t a s cla s e s d e la BCL e s p e ra n q u e s e
cu m p la n . Es t a s p ro p ie d a d e s s o n :

❍ Re fle x iv id a d : To d o o b je t o h a d e s e r ig u a l a s í m is m o . Es d e cir, x.Equals(x) s ie m p re h a d e

http://www.programacion.com/tutorial.csharp.6.html (10 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

d e vo lve r true.
❍ S im e t ría : Ha d e d a r ig u a l e l o rd e n e n q u e s e h a g a la co m p a ra ció n . Es d e cir, x.Equals(y) h a d e
d e vo lve r lo m is m o q u e y.Equals(x) .
❍ Tra n s it iv id a d : S i d o s o b je t o s s o n ig u a le s y u n o d e e llo s e s ig u a l a o t ro , e n t o n ce s e l p rim e ro
t a m b ié n h a d e s e r ig u a l a e s e o t ro o b je t o . Es d e cir, s i x.Equals(y) e y.Equals(z) e n t o n ce s
x.Equals(z) .
❍ Co n s is t e n c ia : S ie m p re q u e e l m é t o d o s e a p liq u e s o b re lo s m is m o s o b je t o s h a d e d e vo lve r e l
m is m o re s u lt a d o .
❍ Tra t a m ie n t o d e o b je t o s n u lo s : S i u n o d e lo s o b je t o s co m p a ra d o s e s n u lo ( n u ll) , s ó lo s e h a d e
d e vo lve r t ru e s i e l o t ro t a m b ié n lo e s .
❍ Ha y q u e re ca lca r q u e e l h e ch o d e q u e re d e fin ir Equals() n o im p lica q u e e l o p e ra d o r d e ig u a ld a d
( ==) q u e d e t a m b ié n re d e fin id o . Ello h a b ría q u e h a ce rlo d e in d e p e n d ie n t e m e n t e co m o s e in d ica e n
e l Te m a 1 1 : Re d e fin ició n d e o p e ra d o re s .

● public virtual int GetHashCode(): De vu e lve u n có d ig o d e d is p e rs ió n ( h a s h ) q u e re p re s e n t a d e


fo rm a n u m é rica a l o b je t o s o b re e l q u e e l m é t o d o e s a p lica d o . Ge t Ha s h Co d e ( ) s u e le u s a rs e p a ra
t ra b a ja r co n t a b la s d e d is p e rs ió n , y s e cu m p le q u e s i d o s o b je t o s s o n ig u a le s s u s có d ig o s d e d is p e rs ió n
s e rá n ig u a le s , m ie n t ra s q u e s i s o n d is t in t o s la p ro b a b ilid a d d e q u e s e a n ig u a le s e s ín fim a .

En t a n t o q u e la b ú s q u e d a d e o b je t o s e n t a b la s d e d is p e rs ió n n o s e re a liza ú n ica m e n t e u s a n d o la ig u a ld a d d e o b je t o s
( m é t o d o Equals()) s in o u s a n d o t a m b ié n la ig u a ld a d d e có d ig o s d e d is p e rs ió n , s u e le s e r co n ve n ie n t e re d e fin ir
GetHashCode() s ie m p re q u e s e re d e fin a Equals() De h e ch o , s i n o s e h a ce e l co m p ila d o r in fo rm a d e la s it u a ció n
co n u n m e n s a je d e a vis o .

● public virtual string ToString(): De vu e lve u n a re p re s e n t a ció n e n fo rm a d e ca d e n a d e l o b je t o


s o b re e l q u e s e e l m é t o d o e s a p lica d o , lo q u e e s m u y ú t il p a ra d e p u ra r a p lica cio n e s ya q u e p e rm it e
m o s t ra r co n fa cilid a d e l e s t a d o d e lo s o b je t o s .

La im p le m e n t a ció n p o r d e fe ct o d e e s t e m é t o d o s im p le m e n t e d e vu e lve u n a ca d e n a d e t e xt o co n e l n o m b re d e la
cla s e a la q u e p e rt e n e ce e l o b je t o s o b re e l q u e e s a p lica d o . S in e m b a rg o , co m o lo h a b it u a l s u e le s e r im p le m e n t a r
ToString() e n ca d a n u e va cla s e q u e s e d e fin a , a co n t in u a ció n m o s t ra re m o s u n e je m p lo d e có m o re d e fin irlo e n la
cla s e Persona p a ra q u e m u e s t re lo s va lo re s d e t o d o s lo s ca m p o s d e lo s o b je t o s Persona:

public override string ToString()


{
string cadena = "";

cadena += "DNI = " + this.DNI + "\n";


cadena +="Nombre = " + this.Nombre + "\n";
cadena +="Edad = " + this.Edad + "\n";

return cadena;
}

Es d e re s e ñ a r e l h e ch o d e q u e e n re a lid a d lo s q u e h a ce e l o p e ra d o r d e co n ca t e n a ció n d e ca d e n a s ( +) p a ra
co n ca t e n a r u n a ca d e n a co n u n o b je t o cu a lq u ie ra e s co n ve rt irlo p rim e ro e n ca d e n a lla m a n d o a s u m é t o d o
ToString() y lu e g o re a liza r la co n ca t e n a ció n d e a m b a s ca d e n a s .

De l m is m o m o d o , cu a n d o a Console.WriteLine() y Console.Write() s e le s p a s a co m o p a rá m e t ro u n o b je t o
lo q u e h a ce n e s m o s t ra r p o r la s a lid a e s t á n d a r e l re s u lt a d o d e co n ve rt irlo e n ca d e n a lla m a n d o a s u m é t o d o
ToString(); y s i s e le s p a s a co m o p a rá m e t ro s u n a ca d e n a s e g u id a d e va rio s o b je t o s lo m u e s t ra n p o r la s a lid a
e s t á n d a r e s a ca d e n a p e ro s u s t it u ye n d o e n e lla t o d a s u b ca d e n a d e la fo rm a { <número>} p o r e l re s u lt a d o d e
co n ve rt ir e n ca d e n a e l p a rá m e t ro q u e o cu p e la p o s ició n <número>+2 e n la lis t a d e va lo re s d e lla m a d a a l m é t o d o .

● protected object MemberWiseClone(): De vu e lve u n a co p ia s h a llo w c o p y d e l o b je t o s o b re e l q u e s e


a p lica . Es t a co p ia e s u n a co p ia b it a b it d e l m is m o , p o r lo q u e e l o b je t o re s u lt a n t e d e la co p ia
m a n t e n d rá la s m is m a s re fe re n cia s a o t ro s q u e t u vie s e e l o b je t o co p ia d o y t o d a m o d ifica ció n q u e s e
h a g a a e s t o s o b je t o s a t ra vé s d e la co p ia a fe ct a rá a l o b je t o co p ia d o y vice ve rs a .

S i lo q u e in t e re s a e s d is p o n e r d e u n a co p ia m á s n o rm a l, e n la q u e p o r ca d a o b je t o re fe re n cia d o s e cre a s e u n a co p ia
d e l m is m o a la q u e re fe re n cia s e e l o b je t o clo n a d o , e n t o n ce s e l p ro g ra m a d o r h a d e e s crib ir s u p ro p io m é t o d o

http://www.programacion.com/tutorial.csharp.6.html (11 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

clo n a d o r p e ro p u e d e s e rvirs e d e MemberwiseClone() co m o b a s e co n la q u e co p ia r lo s ca m p o s q u e n o s e a n d e


t ip o s re fe re n cia .

● public System.Type GetType(): De vu e lve u n o b je t o d e cla s e System.Type q u e re p re s e n t a a l t ip o d e


d a t o d e l o b je t o s o b re e l q u e e l m é t o d o e s a p lica d o . A t ra vé s d e lo s m é t o d o s o fre cid o s p o r e s t e o b je t o
s e p u e d e a cce d e r a m e t a d a t o s s o b re e l m is m o co m o s u n o m b re , s u cla s e p a d re , s u s m ie m b ro s , e t c. La
e xp lica ció n d e có m o u s a r lo s m ie m b ro s d e e s t e o b je t o p a ra o b t e n e r d ich a in fo rm a ció n q u e d a fu e ra d e l
a lca n ce d e e s t e d o cu m e n t o ya q u e e s m u y la rg a y p u e d e s e r fá cilm e n t e co n s u lt a d a e n la
d o cu m e n t a ció n q u e a co m p a ñ a a l . NET S DK.

● p ro t e c t e d v irt u a l v o id Fin a liz e ( ) : Co n t ie n e e l có d ig o q u e s e e je cu t a rá s ie m p re q u e va ya h a s e r


d e s t ru id o a lg ú n o b je t o d e l t ip o d e l q u e s e a m ie m b ro . La im p le m e n t a ció n d a d a p o r d e fe ct o a
Finalize() co n s is t e e n n o h a ce r n a d a .

Au n q u e e s u n m é t o d o virt u a l, e n C# n o s e p e rm it e q u e e l p ro g ra m a d o r lo re d e fin a e xp lícit a m e n t e d a d o q u e h a ce rlo


e s p e lig ro s o p o r ra zo n e s q u e s e e xp lica rá n e n e l Te m a 8 : Mé t o d o s ( o t ro s le n g u a je s d e . NET p o d ría n p e rm it irlo ) .

Ap a rt e d e lo s m é t o d o s ya co m e n t a d o s q u e t o d o s lo s o b je t o s h e re d a n , la cla s e System.Object t a m b ié n in clu ye e n s u


d e fin ició n lo s s ig u ie n t e s m é t o d o s d e t ip o :

● public static bool Equals(object objeto1, object objeto2): Ve rs ió n e s t á t ica d e l m é t o d o


Equals() ya vis t o . In d ica s i lo s o b je t o s q u e s e le p a s a n co m o p a rá m e t ro s s o n ig u a le s , y p a ra
co m p a ra rlo s lo q u e h a ce e s d e vo lve r e l re s u lt a d o d e ca lcu la r objeto1.Equals(objeto2) co m p ro b a n d o
a n t e s s i a lg u n o d e lo s o b je t o s va le null ( s ó lo s e d e vo lve ría true s ó lo s i e l o t ro t a m b ié n lo e s )

Ob via m e n t e s i s e d a u n a re d e fin ició n a l Equals() n o e s t á t ico , e s t a t a m b ié n s e a p lica rá a l e s t á t ico .

● public static bool ReferenceEquals(object objeto1, object objeto2): In d ica s i lo s d o s


o b je t o s q u e s e le p a s a n co m o p a rá m e t ro s e a lm a ce n a n e n la m is m a p o s ició n d e m e m o ria d in á m ica . A
t ra vé s d e e s t e m é t o d o , a u n q u e s e h a ya n re d e fin id o Equals() y e l o p e ra d o r d e ig u a ld a d ( ==) p a ra u n
cie rt o t ip o p o r re fe re n cia , s e p o d rá n s e g u ir re a liza n d o co m p a ra cio n e s p o r re fe re n cia e n t re o b je t o s d e
e s e t ip o e n t a n t o q u e re d e fin ir d e Eq u a ls ( ) n o a fe ct a a e s t e m é t o d o . Po r e je m p lo , d a d a la a n t e rio r
re d e fin ició n d e Eq u a ls ( ) p a ra o b je t o s Pe rs o n a :

Persona p = new Persona("José", 22, "83721654-W");


Persona q = new Persona("Antonio", 23, "83721654-W");
Console.WriteLine(p.Equals(q));
Console.WriteLine(Object.Equals(p, q));
Console.WriteLine(Object.ReferenceEquals(p, q));
Console.WriteLine(p == q);

La s a lid a q u e p o r p a n t a lla m o s t ra rá e l có d ig o a n t e rio r e s :

True
True
False
False

En lo s p rim e ro s ca s o s s e d e vu e lve true p o rq u e s e g ú n la re d e fin ició n d e Equals() d o s p e rs o n a s s o n ig u a le s s i


t ie n e n e l m is m o DNI, co m o p a s a co n lo s o b je t o s p y q . S in e m b a rg o , e n lo s ú lt im o s ca s o s s e d e vu e lve false
p o rq u e a u n q u e a m b o s o b je t o s t ie n e n e l m is m o DNI ca d a u n o s e a lm a ce n a e n la m e m o ria d in á m ica e n u n a p o s ició n
d is t in t a , q u e e s lo q u e co m p a ra n ReferenceEquals() y e l o p e ra d o r == ( é s t e ú lt im o s ó lo p o r d e fe ct o )

P o lim o rfis m o

Co n c e p t o d e p o lim o rfis m o

El p o lim o rfis m o e s o t ro d e lo s p ila re s fu n d a m e n t a le s d e la p ro g ra m a ció n o rie n t a d a a o b je t o s . Es la ca p a cid a d d e


a lm a ce n a r o b je t o s d e u n d e t e rm in a d o t ip o e n va ria b le s d e t ip o s a n t e ce s o re s d e l p rim e ro a co s t a , cla ro e s t á , d e s ó lo
p o d e rs e a cce d e r a t ra vé s d e d ich a va ria b le a lo s m ie m b ro s co m u n e s a a m b o s t ip o s . S in e m b a rg o , la s ve rs io n e s d e lo s

http://www.programacion.com/tutorial.csharp.6.html (12 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

m é t o d o s virt u a le s a la s q u e s e lla m a ría a t ra vé s d e e s a s va ria b le s n o s e ría n la s d e fin id a s co m o m ie m b ro s d e l t ip o d e


d ich a s va ria b le s , s in o la s d e fin id a s e n e l ve rd a d e ro t ip o d e lo s o b je t o s q u e a lm a ce n a n .

A co n t in u a ció n s e m u e s t ra u n e je m p lo d e có m o u n a va ria b le d e t ip o Persona p u e d e u s a rs e p a ra a lm a ce n a r o b je t o s d e


t ip o Trabajador. En e s o s ca s o s e l ca m p o Sueldo d e l o b je t o re fe re n cia d o p o r la va ria b le n o s e rá a cce s ib le , y la ve rs ió n
d e l m é t o d o Cumpleaños() a la q u e s e p o d ría lla m a r a t ra vé s d e la va ria b le d e t ip o Persona s e ría la d e fin id a e n la cla s e
Trabajador, y n o la d e fin id a e n Persona:

using System;

class Persona
{
public string Nombre; // Campo de cada objeto Persona que almacena su nombre
public int Edad; // Campo de cada objeto Persona que almacena su edad
public string NIF; // Campo de cada objeto Persona que almacena su NIF

// Incrementa en uno la edad del objeto Persona


public virtual void Cumpleaños()
{
Console.WriteLine("Incrementada edad de persona");
}

// Constructor de Persona
public Persona (string nombre, int edad, string nif)
{
Nombre = nombre;
Edad = edad;
NIF = nif;
}

class Trabajador: Persona


{
int Sueldo; // Campo de cada objeto Trabajador que almacena cuánto gana

Trabajador(string nombre, int edad, string nif, int sueldo):


base(nombre, edad, nif)
{ // Inicializamos cada Trabajador en base al constructor de Persona
Sueldo = sueldo;
}

public override Cumpleaños()


{
Edad++;
Console.WriteLine("Incrementada edad de trabajador");
}

public static void Main()


{
Persona p = new Trabajador("Josan", 22, "77588260-Z", 100000);

p.Cumpleaños();
// p.Sueldo++; //ERROR: Sueldo no es miembro de Persona
}
}

El m e n s a je m o s t ra d o p o r p a n t a lla a l e je cu t a r e s t e m é t o d o co n firm a lo a n t e s d ich o re s p e ct o a q u e la ve rs ió n d e


Cumpleaños() a la q u e s e lla m a , ya q u e e s :

Incrementada edad de trabajador

Mé t o d o s g e n é ric o s

http://www.programacion.com/tutorial.csharp.6.html (13 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

El p o lim o rfis m o e s m u y ú t il ya q u e p e rm it e e s crib ir m é t o d o s g e n é rico s q u e p u e d a n re cib ir p a rá m e t ro s q u e s e a n d e u n


d e t e rm in a d o t ip o o d e cu a lq u ie ra d e s u s t ip o s h ijo s . Es m á s , e n t a n t o q u e có m o s e ve rá e n e l e p íg ra fe s ig u ie n t e , e n C#
t o d o s lo s t ip o s d e riva n im p lícit a m e n t e d e l t ip o System.Object, p o d e m o s e s crib ir m é t o d o s q u e a d m it a n p a rá m e t ro s d e
cu a lq u ie r t ip o s in m á s q u e d e fin irlo s co m o m é t o d o s q u e t o m e n p a rá m e t ro s d e t ip o System.Object. Po r e je m p lo :

public void MétodoGenérico(object o)


{
// Código del método
}

Nó t e s e q u e e n ve z d e System.Object s e h a e s crit o object, q u e e s e l n o m b re a b re via d o in clu id o e n C# p a ra h a ce r


re fe re n cia d e m a n e ra co m p a ct a a u n t ip o t a n fre cu e n t e m e n t e u s a d o co m o System.Object.

D e t e rm in a c ió n d e t ip o . Op e ra d o r is

De n t ro d e u n a ru t in a p o lim ó rifica q u e , co m o la d e l e je m p lo a n t e rio r, a d m it a p a rá m e t ro s q u e p u e d a n s e r d e cu a lq u ie r t ip o ,


m u ch a s ve ce s e s co n ve n ie n t e p o d e r co n s u lt a r e n e l có d ig o d e la m is m a cu á l e s e l t ip o e n co n cre t o d e l p a rá m e t ro q u e s e
h a ya p a s a d o a l m é t o d o e n ca d a lla m a d a a l m is m o . Pa ra e llo C# o fre ce e l o p e ra d o r is, cu ya fo rm a s in t a xis d e u s o e s :

<expresión> is <nombreTipo>

Es t e o p e ra d o r d e vu e lve true e n ca s o d e q u e e l re s u lt a d o d e e va lu a r <expresión> s e a d e l t ip o cu yo n o m b re e s


<nombreTipo> y false e n ca s o co n t ra rio . Gra cia s a e lla s p o d e m o s e s crib ir m é t o d o s g e n é rico s q u e p u e d a n d e t e rm in a r
cu á l e s e l t ip o q u e t ie n e n lo s p a rá m e t ro s q u e e n ca d a lla m a d a e n co n cre t o s e le s p a s e n . O s e a , m é t o d o s co m o :

public void MétodoGenérico(object o)


{
if (o is int) // Si o es de tipo int (entero)...
// ...Código a ejecutar si el objeto o es de tipo int
else if (o is string) // Si no, si o es de tipo string (cadena)...
// ...Código a ejecutar si o es de tipo string
//... Idem para otros tipos
}

El b lo q u e if...else e s u n a in s t ru cció n co n d icio n a l q u e p e rm it e e je cu t a r u n có d ig o u o t ro e n fu n ció n d e s i la co n d ició n


in d ica d a e n t re p a ré n t e s is t ra s e l if e s cie rt a ( true) o n o ( false) Es t a in s t ru cció n s e e xp lica rá m á s d e t a lla d a m e n t e e n e l
Te m a 1 6 : In s t ru ccio n e s

Ac c e s o a la c la s e b a s e

Ha y d e t e rm in a d a s circu n s t a n cia s e n la s q u e cu a n d o re d e fin a m o s u n d e t e rm in a d o m é t o d o n o s in t e re s e p o d e r a cce d e r a l


có d ig o d e la ve rs ió n o rig in a l. Po r e je m p lo , p o rq u e e l có d ig o re d e fin id o q u e va ya m o s a e s crib ir h a g a lo m is m o q u e e l
o rig in a l y a d e m á s a lg u n a s co s a s e xt ra s . En e s t o s ca s o s s e p o d ría p e n s a r q u e u n a fo rm a d e co n s e g u ir e s t o s e ría
co n virt ie n d o e l o b je t o a ct u a l a l t ip o d e l m é t o d o a re d e fin ir y e n t o n ce s lla m a r a s í a e s e m é t o d o , co m o p o r e je m p lo e n e l
s ig u ie n t e có d ig o :

using System;

class A
{
public virtual void F()
{
Console.WriteLine("A");
}
}

class B:A
{
public override void F()
{
Console.WriteLine("Antes");

http://www.programacion.com/tutorial.csharp.6.html (14 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

((A) this).F(); // (2)


Console.WriteLine("Después");
}

public static void Main()


{
B b = new B();
b.F();
}
}

Pu e s b ie n , s i e je cu t a m o s e l có d ig o a n t e rio r ve re m o s q u e la a p lica ció n n u n ca t e rm in a d e e je cu t a rs e y e s t á co n s t a n t e m e n t e


m o s t ra n d o e l m e n s a je Antes por pantalla. Es t o s e d e b e a q u e d e b id o a l p o lim o rfis m o s e h a e n t ra d o e n u n b u cle
in fin it o : a u n q u e u s e m o s e l o p e ra d o r d e co n ve rs ió n p a ra t ra t a r e l o b je t o co m o s i fu e s e d e t ip o A, s u ve rd a d e ro t ip o s ig u e
s ie n d o B, p o r lo q u e la ve rs ió n d e F() a la q u e s e lla m a rá e n (2) e s a la d e B d e n u e vo , q u e vo lve rá a lla m a rs e a s í m is m a
u n a y o t ra ve z d e m a n e ra in d e fin id a .

Pa ra s o lu cio n a r e s t o , lo s d is e ñ a d o re s d e C# h a n in clu id o u n a p a la b ra re s e rva d a lla m a d a base q u e d e vu e lve u n a re fe re n cia


a l o b je t o a ct u a l s e m e ja n t e a this p e ro co n la p e cu lia rid a d d e q u e lo s a cce s o s a e lla s o n t ra t a d o s co m o s i e l ve rd a d e ro
t ip o fu e s e e l d e s u cla s e b a s e . Us a n d o base, p o d ría m o s re e m p la za r e l có d ig o d e la re d e fin ició n d e F() d e e je m p lo
a n t e rio r p o r:

public override void F()


{
Console.WriteLine("Antes");
base.F();
Console.WriteLine("Después");
}

S i a h o ra e je cu t a m o s e l p ro g ra m a ve re m o s q u e a h o ra s í q u e la ve rs ió n d e F() e n B lla m a a la ve rs ió n d e F() e n A,


re s u lt a n d o la s ig u ie n t e s a lid a p o r p a n t a lla :

Antes
A
Después

A la h o ra d e re d e fin ir m é t o d o s a b s t ra ct o s h a y q u e t e n e r cu id a d o co n u n a co s a : d e s d e e l m é t o d o re d e fin id o r n o e s p o s ib le
u s a r base p a ra h a ce r re fe re n cia a m é t o d o s a b s t ra ct o s d e la cla s e p a d re , a u n q u e s í p a ra h a ce r re fe re n cia a lo s n o
a b s t ra ct o s . Po r e je m p lo :

abstract class A
{
public abstract void F();
public void G()
{}
}

class B: A
{
public override void F()
{
base.G(); // Correcto
base.F(); // Error, base.F() es abstracto
}
}

D o w n c a s t in g

Da d o q u e u n a va ria b le d e u n d e t e rm in a d o t ip o p u e d e e s t a r e n re a lid a d a lm a ce n a n d o u n o b je t o q u e s e a d e a lg ú n t ip o h ijo


d e l t ip o d e la va ria b le y e n e s e ca s o a t ra vé s d e la va ria b le s ó lo p u e d e a cce d e rs e a a q u e llo s m ie m b ro s d e l ve rd a d e ro t ip o
d e l o b je t o q u e s e a n co m u n e s co n m ie m b ro s d e l t ip o d e la va ria b le q u e re fe re n cia a l o b je t o , m u ch a s ve ce s n o s va a
in t e re s a r q u e u n a ve z q u e d e n t ro d e u n m é t o d o g e n é rico h a ya m o s d e t e rm in a d o cu á l e s e l ve rd a d e ro t ip o d e u n o b je t o

http://www.programacion.com/tutorial.csharp.6.html (15 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

( p o r e je m p lo , co n e l o p e ra d o r is) p o d a m o s t ra t a rlo co m o t a l. En e s t o s ca s o s lo q u e h a y e s q u e h a ce r u n a co n ve rs ió n d e l
t ip o p a d re a l ve rd a d e ro t ip o d e l o b je t o , y a e s t o s e le lla m a d o w n c a s t in g

Pa ra re a liza r u n d o wn ca s t in g u n a p rim e ra p o s ib ilid a d e s in d ica r p re ce d e r la e xp re s ió n a co n ve rt ir d e l t ip o e n e l q u e s e la


d e s e a co n ve rt ir in d ica d o e n t re p a ré n t e s is . Es d e cir, s ig u ie n d o la s ig u ie n t e s in t a xis :

(<tipoDestino>) <expresiónAConvertir>

El re s u lt a d o d e e s t e t ip o d e e xp re s ió n e s e l o b je t o re s u lt a n t e d e co n ve rt ir e l re s u lt a d o d e <expresiónAConvertir> a
<tipoDestino>. En ca s o d e q u e la co n ve rs ió n n o s e p u d ie s e re a liza r s e la n za ría u n a e xce p ció n d e l t ip o p re d e fin id o
System.InvalidCastException

Ot ra fo rm a d e re a liza r e l d o wn ca s t in g e s u s a n d o e l o p e ra d o r as, q u e s e u s a a s í:

<expresiónAConvertir> as <tipoDestino>

La p rin cip a l d ife re n cia d e e s t e o p e ra d o r co n e l a n t e rio r e s q u e s i a h o ra la co n ve rs ió n n o s e p u d ie s e re a liza r s e d e vo lve ría


null e n lu g a r d e la n za rs e u n a e xce p ció n . La o t ra d ife re n cia e s q u e as s ó lo e s a p lica b le a t ip o s re fe re n cia y s ó lo a
co n ve rs io n e s e n t re t ip o s d e u n a m is m a je ra rq u ía ( d e p a d re s a h ijo s o vice ve rs a )

Lo s e rro re s a l re a liza r co n ve rs io n e s d e e s t e t ip o e n m é t o d o s g e n é rico s s e p ro d u ce n cu a n d o e l va lo r p a s a d o a la va ria b le


g e n é rica n o e s n i d e l t ip o in d ica d o e n <tipoDestino> n i e xis t e n in g u n a d e fin ició n d e có m o re a liza r la co n ve rs ió n a e s e
t ip o ( có m o d e fin irla s e ve rá e n e l Te m a 1 1 : Re d e fin ició n d e o p e ra d o re s ) .

Cla s e s y m é t o d o s s e lla d o s

Un a c la s e s e lla d a e s u n a cla s e q u e n o p u e d e t e n e r cla s e s h ija s , y p a ra d e fin irla b a s t a a n t e p o n e r e l m o d ifica d o r sealed a


la d e fin ició n d e u n a cla s e n o rm a l. Po r e je m p lo :

sealed class ClaseSellada


{
}

Un a u t ilid a d d e d e fin ir u n a cla s e co m o s e lla d a e s q u e p e rm it e q u e la s lla m a d a s a s u s m é t o d o s virt u a le s h e re d a d o s s e


re a lice n t a n e ficie n t e m e n t e co m o s i fu e s e n n o virt u a le s , p u e s a l n o p o d e r e xis t ir cla s e s h ija s q u e lo s re d e fin a n n o p u e d e
h a b e r p o lim o rfis m o y n o h a y q u e d e t e rm in a r cu á l e s la ve rs ió n co rre ct a d e l m é t o d o a la q u e s e h a d e lla m a r. Nó t e s e q u e
s e h a d ich o m é t o d o s virt u a le s h e re d a d o s , p u e s lo q u e n o s e p e rm it e e s d e fin ir m ie m b ro s virt u a le s d e n t ro d e e s t e t ip o d e
cla s e s , ya q u e a l n o p o d e rs e h e re d a rs e d e e lla s e s a lg o s in s e n t id o e n t a n t o q u e n u n ca p o d rá in re d e fin irs e .

Ah o ra b ie n , h a y q u e t e n e r e n cu e n t a q u e s e lla r re d u ce e n o rm e m e n t e s u ca p a cid a d d e re u t iliza ció n , y e s o e s a lg o q u e e l


a u m e n t o d e e ficie n cia o b t e n id o e n la s lla m a d a s a s u s m é t o d o s virt u a le s n o s u e le co m p e n s a r. En re a lid a d la p rin cip a l ca u s a
d e la in clu s ió n d e e s t a s cla s e s e n C# e s q u e p e rm it e n a s e g u ra r q u e cie rt a s cla s e s crít ica s n u n ca p o d rá n t e n e r cla s e s h ija s .
Po r e je m p lo , p a ra s im p lifica r e l fu n cio n a m ie n t o d e l CLR y lo s co m p ila d o re s s e h a o p t a d o p o rq u e t o d o s lo s t ip o s d e d a t o s
b á s ico s e xce p t o System.Object e s t é n s e lla d o s , p u e s a s í la s o p e ra cio n e s co n e llo s s ie m p re s e re a liza rá n d e la m is m a
fo rm a a l n o in flu irle s e l p o lim o rfis m o .

Té n g a s e e n cu e n t a q u e e s a b s u rd o d e fin ir s im u lt á n e a m e n t e u n a cla s e co m o abstract y sealed, p u e s n u n ca p o d ría


a cce d e rs e a la m is m a a l n o p o d e rs e cre a r cla s e s h ija s s u ya s q u e d e fin a n s u s m é t o d o s a b s t ra ct o s . Po r e s t a ra zó n , e l
co m p ila d o r co n s id e ra e rró n e o d e fin ir u n a cla s e co n a m b o s m o d ifica d o re s a la ve z.

Ap a rt e d e p a ra s e lla r cla s e s , t a m b ié n s e p u e d e u s a r sealed co m o m o d ifica d o r e n la re d e fin ició n d e u n m é t o d o p a ra


co n s e g u ir q u e la n u e va ve rs ió n d e l m is m o q u e s e d e fin a d e je d e s e r virt u a l y s e le p u e d a n a p lica r la s o p t im iza cio n e s a rrib a
co m e n t a d a s . Un e je m p lo d e e s t o e s e l s ig u ie n t e :

class A
{
public abstract F();
}

class B:A
{
public sealed override F() // F() deja de ser redefinible

http://www.programacion.com/tutorial.csharp.6.html (16 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

{}
}

Oc u lt a c ió n d e m ie m b ro s

Ha y o ca s io n e s e n la s q u e p u e d e re s u lt a r in t e re s a n t e u s a r la h e re n cia ú n ica m e n t e co m o m e ca n is m o d e re u t iliza ció n d e


có d ig o p e ro n o n e ce s a ria m e n t e p a ra re u t iliza r m ie m b ro s . Es d e cir, p u e d e q u e in t e re s e h e re d a r d e u n a cla s e s in q u e e llo
im p liq u e q u e s u cla s e h ija h e re d e s u s m ie m b ro s t a l cu a l s in o co n lig e ra s m o d ifica cio n e s .

Es t o p u e d e m u y ú t il a l u s a r la h e re n cia p a ra d e fin ir ve rs io n e s e s p e cia liza d a s d e cla s e s d e u s o g e n é rico . Po r e je m p lo , lo s


o b je t o s d e la cla s e System.Collections.ArrayList in clu id a e n la BCL p u e d e n a lm a ce n a r cu a lq u ie r n ú m e ro d e
o b je t o s System.Object, q u e a l s e r la cla s e p rim ig e n ia e llo s ig n ifica q u e p u e d e n a lm a ce n a r o b je t o s d e cu a lq u ie r t ip o . S in
e m b a rg o , a l re cu p e ra rlo s d e e s t e a lm a cé n g e n é rico s e t ie n e e l p ro b le m a d e q u e lo s m é t o d o s q u e p a ra e llo s e o fre ce n
d e vu e lve n o b je t o s System.Object, lo q u e im p lica rá q u e m u ch a s ve ce s h a ya lu e g o q u e re co n ve rt irlo s a s u t ip o o rig in a l
m e d ia n t e d o wn ca s t in g p a ra p o d e r a s í u s a r s u s m é t o d o s e s p e cífico s . En s u lu g a r, s i s ó lo s e va a u s a r u n ArrayList p a ra
a lm a ce n a r o b je t o s d e u n cie rt o t ip o p u e d e re s u lt a r m á s có m o d o u s a r u n o b je t o d e a lg u n a cla s e d e riva d a d e ArrayList
cu yo m é t o d o e xt ra ct o r d e o b je t o s o cu lt e a l h e re d a d o d e ArrayList y d e vu e lva d ire ct a m e n t e o b je t o s d e e s e t ip o .

Pa ra ve r m á s cla ra m e n t e có m o h a ce r la o cu lt a ció n , va m o s a t o m a r e l s ig u ie n t e e je m p lo d o n d e s e d e riva d e u n a cla s e co n


u n m é t o d o void F() p e ro s e d e s e a q u e e n la cla s e h ija e l m é t o d o q u e s e t e n g a s e a d e la fo rm a int F():

class Padre
{
public void F()
{}
}

class Hija:Padre
{
public int F()
{return 1;}
}

Co m o e n C# n o s e a d m it e q u e e n u n a m is m a cla s e h a ya n d o s m é t o d o s q u e s ó lo s e d ife re n cie n e n s u s va lo re s d e re t o rn o ,


p u e d e p e n s a rs e q u e e l có d ig o a n t e rio r p ro d u cirá u n e rro r d e co m p ila ció n . S in e m b a rg o , e s t o n o e s a s í s in o q u e e l
co m p ila d o r lo q u e h a rá s e rá q u e d a rs e ú n ica m e n t e co n la ve rs ió n d e fin id a e n la cla s e h ija y d e s e ch a r la h e re d a d a d e la
cla s e p a d re . A e s t o s e le co n o ce co m o o c u lt a c ió n d e m ie m b ro ya q u e h a ce d e s p a ra ce r e n la cla s e h ija e l m ie m b ro
h e re d a d o , y cu a n d o a l co m p ila r s e d e t e ct e s e g e n e ra rá e l s ig u ie n t e d e a vis o ( s e s u p o n e q u e cla s e s . cs a lm a ce n a e l có d ig o
a n t e iro r) :

clases.cs(9,15): warning CS0108: The keyword new is required on


'Hija.F()' because it hides inherited member 'Padre.F()';

Co m o g e n e ra lm e n t e cu a n d o s e h e re d a in t e re s a q u e la cla s e h ija co m p a rt a lo s m is m o s m ie m b ro s q u e la cla s e p a d re ( y s i


a ca s o q u e a ñ a d a m ie m b ro s e xt ra ) , e l co m p ila d o r e m it e e l a vis o a n t e rio r p a ra in d ica r q u e n o s e e s t á h a cie n d o lo h a b it u a l.
S i q u e re m o s e vit a rlo h e m o s d e p re ce d e r la d e fin ició n d e l m é t o d o o cu lt a d o r d e la p a la b ra re s e rva d a new p a ra a s í in d ica r
e xp líct a m e n t e q u e lo q u e q u e re m o s h a ce r e s o cu lt a r e lF() h e re d a d o :

class Padre
{
public void F()
{}
}

class Hija:Padre
{
new public int F()
{return 1;}
}

En re a lid a d la o cu lt a ció n d e m ie m b ro s n o im p lica lo s m ie m b ro s o cu lt a d o s t e n g a n q u e s e r m é t o d o s , s in o q u e t a m b ié n


p u e d e n s e r ca m p o s o cu a lq u ie ra d e lo s d e m á s t ip o s d e m ie m b ro q u e e n t e m a s p o s t e rio re s s e ve rá n . Po r e je m p lo , p u e d e

http://www.programacion.com/tutorial.csharp.6.html (17 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

q u e s e d e s e e q u e u n ca m p o X d e t ip o int e s t é d is p o n ib le e n la cla s e h ija co m o s i fu e s e d e t ip o string.

Ta m p o co im p lica q u e lo s m ie m b ro s m é t o d o s o cu lt a d o s t e n g a n q u e d ife re n cia rs e d e lo s m é t o d o s o cu lt a d o re s e n s u t ip o d e


re t o rn o , s in o q u e p u e d e n t e n e r e xá ct a m e n t e s u m is m o t ip o d e re t o rn o , p a rá m e t ro s y n o m b re . Ha ce r e s t o p u e d e d a r lu g a r
a e rro re s m u y s u t ile s co m o e l in clu id o e n la s ig u ie n t e va ria n t e d e la cla s e Tra b a ja d o r d o n d e e n ve z d e re d e fin irs e
Cumpleaños() lo q u e s e h a ce e s o cu lt a rlo a l o lvid a r in clu ir e l override:

using System;

class Persona
{
public string Nombre; // Campo de cada objeto Persona que almacena su nombre
public int Edad; // Campo de cada objeto Persona que almacena su edad
public string NIF; // Campo de cada objeto Persona que almacena su NIF

// Incrementa en uno la edad del objeto Persona


public virtual void Cumpleaños()
{
Console.WriteLine("Incrementada edad de persona");
}

// Constructor de Persona
public Persona (string nombre, int edad, string nif)
{
Nombre = nombre;
Edad = edad;
NIF = nif;
}

class Trabajador: Persona


{
int Sueldo; // Campo de cada objeto Trabajador que almacena cuánto gana

Trabajador(string nombre, int edad, string nif, int sueldo):


base(nombre, edad, nif)
{ // Inicializamos cada Trabajador en base al constructor de Persona
Sueldo = sueldo;
}

public Cumpleaños()
{
Edad++;
Console.WriteLine("Incrementada edad de trabajador");
}

public static void Main()


{
Persona p = new Trabajador("Josan", 22, "77588260-Z", 100000);

p.Cumpleaños();
// p.Sueldo++; //ERROR: Sueldo no es miembro de Persona
}
}

Al n o in clu irs e override s e h a p e rd id o la ca p a cid a d d e p o lim o rifs m o , y e llo p u e d e ve rs e e n q u e la s a lid a q u e a h o ra


m o s t ra ra p o r p a n t a lla e l có d ig o :

Incrementada edad de persona

Erro re s d e e s t e t ip o s o n m u y s u t ile s y p o d ría n s e r d ifícile s d e d e t e ct a r. S in e m b a rg o , e n C# e s fá cil h a ce rlo g ra cia s a q u e


e l co m p ila d o r e m it irá e l m e n s a je d e a vis o ya vis t o p o r h a b e r h e ch o la o cu lt a ció n s in new. Cu a n d o e l p ro g ra m a d o r lo ve a

http://www.programacion.com/tutorial.csharp.6.html (18 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

p o d rá a ñ a d ir new p a ra s u p rim irlo s i re a lm e n t e lo q u e q u e ría h a ce r e ra o cu lt a r, p e ro s i e s a n o e ra s u in t e n ció n a s í s a b rá


q u e t ie n e q u e co rre g ir e l có d ig o ( p o r e je m p lo , a ñ a d ie n d o e l override o lvid a d o )

Co m o s u p ro p io n o m b re in d ica , cu a n d o s e re d e fin e u n m é t o d o s e ca m b ia s u d e fin ició n o rig in a l y p o r e llo la s lla m a d a s a l


m is m o e je cu t a ra n d ich a ve rs ió n a u n q u e s e h a g a n a t ra vé s d e va ria b le s d e la cla s e p a d re q u e a lm a ce n e n o b je t o s d e la
cla s e h ija d o n d e s e re d e fin ió . S in e m b a rg o , cu a n d o s e o cu lt a u n m é t o d o n o s e ca m b ia s u d e fin ició n e n la cla s e p a d re s in o
s ó lo e n la cla s e h ija , p o r lo q u e la s lla m a d a s a l m is m o re a liza d a s a t ra vé s d e va ria b le s d e la cla s e p a d re e je cu t a rá n la
ve rs ió n d e d ich a cla s e p a d re y la s re a liza d a s m e d ia n t e va ria b le s d e la cla s e h ija e je cu t a rá n la ve rs ió n d e la cla s e h ija .

En re a lid a d e l p o lim o rfis m o y la o cu lt a ció n n o s o n co n ce p t o s t o t a lm e n t e a n t a g ó n ico s , y a u n q u e n o e s vá lid o d e fin ir


m é t o d o s q u e s im u lt á n e m e n t e cu e n t e n co n lo s m o d ifica d o re s override y new ya q u e u n m é t o d o o cu lt a d o r e s co m o s i
fu e s e la p rim e ra ve rs ió n q u e s e h a ce d e l m is m o ( lu e g o n o p u e d e re d e fin irs e a lg o n o d e fin id o ) , s í q u e e s p o s ib le co m b in a r
new y virtual p a ra d e fin ir m é t o d o s o cu lt a d o re s re d e fin ib le s . Po r e je m p lo :

using System;

class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}

class Ocultación
{
public static void Main()
{
A a = new D();
B b = new D();
C c = new D();
D d = new D();

a.F();
b.F();
c.F();
d.F();
}
}

La s a lid a p o r p a n t a lla d e e s t e p ro g ra m a e s :

B.F
B.F
D.F
D.F

Au n q u e e l ve rd a d e ro t ip o d e lo s o b je t o s a cu yo m é t o d o s e lla m a e n Main() e s D, e n la s d o s p rim e ra s lla m a d a s s e lla m a a l


F() d e B. Es t o s e d e b e a q u e la re d e fin ició n d a d a e n B ca m b ia la ve rs ió n d e F() e n A p o r la s u ya p ro p ia , p e ro la
o cu lt a ció n d a d a e n C h a ce q u e p a ra la re d e fin ició n q u e p o s t e rio rm e n t e s e d a e n D s e co n s id e re q u e la ve rs ió n o rig in a l d e
F() e s la d a d a e n C y e llo p ro vo ca q u e n o m o d ifiq u e la ve rs io n e s d e d ich o m é t o d o d a d a s e n A y B ( q u e , p o r la re d e fin ició n
d a d a e n B, e n a m b o s ca s o s s o n la ve rs ió n d e B)

http://www.programacion.com/tutorial.csharp.6.html (19 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

Un t ru co n e m o t é cn ico q u e p u e d e s e r ú t il p a ra d e t e rm in a r a q u é ve rs ió n d e l m é t o d o s e lla m a rá e n ca s o s co m p le jo s co m o e l
a n t e rio r co n s is t e e n co n s id e ra r q u e e l m e ca n is m o d e p o lim o rfis m o fu n cio n a co m o s i b u s ca s e e l ve rd a d e ro t ip o d e l o b je t o a
cu yo m é t o d o s e lla m a d e s ce n d ie n d o e n la je ra rq u ía d e t ip o s d e s d e e l t ip o d e la va ria b le s o b re la q u e s e a p lica e l m é t o d o y
d e m a n e ra q u e s i d u ra n t e d ich o re co rrid o s e lle g a a a lg u n a ve rs ió n d e l m é t o d o co n new s e p a ra la b ú s q u e d a y s e q u e d a
co n la ve rs ió n d e l m is m o in clu id a e n e l t ip o re co rrid o ju s t o a n t e s d e l q u e t e n ía e l m é t o d o o cu lt a d o r.

Ha y q u e t e n e r e n cu e n t a q u e e l g ra d o d e o cu lt a ció n q u e p ro p o rcio n e new d e p e n d e d e l n ive l d e a cce s ib ilid a d d e l m é t o d o


o cu lt a d o r, d e m o d o q u e s i e s p riva d o s ó lo o cu lt a rá d e n t ro d e la cla s e d o n d e e s t é d e fin id o . Po r e je m p lo , d a d o :

using System;

class A
{
public virtual void F() // F() es un método redefinible
{
Console.WriteLine("F() de A");
}
}

class B: A
{
new private void F() {} // Oculta la versión de F() de A sólo dentro de B
}

class C: B
{
public override void F() // Válido, pues aquí sólo se ve el F() de A
{
base.F();
Console.WriteLine("F() de B");
}

public static void Main()


{
C obj = new C();
obj.F();
}
}

La s a lid a d e e s t e p ro g ra m a p o r p a n t a lla s e rá :

F() de A
F() de B

Pe s e a t o d o lo co m e n t a d o , h a y q u e re s a lt a r q u e la p rin cip a l u t ilid a d d e p o d e r in d ica r e xp lícit a m e n t e s i s e d e s e a re d e fin ir u


o cu lt a r ca d a m ie m b ro e s q u e fa cilit a e n o rm e m e n t e la re s o lu ció n d e p ro b le m a s d e v e rs io n a d o d e t ip o s q u e p u e d a n s u rg ir
s i a l d e riva r u n a n u e va cla s e d e o t ra y a ñ a d irle m ie m b ro s a d icio n a le s , p o s t e rio rm e n t e s e la d e s e a a ct u a liza r co n u n a n u e va
ve rs ió n d e s u cla s e p a d re p e ro é s t a co n t ie n e m ie m b ro s q u e e n t ra n e n co n flict o s co n lo s a ñ a d id o s p re via m e n t e a la cla s e
h ija cu a n d o a ú n n o e xis t ía n e n la cla s e p a d re . En le n g u a je s co m o Ja va d o n d e t o d o s lo s m ie m b ro s s o n im p lícit a m e n t e
virt u a le s e s t o s d a lu g a r a p ro b le m a s m u y g ra ve s d e b id o s s o b re t o d o a :

● Qu e p o r s u s n o m b re s lo s n u e vo s m ie m b ro s d e la cla s e p a d re e n t re e n co n flict o s co n lo s a ñ a d id o s a la
cla s e h ija cu a n d o n o e xis it ía n . Po r e je m p lo , s i la ve rs ió n in icia l d e d e la cla s e p a d re n o co n t ie n e n in g ú n
m é t o d o d e n o m b re F(), a la cla s e h ija s e le a ñ a d e vo id F() y lu e g o e n la n u e va ve rs ió n d e la cla s e
p a d re s e in co rp o ra d o in t F(), s e p ro d u cirá u n e rro r p o r t e n e rs e e n la cla s e h ija d o s m é t o d o s F()

En Ja va p a ra re s o lve r e s t e p ro b le m a u n a p o s ib ilid a d s e ría p e d ir a l cre a d o r d e la cla s e p a d re q u e ca m b ia s e e l


n o m b re o p a rá m e t ro s d e s u m é t o d o , lo cu a l n o e s s ie m p re p o s ib le n i co n ve n ie n t e e n t a n t o q u e e llo p o d ría t ra s la d a r
e l p ro b le m a a q u e h u b ie s e n d e riva d o d e d ich a cla s e a n t e s d e vo lve rla a m o d ifica r. Ot ra p o s ib ilid a d s e ría m o d ifica r e l
n o m b re o p a rá m e t ro s d e l m é t o d o e n la cla s e h ija , lo q u e n u e va m e n t e p u e d e lle va r a in co m p a t ib ilid a d e s s i t a m b ié n
s e h u b ie s e d e riva d o d e d ich a cla s e h ija .

● Qu e lo s n u e vo s m ie m b ro s t e n g a n lo s m is m o s n o m b re s y t ip o s d e p a rá m e t ro s q u e lo s in clu id o s e n la s

http://www.programacion.com/tutorial.csharp.6.html (20 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

cla s e s h ija s y s e a o b lig a t o rio q u e t o d a re d e fin ició n q u e s e h a g a d e e llo s s ig a u n cie rt o e s q u e m a .

Es t o e s m u y p ro b le m á t ico e n le n g u a je s co m o Ja va d o n d e t o d a d e fin ició n d e m é t o d o co n ig u a l n o m b re y p a rá m e t ro s


q u e a lg u n o d e s u cla s e p a d re e s co n s id e ra d o im p lícit a m e n t e re d e fin ició n d e é s t e , ya q u e d ifícilm e n t e e n u n a cla s e
h ija e s crit a co n a n t e rio rid a d a la n u e va ve rs ió n d e la cla s e p a d re s e h a b rá s e g u id o e l e s q u e m a n e ce s a rio . Po r e llo ,
p a ra re s o lve rlo h a b rá q u e a ct u a liza r la cla s e h ija p a ra q u e lo s ig a y d e t a l m a n e ra q u e lo s ca m b io s q u e s e le h a g a n
n o a fe ct e n a s u s s u b cla s e s , lo q u e e llo p u e d e s e r m á s o m e n o s d ifícil s e g ú n la s ca ra ct e rís t ica s d e l e s q u e m a a s e g u ir.

Ot ra p o s ib ilid a d s e ría s e lla r e l m é t o d o e n la cla s e h ija , p e ro e llo re co rt a la ca p a cid a d d e re u t iliza ció n d e d ich a cla s e y
s ó lo t ie n e s e n t id o s i n o fu e re d e fin id o e n n in g u n a s u b cla s e s u ya .

En C# t o d o s e s t o s p ro b le m a s s o n d e fá cil s o lu ció n ya q u e p u e d e n re s o lve rs e co n s ó lo o cu lt a r lo s n u e vo s m ie m b ro s e n la


cla s e h ija y s e g u ir t ra b a ja n d o co m o s i n o e xis t ie s e n .

Mie m b ro s d e t ip o

En re a lid a d , d e n t ro la d e fin ició n d e u n t ip o d e d a t o n o t ie n e p o rq u é in clu irs e s ó lo d e fin icio n e s d e m ie m b ro s co m u n e s a


t o d o s s u s o b je t o s , s in o t a m b ié n p u e d e n d e fin irs e m ie m b ro s lig a d o s a l t ip o co m o t a l y n o a lo s o b je t o s d e l m is m o . Pa ra e llo
b a s t a p re ce d e r la d e fin ició n d e e s e m ie m b ro d e la p a la b ra re s e rva d a static, co m o m u e s t ra e s t e e je m p lo :

class A
{
int x;
static int y;
}

Lo s o b je t o s d e cla s e A s ó lo va n a d is p o n e r d e l ca m p o x, m ie n t ra s q u e e l ca m p o y va a p e rt e n e ce r a la cla s e A. Po r e s t a
ra zó n s e d ice q u e lo s m ie m b ro s co n m o d ifica d o r static s o n m ie m b ro s d e t ip o y q u e lo s n o lo t ie n e n s o n m ie m b ro s d e
o b je t o .

Pa ra a cce d e r a u n m ie m b ro d e cla s e ya n o e s vá lid a la s in t a xis h a s t a a h o ra vis t a d e <objeto>.<miembro>, p u e s a l n o


e s t a r e s t o s m ie m b ro s lig a d o s a n in g ú n o b je t o n o p o d ría p o n e rs e n a d a e n e l ca m p o <objeto>. La s in t a xis a u s a r p a ra
a cce d e r a e s t o s m ie m b ro s s e rá <nombreClase>.<miembro>, co m o m u e s t ra e je m p lo d o n d e s e a s ig n a e l va lo r 2 a l
m ie m b ro y d e la cla s e A d e fin id a m á s a rrib a :

A.y = 2;

Nó t e s e q u e la in clu s ió n d e m ie m b ro s d e cla s e ro m p e co n la a firm a ció n in d ica d a a l p rin cip io d e l t e m a e n la q u e s e d e cía


q u e C# e s u n le n g u a je o rie n t a d o a o b je t o s p u ro e n e l q u e t o d o co n lo q u e s e t ra b a ja s o n o b je t o s , ya q u e a lo s m ie m b ro s
d e t ip o n o s e le s a cce d e a t ra vé s d e o b je t o s s in o n o m b re s d e t ip o s .

Es im p o rt a n t e m a t iza r q u e s i d e fin im o s u n a fu n ció n co m o static, e n t o n ce s e l có d ig o d e la m is m a s ó lo p o d rá a cce d e r


im p lícit a m e n t e ( s in s in t a xis <objeto>.<miembro>) a o t ro s m ie m b ro s static d e l t ip o d e d a t o a l q u e p e rt e n e zca . O s e a ,
n o s e p o d rá a cce d e r a n i a lo s m ie m b ro s d e o b je t o d e l t ip o e n q u e e s t é d e fin id o n i s e p o d rá u s a r this ya q u e e l m é t o d o
n o e s t á a s o cia d o a n in g ú n o b je t o . O s e a , e s t e có d ig o s e ría in vá lid o :

int x;
static void Incrementa()
{
x++; //ERROR: x es miembro de objeto e Incrementa() lo es de clase.
}

Ta m b ié n h a y q u e s e ñ a la r q u e lo s m é t o d o s e s t á t ico s n o e n t ra n d e n t ro d e l m e ca n is m o d e re d e fin icio n e s d e s crit o e n e s t e


m is m o t e m a . Dich o m e ca n is m o s ó lo e s a p lica b le a m é t o d o s d e o b je t o s , q u e s o n d e q u ie n e s p u e d e d e cla ra rs e va ria b le s y
p o r t a n t o p u e d e a ct u a r e l p o lim o rifs m o . Po r e llo , in clu ir lo s m o d ifica d o re s virtual, override o abstract a l d e fin ir u n
m é t o d o static e s co n s id e ra d o e rró n e o p o r e l co m p ila d o r; a u n q u e e llo n o s ig n ifica n q u e lo s m ie m b ro s static n o s e
h e re d e n , s in o q u e s ó lo t ie n e s e n t id o re d e fin irlo s .

En c a p s u la c ió n

Ya h e m o s vis t o q u e la h e re n cia y e l p o lim o rfis m o e ra n d o s d e lo s p ila re s fu n d a m e n t a le s e n lo s q u e e s a p o ya la


p ro g ra m a ció n o rie n t a d a a o b je t o s . Pu e s b ie n , e l t e rce ro y ú lt im o e s la e n c a p s u la c ió n , q u e e s u n m e ca n is m o q u e p e rm it e

http://www.programacion.com/tutorial.csharp.6.html (21 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

a lo s d is e ñ a d o re s d e t ip o s d e d a t o s d e t e rm in a r q u é m ie m b ro s d e lo s t ip o s cre e n p u e d e n s e r u t iliza d o s p o r o t ro s
p ro g ra m a d o re s y cu á le s n o . La s p rin cip a le s ve n t a ja s q u e e llo a p o rt a s o n :

● S e fa cilit a a lo s p ro g ra m a d o re s q u e va ya a u s a r e l t ip o d e d a t o ( p ro g ra m a d o re s clie n t e s ) e l a p re n d iza je


d e có m o t ra b a ja r co n é l, p u e s s e le p u e d e n o cu lt a r t o d o s lo s d e t a lle s re la t ivo s a s u im p le m e n t a ció n
in t e rn a y s ó lo d e ja rle vis ib le s a q u e llo s q u e p u e d a n u s a r co n s e g u rid a d . Ad e m á s , a s í s e le s e vit a q u e
co m e t a n e rro re s p o r m a n ip u la r in a d e cu a d a m e n t e m ie m b ro s q u e n o d e b e ría n t o ca r.
● S e fa cilit a a l cre a d o r d e l t ip o la p o s t e rio r m o d ifica ció n d e l m is m o , p u e s s i lo s p ro g ra m a d o re s clie n t e s
n o p u e d e n a cce d e r a lo s m ie m b ro s n o vis ib le s , s u s a p lica cio n e s n o s e ve rá n a fe ct a d a s s i é s t o s ca m b ia n
o s e e lim in a n . Gra cia s a e s t o e s p o s ib le cre a r in icia lm e n t e t ip o s d e d a t o s co n u n d is e ñ o s e n cillo a u n q u e
p o co e ficie n t e , y s i p o s t e rio rm e n t e e s n e ce s a rio m o d ifica rlo s p a ra a u m e n t a r s u e ficie n cia , e llo p u e d e
h a ce rs e s in a fe ct a r a l có d ig o e s crit o e n b a s e a la n o m e jo ra d a d e t ip o .

La e n ca p s u la ció n s e co n s ig u e a ñ a d ie n d o m o d ific a d o re s d e a c c e s o e n la s d e fin icio n e s d e m ie m b ro s y t ip o s d e d a t o s .


Es t o s m o d ifica d o re s s o n p a rt ícu la s q u e s e le s co lo ca n d e la n t e p a ra in d ica r d e s d e q u é có d ig o s p u e d e a cce d e rs e a e llo s ,
e n t e n d ié n d o s e p o r a cce d e r e l h e ch o d e u s a r s u n o m b re p a ra cu a lq u ie r co s a q u e n o s e a d e fin irlo , co m o lla m a rlo s i e s u n a
fu n ció n , le e r o e s crib ir s u va lo r s i e s u n ca m p o , cre a r o b je t o s o h e re d a r d e é l s i e s u n a cla s e , e t c.

Po r d e fe ct o s e co n s id e ra q u e lo s m ie m b ro s d e u n t ip o d e d a t o s ó lo s o n a cce s ib le s d e s d e có d ig o s it u a d o d e n t ro d e la
d e fin ició n d e l m is m o , a u n q u e e s t o p u e d e ca m b ia rs e p re ce d ie n d o lo s d e u n o lo s s ig u ie n t e s m o d ifica d o re s ( a u n q u e a lg u n o s
d e e llo s ya s e h a n e xp lica d o a lo la rg o d e l t e m a , a q u í s e re co g e n t o d o s d e m a n e ra d e t a lla d a ) a l d e fin irlo s :

p u b lic : Pu e d e s e r a cce d id o d e s d e cu a lq u ie r có d ig o .

p ro t e c t e d : De s d e u n a cla s e s ó lo p u e d e a cce d e rs e a m ie m b ro s p ro t e c t e d d e o b je t o s d e e s a m is m a cla s e o d e


s u b cla s e s s u ya s . As í, e n e l s ig u ie n t e có d ig o la s in s t ru ccio n e s co m e n t a d a s co n // Error n o s o n vá lid a s p o r lo
e s crit o ju n t o a e lla s :

public class A
{
protected int x;

static void F(A a, B b, C c)


{
a.x = 1; // Ok
b.x = 1; // Ok
c.x = 1; // OK
}
}

public class B: A
{
static void F(A a, B b, C c)
{
//a.x = 1; // Error, ha de accederse a traves de objetos tipo B o C
b.x = 1; // Ok
c.x = 1; // Ok
}
}

public class C: B
{
static void F(A a, B b, C c)
{
//a.x = 1; // Error, ha de accederse a traves de objetos tipo C
//b.x = 1; // Error, ha de accederse a traves de objetos tipo C
c.x = 1; // Ok
}
}

Ob via m e n t e s ie m p re q u e s e h e re d e d e u n a cla s e s e t e n d rá t o t a l a cce s o e n la cla s e h ija - e im p lícit a m e n t e s in


n e ce s id a d d e u s a r la s in t a xis <objeto>.<miembro>- a lo s m ie m b ro s q u e é s t a h e re d e d e s u cla s e p a d re , co m o
m u e s t ra e l s ig u ie n t e e je m p lo :

http://www.programacion.com/tutorial.csharp.6.html (22 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

using System;

class A
{
protected int x=5;
}

class B:A
{
B()
{
Console.WriteLine("Heredado x={0} de clase A", x);
}

public static void Main()


{
new B();
}
}

Co m o e s d e e s p e ra r, la s a lid a p o r p a n t a lla d e l p ro g ra m a d e e je m p lo s e rá :

Heredado x=5 de clase A

p riv a t e : S ó lo p u e d e s e r a cce d id o d e s d e e l có d ig o d e la cla s e a la q u e p e rt e n e ce . Es lo co n s id e ra d o p o r d e fe ct o .

in t e rn a l: S ó lo p u e d e s e r a cce d id o d e s d e có d ig o p e rt e n e cie n t e a l e n s a m b la d o e n q u e s e h a d e fin id o .

p ro t e c t e d in t e rn a l: S ó lo p u e d e s e r a cce d id o d e s d e có d ig o p e rt e n e cie n t e a l e n s a m b la d o e n q u e s e h a d e fin id o o


d e s d e cla s e s q u e d e rive n d e la cla s e d o n d e s e h a d e fin id o .

Es im p o rt a n t e re co rd a r q u e t o d a re d e fin ició n d e u n m é t o d o virt u a l o a b s t ra ct o h a d e re a liza rs e m a n t e n ie n d o lo s m is m o s


m o d ifica d o re s q u e t u vie s e e l m é t o d o o rig in a l. Es d e cir, n o p o d e m o s re d e fin ir u n m é t o d o p ro t e g id o ca m b ia n d o s u
a cce s ib ilid a d p o r p ú b lica , p u e s s i e l cre a d o r d e la cla s e b a s e lo d e fin ió a s í p o r a lg o s e ría .

Re s p e ct o a lo s t ip o s d e d a t o s , p o r d e fe ct o s e co n s id e ra q u e s o n a cce s ib le s s ó lo d e s d e e l m is m o e n s a m b la d o e n q u e h a s id o
d e fin id o s , a u n q u e t a m b ié n e s p o s ib le m o d ifica r e s t a co n s id e ra ció n a n t e p o n ie n d o u n o d e lo s s ig u ie n t e s m o d ifica d o re s a s u
d e fin ició n :

p u b lic : Es p o s ib le a cce d e r a la cla s e d e s d e cu a lq u ie r e n s a m b la d o .

in t e rn a l: S ó lo e s p o s ib le a cce d e r a la cla s e d e s d e e l e n s a m b la d o d o n d e s e d e cla ró . Es lo co n s id e ra d o p o r d e fe ct o .

Ta m b ié n p u e d e n d e fin irs e t ip o s d e n t ro d e o t ro s ( t ip o s in t e rn o s ) En e s e ca s o s e rá n co n s id e ra d o s m ie m b ro s d e l t ip o
co n t e n e d o r d e n t ro d e la q u e s e h a ya n d e fin id o , p o r lo q u e le s s e rá n a p lica b le s t o d o s lo s m o d ifica d o re s vá lid o s p a ra
m ie m b ro s y p o r d e fe ct o s e co n s id e ra rá q u e , co m o co n cu a lq u ie r m ie m b ro , s o n p riva d o s . Pa ra a cce d e r a e s t o s t ip o s d e s d e
có d ig o e xt e rn o a s u t ip o co n t e n e d o r ( ya s e a p a ra h e re d a r d e e llo s , cre a r o b je t o s s u yo s o a cce d e r a s u s m ie m b ro s
e s t á t ico s ) , a d e m á s d e n e ce s it a rs e lo s p e rm is o s d e a cce s o n e ce s a rio s s e g ú n e l m o d ifica d o r d e a cce s ib ilid a d a l d e fin irlo s ,
h a y q u e u s a r la n o t a ció n <nombreTipoContendera>.<nombreTipoInterno> co m o m u e s t ra e s t e e je m p lo :

class A // No lleva modificador, luego se considera que es internal


{
public class AInterna {} // Si ahora no se pusiese public se consideraría private
}

class B:A.AInterna // B deriva de la clase interna AInterna definida dentro de A. Es


{} // válido porque A.AInterna es pública

Prin cip io Pá g in a

http://www.programacion.com/tutorial.csharp.6.html (23 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.6.html (24 de 24) [20/10/2002 18:21:01]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 6 : Es p a cio s d e n o m b re s
❍ Co n ce p t o d e e s p a cio d e n o m b re s
❍ De fin ició n d e e s p a cio s d e n o m b re s
❍ Im p o rt a ció n d e e s p a cio s d e n o m b re s
❍ Es p a cio d e n o m b re s d is t rib u id o s

Te m a 6 : Es p a c io s d e n o m b re s

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

Co n c e p t o d e e s p a c io d e n o m b re s

De l m is m o m o d o q u e lo s fich e ro s s e o rg a n iza n e n d ire ct o rio s , lo s t ip o s d e d a t o s s e o rg a n iza n e n


e s p a c io s d e n o m b re s .

Po r u n la d o e s t o s e s p a cio s p e rm it e n t e n e r m á s o rg a n iza d o s lo s t ip o s d e d a t o s , lo q u e fa cilit a s u


lo ca liza ció n . De h e ch o , e s t a e s la fo rm a e n q u e s e e n cu e n t ra o rg a n iza d a la BCL, d e m o d o q u e t o d a s
la s cla s e s m á s co m ú n m e n t e u s a d a s e n cu a lq u ie r a p lica ció n p e rt e n e ce n a l e s p a cio d e n o m b re s
lla m a d o System, la s d e a cce s o a b a s e s d e d a t o s e n System.Data, la s d e re a liza ció n d e
o p e ra cio n e s d e e n t ra d a / s a lid a e n System.IO, e t c

Po r o t ro la d o , lo s e s p a cio s d e n o m b re s t a m b ié n p e rm it e n p o d e r u s a r e n u n m is m o p ro g ra m a va ria s
cla s e s co n ig u a l n o m b re s i p e rt e n e ce n a e s p a cio s d ife re n t e s . La id e a e s q u e ca d a fa b rica n t e d e fin a
s u s t ip o s d e n t ro d e u n e s p a cio d e n o m b re s p ro p io p a ra q u e a s í n o h a ya n co n flict o s s i va rio s
fa b rica n t e s d e fin e n cla s e s co n e l m is m o n o m b re y s e q u ie re n u s a r a la ve z e n u n m is m o p ro g ra m a .
Ob via m e n t e p a ra q u e e s t o fu n cio n e n o h a n d e co in cid ir lo s n o m b re s lo s e s p a cio s d e ca d a fa b rica n t e ,
y u n a fo rm a d e co n s e g u irlo e s d á n d o le s e l n o m b re d e la e m p re s a fa b rica n t e , o s u n o m b re d e
d o m in io e n In t e rn e t , e t c.

http://www.programacion.com/tutorial.csharp.7.html (1 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

D e fin ic ió n d e e s p a c io s d e n o m b re s

Pa ra d e fin ir u n e s p a cio d e n o m b re s s e u t iliza la s ig u ie n t e s in t a xis :

namespace <nombreEspacio>
{
<tipos>
}

Lo s t ip o s q u e s e d e fin a n e n <tipos> p a s a rá n a co n s id e ra s e p e rt e n e cie n t e s a l e s p a cio d e n o m b re s


lla m a d o <nombreEspacio>. Co m o ve re m o s m á s a d e la n t e , a p a rt e d e cla s e s e s t o t ip o s p u e d e n s e r
t a m b ié n in t e rfa ce s , e s t ru ct u ra s , t ip o s e n u m e ra d o s y d e le g a d o s . A co n t in u a ció n s e m u e s t ra u n
e je m p lo e n e l q u e d e fin im o s u n a cla s e d e n o m b re ClaseEjemplo p e rt e n e cie n t e a u n e s p a cio d e
n o m b re s lla m a d o EspacioEjemplo:

namespace EspacioEjemplo
{
class ClaseEjemplo
{}
}

El ve rd a d e ro n o m b re d e u n a cla s e , a l q u e s e d e n o m in a n o m b re c o m p le t a m e n t e c a lific a d o , e s e l
n o m b re q u e le d e m o s a l d e cla ra rla p re fija d o p o r la co n ca t e n a ció n d e t o d o s lo s e s p a cio s d e n o m b re s
a lo s q u e p e rt e n e ce o rd e n a d o s d e l m á s e xt e rn o a l m á s in t e rn o y s e g u id o ca d a u n o d e e llo s p o r u n
p u n t o ( ca rá ct e r . ) Po r e je m p lo , e l ve rd a d e ro n o m b re d e la cla s e ClaseEjemplo a n t e s d e fin id a e s
EspacioEjemplo.ClaseEjemplo. S i n o d e fin im o s u n a cla s e d e n t ro d e u n a d e fin ició n d e e s p a cio
d e n o m b re s - co m o s e h a h e ch o e n lo s e je m p lo s d e t e m a s p re vio s - s e co n s id e ra q u e é s t a p e rt e n e ce
a l d e n o m in a d o e s p a c io d e n o m b re s g lo b a l y s u n o m b re co m p le t a m e n t e ca lifica d o co in cid irá co n
e l n o m b re q u e le d e m o s a l d e fin irla . .

Ap a rt e d e d e fin icio n e s d e t ip o , t a m b ié n e s p o s ib le in clu ir co m o m ie m b ro s d e u n e s p a cio d e n o m b re s


a o t ro s e s p a cio s d e n o m b re s . Es d e cir, co m o s e m u e s t ra e l s ig u ie n t e e je m p lo e s p o s ib le a n id a r
e s p a cio s d e n o m b re s :

namespace EspacioEjemplo
{
namespace EspacioEjemplo2
{
class ClaseEjemplo
{}
}
}

Ah o ra ClaseEjemplo t e n d rá EspacioEjemplo.EspacioEjemplo2.ClaseEjemplo co m o
n o m b re co m p le t a m e n t e ca lifica d o . En re a lid a d e s p o s ib le co m p a ct a r la s d e fin icio n e s d e e s p a cio s d e
n o m b re s a n id a d o s u s a n d o e s t a s in t a xis d e ca lifica ció n co m p le t a p a ra d a r e l n o m b re d e l e s p a cio d e
n o m b re s a d e fin ir. Es d e cir, e l ú lt im o e je m p lo e s e q u iva le n t e a :

namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo

http://www.programacion.com/tutorial.csharp.7.html (2 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

{}
}

En a m b o s ca s o s lo q u e s e h a d e fin id o e s u n a cla s e lla m a d a ClaseEjemplo p e rt e n e cie n t e a l e s p a cio


d e n o m b re s lla m a d o EspacioEjemplo2 q u e , a s u ve z, p e rt e n e ce a l e s p a cio d e n o m b re s lla m a d o
EspacioEjemplo.

I m p o rt a c ió n d e e s p a c io s d e n o m b re s

S e n t e n c ia u s in g

En p rin cip io , s i d e s d e có d ig o p e rt e n e cie n t e a u n a cla s e d e fin id a e n u n cie rt o e s p a cio d e n o m b re s s e


d e s e a h a ce r re fe re n cia a t ip o s d e fin id o s e n o t ro s e s p a cio s d e n o m b re s , s e h a d e re fe rir a lo s m is m o s
u s a n d o s u n o m b re co m p le t a m e n t e ca lifica d o . Po r e je m p lo :

namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo
{}
}

class Principal // Pertenece al espacio de nombres global


{
public static void Main ()
{
EspacioEjemplo.EspacioEjemplo2.ClaseEjemplo c = new
EspacioEjemplo.EspacioEjemplo2.ClaseEjemplo();
}
}

Co m o p u e d e re s u lt a r m u y p e s a d o t e n e r q u e e s crib ir n o m b re s t a n la rg o s e n ca d a re fe re n cia a t ip o s
a s í d e fin id o s , e n C# s e h a in clu id o u n m e ca n is m o d e im p o rt a ció n d e e s p a cio s d e n o m b re s q u e u s a
la s ig u ie n t e s in t a xis :

using <espacioNombres>;

Es t e t ip o d e s e n t e n cia s s ie m p re h a d e a p a re ce r d e n t ro d e u n a d e fin ició n d e e s p a cio d e n o m b re s


a n t e s q u e cu a lq u ie r d e fin ició n d e m ie m b ro s d e la m is m a y p e rm it e n in d ica r cu á le s s e rá n lo s
e s p a cio s d e n o m b re s q u e s e u s a rá n im p lícit a m e n t e d e n t ro d e e s e e s p a cio d e n o m b re s . A lo s
m ie m b ro s d e lo s e s p a cio s d e n o m b re s a s í im p o rt a d o s s e le s p o d rá h a ce r re fe re n cia s in t e n e r q u e
u s a r ca lifica ció n co m p le t a , co m o m u e s t ra la s ig u ie n t e ve rs ió n d e l ú lt im o e je m p lo :

using EspacioEjemplo.EspacioEjemplo2;

namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo
{}
}

http://www.programacion.com/tutorial.csharp.7.html (3 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

// (1)
class Principal // Pertenece al espacio de nombres global
{
public static void ()
{
// EspacioEjemplo.EspacioEjemplo2. está implícito
ClaseEjemplo c = new ClaseEjemplo();
}
}

Nó t e s e q u e la s e n t e n cia using n o p o d ría h a b e rs e in clu id o e n la zo n a m a rca d a e n e l có d ig o co m o


( 1 ) e l có d ig o p o rq u e e n t o n ce s s e vio la ría la re g la d e q u e t o d o using h a a p a re ce r e n u n e s p a cio d e
n o m b re s a n t e s q u e cu a lq u ie r d e fin ició n d e m ie m b ro , ya q u e la d e fin ició n d e l e s p a cio d e n o m b re s
Es p a cio Eje m p lo . Es p a cio Eje m p lo 2 e s u n m ie m b ro d e l e s p a cio d e n o m b re s g lo b a l. S in e m b a rg o , e l
s ig u ie n t e có d ig o s i q u e s e ría vá lid o :

namespace EspacioEjemplo.EspacioEjemplo2
{
class ClaseEjemplo
{}
}

namespace Principal
{
using EspacioEjemplo.EspacioEjemplo2;

class Principal // Pertenece al espacio de nombres global


{
public static void Main()
{
ClaseEjemplo c = new ClaseEjemplo();
}
}
}

En e s t e ca s o e l using a p a re ce a n t e s q u e cu a lq u ie r o t ra d e fin ició n d e t ip o s d e n t ro d e l e s p a cio d e


n o m b re s e n q u e s e in clu ye ( Prin cip a l) S in e m b a rg o , a h o ra la im p o rt a ció n h e ch a co n e l using s ó lo
s e rá vá lid a d e n t ro d e có d ig o in clu id o e n e s e m is m o e s p a cio d e n o m b re s , m ie n t ra s q u e e n e l ca s o
a n t e rio r e ra vá lid a e n t o d o e l fich e ro a l e s t a r in clu id a e n e l e s p a cio d e n o m b re s g lo b a l.

S i u n a s e n t e n cia using im p o rt a m ie m b ro s d e ig u a l n o m b re q u e m ie m b ro s d e fin id o s e n e l e s p a cio


d e n o m b re s d o n d e s e in clu ye , e l using n o s e p ro d u ce e rro r a lg u n o p e ro s e d a p re fe re n cia a lo s
m ie m b ro s n o im p o rt a d o s . Un e je m p lo :

namespace N1.N2
{
class A {}
class B {}
}

namespace N3

http://www.programacion.com/tutorial.csharp.7.html (4 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

{
using N1.N2;

class A {}
class C: A {}
}

En e s t e e je m p lo C d e riva d e N3.A e n ve z d e N1.N2.A. S i q u e re m o s q u e o cu rra lo co n t ra rio


t e n d re m o s q u e re fe re n cia r a N1.N2.A p o r s u n o m b re co m p le t o a l d e fin ir C o , co m o s e e xp lica a
co n t in u a ció n , u s a r u n a lia s .

Es p e c ific a c ió n d e a lia s

Aú n e n e l ca s o d e q u e u s e m o s e s p a cio s d e n o m b re s d is t in t o s p a ra d ife re n cia r cla s e s co n ig u a l


n o m b re p e ro p ro ce d e n t e s d e d is t in t o s fa b rica n t e s , p o d ría n d a rs e co n flict o s s in u s a m o s s e n t e n cia s
using p a ra im p o rt a r lo s e s p a cio s d e n o m b re s d e d ich o s fa b rica n t e s ya q u e e n t o n ce s a l h a ce rs e
re fe re n cia a u n a d e la s cla s e s co m u n e s co n t a n s o lo s u n o m b re s im p le e l co m p ila d o r n o p o d rá
d e t e rm in a r a cu a l d e e lla s e n co n cre t o n o s re fe rim o s .

Po r e je m p lo , s i t e n e m o s u n a cla s e d e n o m b re co m p le t a m e n t e ca lifica d o A.Clase, o t ra d e n o m b re


B.Clase, y h a ce m o s :

using A;
using B;

class EjemploConflicto: Clase {}

¿ Có m o s a b rá e l co m p ila d o r s i lo q u e q u e re m o s e s d e riva r d e A. Cla s e o d e B. Cla s e ? En re a lid a d e l


co m p ila d o r n o p u e d e d e t e rm in a rlo y p ro d u cirá u n e rro r in fo rm a n d o d e q u e h a y u n a re fe re n cia
a m b ig u a a Cla s e .

Pa ra re s o lve r a m b ig ü e d a d e s d e e s t e t ip o p o d ría h a ce rs e re fe re n cia a lo s t ip o s e n co n flict o u s a n d o


s ie m p re s u s n o m b re s co m p le t a m e n t e ca lifica d o s , p e ro e llo p u e d e lle g a r a s e r m u y fa t ig o s o s o b re
t o d o s i s u s n o m b re s s o n m u y la rg o s . Pa ra s o lu cio n a r lo s co n flict o s d e n o m b re s s in t e n e r q u e e s crib ir
t a n t o s e h a in clu id o e n C# la p o s ib ilid a d d e d e fin ir a lia s p a ra cu a lq u ie r t ip o d e d a t o , q u e s o n
s in ó n im o s p a ra lo s m is m o s q u e s e d e fin e n u s a n d o la s ig u ie n t e s in t a xis :

using <alias> = <nombreCompletoTipo>;

Co m o cu a lq u ie r o t ro u s in g , la s d e fin icio n e s d e a lia s s ó lo p u e d e n in clu irs e a l p rin cip io d e la s


d e fin icio n e s d e e s p a cio s d e n o m b re s y s ó lo t ie n e n va lid e z d e n t ro d e la s m is m a s .

De fin ie n d o a lia s d is t in t o s p a ra lo s t ip o s e n co n flict o s s e re s u e lve n lo s p ro b le m a s d e a m b ig ü e d a d e s .


Po r e je m p lo , e l p ro b le m a d e l e je m p lo a n t e rio r s e p o d ría re s o lve r a s í:

using A;
using B;
using ClaseA = A.Clase;

class EjemploConflicto: ClaseA {} // Heredamos de A.Clase

http://www.programacion.com/tutorial.csharp.7.html (5 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

Lo s a lia s n o t ie n e n p o rq u é s e r s ó lo re fe re n t e s a t ip o s , s in o q u e t a m b ié n e s p o s ib le e s crib ir a lia s d e


e s p a cio s d e n o m b re s co m o m u e s t ra e l s ig u ie n t e e je m p lo :

namespace N1.N2
{
class A {}
}
namespace N3
{
using R1 = N1;
using R2 = N1.N2;
class B
{
N1.N2.A a; // Campo de nombre completamente calificado N1.N2.A
R1.N2.A b; // Campo de nombre completamente calificado N1.N2.A
R2.A c; // Campo de nombre completamente calificado N1.N2.A
}
}

Al d e fin ir a lia s h a y q u e t e n e r cu id a d o co n n o d e fin ir e n u n m is m o e s p a cio d e n o m b re s va rio s co n


ig u a l n o m b re o cu yo s n o m b re s co in cid a n co n lo s d e m ie m b ro s d e d ich o e s p a cio d e n o m b re s .
Ta m b ié n h a y q u e t e n e r e n cu e n t a q u e n o s e p u e d e n d e fin ir u n o s a lia s e n fu n ció n d e o t ro , p o r lo q u e
có d ig o s co m o e l s ig u ie n t e s o n in co rre ct o s :

namespace N1.N2 {}
namespace N3
{
using R1 = N1;
using R2 = N1.N2;
using R3 = R1.N2; // ERROR: No se puede definir R3 en función de R1
}

Es p a c io d e n o m b re s d is t rib u id o s

S i h a ce m o s va ria s d e fin icio n e s d e u n e s p a cio d e n o m b re s e n u n m is m o fich e ro o e n d ife re n t e s y s e


co m p ila n t o d a s ju n t a s , e l co m p ila d o r la s fu s io n a rá e n u n a s o la d e fin ició n cu yo s m ie m b ro s s e rá n la
co n ca t e n a ció n d e lo s m ie m b ro s d e fin id o s e n ca d a u n a d e la s d e fin icio n e s re a liza d a s . Po r e je m p lo :

namespace A // (1)
{
class B1 {}
}

namespace A // (2)
{
class B2 {}
}

Ha ce r u n a d e fin ició n co m o la a n t e rio r e s t ra t a d a p o r e l co m p ila d o r e xa ct a m e n t e ig u a l q u e s i s e


h u b ie s e h e ch o :

http://www.programacion.com/tutorial.csharp.7.html (6 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

namespace A

{
class B1 {}
class B2 {}
}

Lo m is m o o cu rriría s i la s d e fin icio n e s m a rca d a s co m o ( 1 ) y ( 2 ) s e h u b ie s e n h e ch o e n fich e ro s


s e p a ra d o s q u e s e co m p ila s e n co n ju n t a m e n t e .

Ha y q u e t e n e r e n cu e n t a q u e la s s e n t e n cia s u s in g , ya s e a n d e im p o rt a ció n d e e s p a cio s d e n o m b re s


o d e d e fin ició n d e a lia s , n o s o n co n s id e ra d a s m ie m b ro s d e lo s e s p a cio s d e n o m b re s y p o r t a n t o n o
p a rt icip a n e n s u s fu s io n e s . As í, e l s ig u ie n t e có d ig o e s in vá lid o :

namespace A
{
class ClaseA {}
}

namespace B
{
using A;
}

namespace B
{
// using A;
class Principal: ClaseA {}
}

Es t e có d ig o n o e s vá lid o d e b id o a q u e a u n q u e s e im p o rt a e l e s p a cio d e n o m b re s A a l p rin cip io d e


u n a d e fin ició n d e l e s p a cio d e n o m b re s d o n d e s e h a d e fin id o Principal, n o s e im p o rt a e n la
d e fin ició n e n d o n d e s e d e riva Principal d e A.ClaseA. Pa ra q u e t o d o fu n cio n a s e a la p e rfe cció n
h a b ría q u e d e s co m e n t a r la lín e a co m e n t a d a e n e l e je m p lo .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.7.html (7 de 7) [20/10/2002 18:21:11]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n
C#

En e s t a p á g in a :

● Te m a 7 : Va ria b le s y t ip o s d e d a t o s
❍ De fin ició n d e va ria b le s
❍ Tip o s d e d a t o s b á s ico s
❍ Ta b la s
❍ Ca d e n a s d e t e xt o
❍ Co n s t a n t e s
❍ Va ria b le s d e s ó lo le ct u ra
❍ Ord e n d e in icia liza ció n d e va ria b le s

Te m a 7 : Va ria b le s y t ip o s d e d a t o s

( C) 2 0 0 1 Jo s é An t o n io Go n zá le z S e co

D e fin ic ió n d e v a ria b le s

Un a v a ria b le p u e d e ve rs e s im p le m e n t e co m o u n a lm a cé n d e o b je t o s d e u n d e t e rm in a d o t ip o a l q u e s e le d a
u n cie rt o n o m b re . Po r t a n t o , p a ra d e fin ir u n a va ria b le s ó lo h a y q u e d e cir cu á l s e rá e l n o m b re q u e s e le d a rá y
cu á l s e rá e l t ip o d e d a t o s q u e p o d rá a lm a ce n a r, lo q u e s e h a ce co n la la s ig u ie n t e s in t a xis :

<tipoVariable> <nombreVariable>;

Un a va ria b le p u e d e s e r d e fin id a d e n t ro d e u n a d e fin ició n d e cla s e , e n cu yo ca s o s e co rre s p o n d e ría co n e l t ip o


d e m ie m b ro q u e h a s t a a h o ra h e m o s d e n o m in a d o c a m p o . Ta m b ié n p u e d e d e fin irs e co m o u n v a ria b le lo c a l a
u n m é t o d o , q u e e s u n a va ria b le d e fin id a d e n t ro d e l có d ig o d e l m é t o d o a la q u e s ó lo p u e d e a cce d e rs e d e s d e
d e n t ro d e d ich o có d ig o . Ot ra p o s ib ilid a d e s d e fin irla co m o p a rá m e t ro d e u n m é t o d o , q u e s o n va ria b le s q u e
a lm a ce n a n lo s va lo re s d e lla m a d a a l m é t o d o y q u e , a l ig u a l q u e la s va ria b le s lo ca le s , s ó lo p u e d e s e r a cce d id a s
d e s d e có d ig o u b ica d o d e n t ro d e l m é t o d o . El s ig u ie n t e e je m p lo m u e s t ra co m o d e fin ir va ria b le s d e t o d o s e s t o s
ca s o s :

class A
{
int x, z;
int y;

http://www.programacion.com/tutorial.csharp.8.html (1 de 17) [20/10/2002 18:21:24]


Programación en castellano. El lenguaje de programación C#

void F(string a, string b)


{
Persona p;
}
}

En e s t e e je m p lo la s va ria b le s x, z e y s o n ca m p o s d e t ip o int, m ie n t ra s q u e p e s u n a va ria b le lo ca l d e t ip o


Persona y a y b s o n p a rá m e t ro s d e t ip o string. Co m o s e m u e s t ra e n e l e je m p lo , s i u n m é t o d o t o m a va rio s
p a rá m e t ro s la s d e fin icio n e s d e é s t o s s e s e p a ra n m e d ia n t e co m a s ( ca rá ct e r ,) , y s i q u e re m o s d e fin ir va rio s
ca m p o s o va ria b le s lo ca le s ( n o vá lid o p a ra p a rá m e t ro s ) d e u n m is m o t ip o p o d e m o s in clu irlo s e n u n a m is m a
d e fin ició n in clu ye n d o e n <nombreVariable> s u s n o m b re s s e p a ra d o s p o r co m a s .

Co n la s in t a xis d e d e fin ició n d e va ria b le s a n t e rio rm e n t e d a d a s im p le m e n t e d e fin im o s va ria b le s p e ro n o


a lm a ce n a m o s n in g ú n o b je t o in icia l e n e lla s . El co m p ila d o r d a rá u n va lo r p o r d e fe ct o a lo s ca m p o s p a ra lo s q u e
n o s e in d iq u e e xp lícit a m e n t e n in g ú n va lo r s e g ú n s e e xp lica e n e l s ig u ie n t e a p a rt a d o . S in e m b a rg o , a la
va ria b le s lo ca le s n o le s d a n in g ú n va lo r in icia l, p e ro d e t e ct a cu a lq u ie r in t e n t o d e le e rla s a n t e s d e d a rle s va lo r y
p ro d u ce e ro re s d e co m p ila ció n e n e s o s ca s o s .

Ya h e m o s vis t o q u e p a ra cre a r o b je t o s s e u t iliza e l o p e ra d o r new. Po r t a n t o , u n a fo rm a d e a s ig n a r u n va lo r a la


va ria b le p d e l e je m p lo a n t e rio r s e ría a s í:

Persona p;
p = new Persona("José", 22, "76543876-A");

S in e m b a rg o , C# t a m b ié n p ro p o rcio n a u n a s in t a xis m á s s e n cilla co n la q u e p o d re m o s a s ig n a r u n o b je t o a u n a


va ria b le e n e l m is m o m o m e n t o s e d e fin e . Pa ra e llo s e la h a d e d e fin ir u s a n d o e s t a o t ra n o t a ció n :

<tipoVariable> <nombreVariable> = <valorInicial>;

As i p o r e je m p lo , la a n t e rio r a s ig n a ció n d e va lo r a la va ria b le p p o d ría re e s crib irs e d e e s t a o t ra fo rm a m á s


co m p a ct a :

Persona p = new Persona("José", 22, "76543876-A");

La e s p e cifica ció n d e u n va lo r in icia l t a m b ié n co m b in a rs e co n la d e fin ició n d e m ú lt ip le s va ria b le s s e p a ra d a s p o r


co m a s e n u n a m is m a lín e a . Po r e je m p lo , la s s ig u ie n t e s d e fin icio n e s s o n vá lid a s :

Persona p1 = new Persona("José", 22, "76543876-A"),


p2 = new Persona("Juan", 21,"87654212-S");

Y s o n t ra t a d a s p o r e l co m p ila d o r d e fo rm a co m p le t a m e n t e e q u iva le n t e s a h a b e rla s d e cla ra d o co m o :

Persona p1 = new Persona("José", 22, "76543876-A");


Persona p2 = new Persona("Juan", 21, "87654212-S");

Tip o s d e d a t o s b á s ic o s

Lo s t ip o s d e d a t o s b á s ic o s s o n cie rt o s t ip o s d e d a t o s t a n co m ú n m e n t e u t iliza d o s e n la e s crit u ra d e


a p lica cio n e s q u e e n C# s e h a in clu id o u n a s in t a xis e s p e cia l p a ra t ra t a rlo s . Po r e je m p lo , p a ra re p re s e n t a r
n ú m e ro s e n t e ro s d e 3 2 b it s co n s ig n o s e u t iliza e l t ip o d e d a t o System.Int32 d e fin id o e n la BCL, a u n q u e a la
h o ra d e cre a r u n o b je t o a d e e s t e t ip o q u e re p re s e n t e e l va lo r 2 s e u s a la s ig u ie n t e s in t a xis :

System.Int32 a = 2;

http://www.programacion.com/tutorial.csharp.8.html (2 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

Co m o s e ve , n o s e u t iliza e l o p e ra d o r new p a ra cre a r u n o b je t o System.Int32, s in o q u e d ire ct a m e n t e s e


in d ica e l lit e ra l q u e re p re s e n t a e l va lo r a cre a r, co n lo q u e la s in t a xis n e ce s a ria p a ra cre a r e n t e ro d e e s t e t ip o
s e re d u ce co n s id e ra b le m e n t e . Es m á s , d a d o lo fre cu e n t e q u e e s e l u s o d e e s t e t ip o t a m b ié n s e h a p re d e fin id o
e n C# e l a lia s int p a ra e l m is m o , p o r lo q u e la d e fin ició n d e va ria b le a n t e rio r q u e d a a s í d e co m p a ct a :

int a = 2;

System.Int32 n o e s e l ú n ico t ip o d e d a t o b á s ico in clu id o e n C# . En e l e s p a cio d e n o m b re s System s e h a n


in clu id o t o d o s e s t o s :

Tip o D e s c rip c ió n Bit s Ra n g o d e v a lo re s Alia s


S Byt e By t e s co n s ig n o 8 -128 - 127 s b yt e
Byt e By t e s s in s ig n o 8 0 - 255 b yt e
In t 1 6 En t e ro s co rt o s co n s ig n o 1 6 [-32.768, 32.767] s h o rt
UIn t 1 6 En t e ro s co rt o s s in s ig n o 16 [0, 65.535] u s h o rt
In t 3 2 En t e ro s n o rm a le s 32 [-2.147.483.648, 2.147.483.647] in t
En t e ro s n o rm a le s s in
UIn t 3 2 32 [0, 4.294.967.295] u in t
s ig n o
[-9.223.372.036.854.775.808,
In t 6 4 En t e ro s la rg o s 64 lo n g
9.223.372.036.854.775.807]
UIn t 6 4 En t e ro s la rg o s s in s ig n o 64 [0-18.446.744.073.709.551.615] u lo n g
Re a le s co n 7 d íg it o s d e
S in g le 32 [1 ,5 × 1 0 -45 - 3 ,4 × 1 0 38] flo a t
p re cis ió n
Re a le s d e 1 5 - 1 6 d íg it o s
Do u b le 64 [5 ,0 × 1 0 -324 - 1 ,7 × 1 0 308] d o u b le
d e p re cis ió n
Re a le s d e 2 8 - 2 9 d íg it o s
De cim a l 128 [1 ,0 × 1 0 -28 - 7 ,9 × 1 0 28] d e cim a l
d e p re cis ió n
Bo o le a n Va lo re s ló g ico s 32 t ru e , fa ls e bool
Ch a r Ca ra ct e re s Un ico d e 16 [ '\ u 0 0 0 0 ', '\ u FFFF'] ch a r
S t rin g Ca d e n a s d e ca ra ct e re s Va ria b le El p e rm it id o p o r la m e m o ria s t rin g
Ob je ct Cu a lq u ie r o b je t o Va ria b le Cu a lq u ie r o b je t o o b je ct

Ta b la 5 : Tip o s d e d a t o s b á s ico s

Pe s e a s u s in t a xis e s p e cia l, e n C# lo s t ip o s b á s ico s s o n t ip o s d e l m is m o n ive l q u e cu a lq u ie r o t ro t ip o d e l


le n g u a je . Es d e cir, h e re d a n d e System.Object y p u e d e n s e r t ra t a d o s co m o o b je t o s d e d ich a cla s e p o r
cu a lq u ie r m é t o d o q u e e s p e re u n System.Object, lo q u e e s m u y ú t il p a ra e l d is e ñ o d e ru t in a s g e n é rica s q u e
a d m it a n p a rá m e t ro s d e cu a lq u ie r t ip o y e s u n a ve n t a ja im p o rt a n t e d e C# fre n t e a le n g u a je s s im ila re s co m o
Ja va d o n d e lo s t ip o s b á s ico s n o s o n co n s id e ra d o s o b je t o s .

El va lo r q u e p o r d e fe ct o s e d a a lo s ca m p o s d e t ip o s b á s ico s co n s is t e e n p o n e r a ce ro t o d o e l á re a d e m e m o ria
q u e o cu p e n . Es t o s e t ra d u ce e n q u e lo s ca m p o s d e t ip o s b á s ico s n u m é rico s s e in icia liza n p o r d e fe ct o co n e l
va lo r 0 , lo s d e t ip o bool lo h a ce n co n false, lo s d e t ip o char co n '\ u 0 0 0 0 ', y lo s d e t ip o string y object
co n null.

Ah o ra q u e s a b e m o s cu á le s s o n lo s t ip o s b á s ico s , e s e l m o m e n t o d e co m e n t a r cu á le s s o n lo s s u fijo s q u e
a d m it e n lo s lit e ra le s n u m é rico s p a ra in d ica r a l co m p ila d o r cu á l e s e l t ip o q u e s e h a d e co n s id e ra r q u e t ie n e .
Po r e je m p lo , s i t e n e m o s e n u n a cla s e lo s m é t o d o s :

public static void F(int x)

http://www.programacion.com/tutorial.csharp.8.html (3 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

public static void F(long x)

An t e u n a lla m a d a co m o F(100), ¿ a cu á l d e lo s m é t o d o s s e lla m a ra ? Pu e s b ie n , e n p rin cip io s e co n s id e ra q u e


e l t ip o d e u n lit e ra l e n t e ro e s e l co rre s p o n d ie n t e a l p rim e ro d e e s t o s t ip o s b á s ico s q u e p e rm it a n a lm a ce n a rlo :
int, uint, long, ulong, p o r lo q u e e n e l ca s o a n t e rio r s e lla m a ría a l p rim e r F() Pa ra lla m a r a l o t ro p o d ría
a ñ a d irs e e l s u fijo L a l lit e ra l y h a ce r la lla m a d a co n F(100L) En la Ta b la 6 s e re s u m e n lo s p o s ib le s s u fijo s
vá lid o s :

S u fijo Tip o d e l lit e ra l e n t e ro


n in g u n o Prim e ro d e : in t , u in t , lo n g , u lo n g
Ló l Prim e ro d e : lo n g , u lo n g
U ó u Prim e ro d e : in t , u in t
UL, Ul, u L, u l, LU, Lu , lU ó lu u lo n g

Ta b la 6 : S u fijo s d e lit e ra le s e n t e ro s

Po r s u p a rt e , e n la Ta b la 7 s e in d ica n lo s s u fijo s q u e a d m it e n lo s lit e ra le s re a le s s o n :

S u fijo Tip o d e l lit e ra l re a l


Fó f flo a t
n in g u n o , D ó d d o u b le
Mó m d e c im a l

Ta b la 7 : S u fijo s d e lit e ra le s re a le s

Ta b la s

Ta b la s u n id im e n s io n a le s

Un a t a b la u n id im e n s io n a l e s u n t ip o e s p e cia l d e va ria b le q u e e s ca p a z d e a lm a ce n a r e n s u in t e rio r y d e


m a n e ra o rd e n a d a u n o o va rio s d a t o s d e u n d e t e rm in a d o t ip o . Pa ra d e cla ra r va ria b le s d e e s t e t ip o e s p e cia l s e
u s a la s ig u ie n t e s in t a xis :

<tipoDatos>[] <nombreTabla>;

Po r e je m p lo , u n a t a b la q u e p u e d a a lm a ce n a r o b je t o s d e t ip o int s e d e cla ra a s í:

int[] tabla;

Co n e s t o la t a b la cre a d a n o a lm a ce n a ría n in g ú n o b je t o , s in o q u e va ld ría null. S i s e d e s e a q u e


ve rd a d e ra m e n t e a lm a ce n e o b je t o s h a y q u e in d ica r cu á l e s e l n ú m e ro d e o b je t o s q u e p o d rá a lm a ce n a r, lo q u e
p u e d e h a ce rs e u s a n d o la s ig u ie n t e s in t a xis a l d e cla ra rla :

<tipoDatos>[] <nombreTabla> = new <tipoDatos>[<númeroDatos>];

Po r e je m p lo , u n a t a b la q u e p u e d a a lm a ce n a r 1 0 0 o b je t o s d e t ip o int s e d e cla ra a s í:

int[] tabla = new int[100];

Au n q u e t a m b ié n s e ría p o s ib le d e fin ir e l t a m a ñ o d e la t a b la d e fo rm a s e p a ra d a a s u d e cla ra ció n d e e s t e m o d o :

http://www.programacion.com/tutorial.csharp.8.html (4 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

int[] tabla;
tabla = new int[100];

Co n e s t a ú lt im a s in t a xis e s p o s ib le ca m b ia r d in á m ica m e n t e e l n ú m e ro d e e le m e n t o s d e u n a va ria b le t a b la s in


m á s q u e irle a s ig n a n d o n u e va s t a b la s . Ello n o s ig n ifica q u e u n a t a b la s e p u e d a re d im e n s io n a r co n s e rva n d o lo s
e le m e n t o s q u e t u vie s e a n t e s d e l ca m b io d e t a m a ñ o , s in o q u e o cu rre t o d o lo co n t ra rio : cu a n d o a u n a va ria b le
t a b la s e le a s ig n a u n a t a b la d e o t ro t a m a ñ o , s u s e le m e n t o s a n t ig u o s s o n s o b re e s crit o s p o r lo s n u e vo s .

S i s e cre a u n a t a b la co n la s in t a xis h a s t a a h o ra e xp lica d a t o d o s s u s e le m e n t o s t e n d ría n e l va lo r p o r d e fe ct o d e


s u t ip o d e d a t o . S i q u e re m o s d a rle s o t ro s va lo re s a l d e cla ra r la t a b la , h e m o s d e in d ica rlo s e n t re lla ve s u s a n d o
e s t a s in t a xis :

<tipoDatos>[] <nombreTabla> = new <tipoDatos>[] ;

Ha d e e s p e cifica rs e t a n t o s <valores> co m o n ú m e ro d e e le m e n t o s s e d e s e e q u e t e n g a la t a b la , y s i s o n m á s
d e u n o s e h a n d e s e p a ra r e n t re s í m e d ia n t e co m a s ( ,) Nó t e s e q u e a h o ra n o e s n e ce s a rio in d ica r e l n ú m e ro d e
e le m e n t o s d e la t a b la ( a u n q u e p u e d e h a ce rs e ) s i s e d e s e a ) , p u e s e l co m p ila d o r p u e d e d e d u cirlo d e l n ú m e ro d e
va lo re s e s p e cifica d o s . Po r e je m p lo , p a ra d e cla ra r u n a t a b la d e cu a t ro e le m e n t o s d e t ip o int co n va lo re s
5 , 1 , 4 , 0 s e p o d ría h a ce r lo s ig u ie n t e :

int[] tabla = new int[] ;

In clu s o s e p u e d e co m p a ct a r a ú n m á s la s in t a xis d e cla ra n d o la t a b la a s í:

int[] tabla = ;

Ta m b ié n p o d e m o s cre a r t a b la s cu yo t a m a ñ o s e p u e d a e s t a b le ce r d in á m ica m e n t e a p a rt ir d e l va lo r d e cu a lq u ie r
e xp re s ió n q u e p ro d u zca u n va lo r d e t ip o e n t e ro . Po r e je m p lo , p a ra cre a r u n a t a b la cu yo t a m a ñ o s e a e l va lo r
in d ica d o p o r u n a va ria b le d e t ip o int ( lu e g o s u va lo r s e rá d e t ip o e n t e ro ) s e h a ría :

int i = 5;
...
int[] tablaDinámica = new int[i];

A la h o ra d e a cce d e r a lo s e le m e n t o s a lm a ce n a d o s e n u n a t a b la b a s t a in d ica r e n t re co rch e t e s , y a co n t in u a ció n


d e la re fe re n cia a la m is m a , la p o s ició n q u e o cu p e e n la t a b la e l e le m e n t o a l q u e a cce d e r. Cu a n d o s e h a g a h a y
q u e t e n e r e n cu e n t a q u e e n C# la s t a b la s s e in d e xa n d e s d e 0 , lo q u e s ig n ifica q u e e l p rim e r e le m e n t o d e la
t a b la o cu p a rá s u p o s ició n 0 , e l s e g u n d o o cu p a rá la p o s ició n 1 , y a s í s u ce s iva m e n t e p a ra e l re s t o d e e le m e n t o s .
Po r e je m p lo , a u n q u e e s m á s in e ficie n t e , la t a b la d e cla ra d a e n e l ú lt im o fra g m e n t o d e có d ig o d e e je m p lo
t a m b ié n p o d ría h a b e rs e d e fin id o a s í:

int[] tabla = new int[4];

tabla[0] = 5;
tabla[1]++; // Por defecto se inicializó a 0, luego
// ahora el valor de tabla[1] pasa a ser 1
tabla[2] = tabla[0] - tabla[1]; // tabla[2] pasa a
// valer 4, pues 5-4 = 1
// El contenido de la tabla será , pues
// tabla[3] se inicializó por defecto a 0.

Ha y q u e t e n e r cu id a d o a la h o ra d e a cce d e r a lo s e le m e n t o s d e u n a t a b la ya q u e s i s e e s p e cifica u n a p o s ició n


s u p e rio r a l n ú m e ro d e e le m e n t o s q u e p u e d a a lm a ce n a r la t a b la s e p ro d u cirá u n a e xce p ció n d e t ip o
System.OutOfBoundsException. En e l Te m a 1 6 : In s t ru ccio n e s s e e xp lica q u é s o n la s e xce p cio n e s , p e ro
p o r a h o ra b a s t a co n s id e ra r q u e s o n o b je t o s q u e in fo rm a n d e s it u a cio n e s e xce p cio n a le s ( g e n e ra lm e n t e e rro re s )
p ro d u cid a s d u ra n t e la e je cu ció n d e u n a a p lica ció n . Pa ra e vit a r e s t e t ip o d e e xce p cio n e s p u e d e co n s u lt a r e l

http://www.programacion.com/tutorial.csharp.8.html (5 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

va lo r d e l ca m p o d e s ó lo le ct u ra Length q u e e s t á a s o cia d o a t o d a t a b la y co n t ie n e e l n ú m e ro d e e le m e n t o s d e
la m is m a . Po r e je m p lo , p a ra a s ig n a r u n 7 a l ú lt im o e le m e n t o d e la t a b la a n t e rio r s e h a ría :

tabla[tabla.Length - 1] = 7; // Se resta 1 porque tabla.Length


// devuelve 4 pero el último elemento
// de la tabla es tabla[3]

Ta b la s d e n t a d a s

Un a t a b la d e n t a d a n o e s m á s q u e u n a t a b la cu yo s e le m e n t o s s o n a s u ve z t a b la s , p u d ié n d o s e a s í a n id a r
cu a lq u ie r n ú m e ro d e t a b la s . Pa ra d e cla ra r t a b la s d e e s t e t ip o s e u s a u n a s in t a xis m u y s im ila r a la e xp lica d a
p a ra la s t a b la s u n id im e n s io n a le s s o lo q u e a h o ra s e in d ica n t a n t o s co rch e t e s co m o n ive l d e a n id a ció n s e d e s e e .
Po r e je m p lo , p a ra cre a r u n a t a b la d e t a b la s d e e le m e n t o s d e t ip o int fo rm a d a p o r d o s e le m e n t o s , u n o d e lo s
cu a le s fu e s e u n a t a b la d e e le m e n t o s d e t ip o int fo rm a d a p o r lo s e le m e n t o s d e va lo re s 1 , 2 y e l o t ro fu e s e u n a
t a b la d e e le m e n t o s d e t ip o int y va lo re s 3 , 4 , 5 , s e p u e d e h a ce r:

int[][] tablaDentada = new int[2][] {new int[] , new int[] };

Co m o s e in d ica e xp lícit a m e n t e cu á le s s o n lo s e le m e n t o s d e la t a b la d e cla ra d a n o h a ce fa lt a in d ica r e l t a m a ñ o


d e la t a b la , p o r lo q u e la d e cla ra ció n a n t e rio r e s e q u iva le n t e a :

int[][] tablaDentada = new int[][] {new int[] , new int[] };

Es m á s , ig u a l q u e co m o s e vió co n la s t a b la s u n id im e n s io n a le s t a m b ié n e s vá lid o h a ce r:

int[][] tablaDentada = {new int[] , new int[] };

S i n o q u is ié s e m o s in d ica r cu á le s s o n lo s e le m e n t o s d e la s t a b la s co m p o n e n t e s , e n t o n ce s t e n d ría m o s q u e
in d ica r a l m e n o s cu á l e s e l n ú m e ro d e e le m e n t o s q u e p o d rá n a lm a ce n a r ( s e in icia liza rá n co n va lo re s p o r
d e fe ct o ) q u e d a n d o :

int[][] tablaDentada = {new int[2], new int[3]};

S i n o q u e re m o s cre a r la s t a b la s co m p o n e n t e s e n e l m o m e n t o d e cre a r la t a b la d e n t a d a , e n t o n ce s t e n d re m o s
q u e in d ica r p o r lo m e n o s cu á l e s e l n ú m e ro d e t a b la s co m p o n e n t e s p o s ib le s ( ca d a u n a va ld ría null) , co n lo
q u e q u e d a ría :

int[][] tablaDentada = new int[2][];

Es im p o rt a n t e s e ñ a la r q u e n o e s p o s ib le e s p e cifica r t o d a s la s d im e n s io n e s d e u n a t a b la d e n t a d a e n s u
d e fin ició n s i n o s e in d ica e xp lícit a m e n t e e l va lo r in icia l d e é s t a s e n t re lla ve s . Es d e cir, e s t a d e cla ra ció n e s
in co rre ct a :

int[][] tablaDentada = new int[2][5];

Es t o s e d e b e a q u e e l t a m a ñ o d e ca d a t a b la co m p o n e n t e p u e d e s e r d is t in t o y co n la s in t a xis a n t e rio r n o s e
p u e d e d e cir cu á l e s e l t a m a ñ o d e ca d a u n a . Un a o p ció n h u b ie s e s id o co n s id e ra r q u e e s 5 p a ra t o d a s co m o s e
h a ce e n Ja va , p e ro e llo n o s e h a im p le m e n t a d o e n C# y h a b ría q u e d e cla ra r la t a b la d e , p o r e je m p lo , e s t a
m a n e ra :

int[][] tablaDentada = {new int[5], new int[5]);

Fin a lm e n t e , s i s ó lo q u e re m o s d e cla ra r u n a va ria b le t a b la d e n t a d a p e ro n o q u e re m o s in d ica r s u n ú m e ro d e


e le m e n t o s , ( lu e g o la va ria b le va ld ría null) , e n t o n ce s b a s t a p o n e r:

http://www.programacion.com/tutorial.csharp.8.html (6 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

int[][] tablaDentada;

Ha y q u e p re cis a r q u e a u n q u e e n lo s e je m p lo s h a s t a a h o ra p re s e n t e s s e h a n e s crit o e je m p lo s b a s a d o s e n
t a b la s d e n t a d a s d e s ó lo d o s n ive le s d e a n id a ció n , t a m b ié n e s p o s ib le cre a r t a b la s d e n t a d a s d e cu a lq u ie r
n ú m e ro d e n ive le s d e a n id a ció n . Po r e je m p lo , p a ra u n a t a b la d e t a b la s d e t a b la s d e e n t e ro s d e 2 e le m e n t o s e n
la q u e e l p rim e ro fu e s e u n a t a b la d e n t a d a fo rm a d a p o r d o s t a b la s d e 5 e n t e ro s y e l s e g u n d o e le m e n t o fu e s e
u n a t a b la d e n t a d a fo rm a d a p o r u n a t a b la d e 4 e n t e ro s y o t ra d e 3 s e p o d ría d e fin ir a s í:

int[][][] tablaDentada = new int[][][]


{ new int[][] {new int[5], new int[5]},
new int[][] {new int[4], new int[3]}};

A la h o ra d e a cce d e r a lo s e le m e n t o s d e u n a t a b la d e n t a d a lo ú n ico q u e h a y q u e h a ce r e s in d ica r e n t re


co rch e t e s cu á l e s e l e le m e n t o e xa ct o d e la s t a b la s co m p o n e n t e s a l q u e s e d e s e a a cce d e r, in d icá n d o s e u n
e le m e n t o d e ca d a n ive l d e a n id a ció n e n t re u n o s co rch e t e s d ife re n t e s p e ro co lo cá n d o s e t o d a s la s p a re ja s d e
co rch e t e s ju n t a s y o rd e n a d a s d e la t a b la m á s e xt e rn a a la m á s in t e rn a . Po r e je m p lo , p a ra a s ig n a r e l va lo r 1 0
a l e le m e n t o cu a rt o d e la t a b la q u e e s e le m e n t o p rim e ro d e la t a b la q u e e s e le m e n t o s e g u n d o d e la t a b la
d e n t a d a d e cla ra d a e n ú lt im o lu g a r s e h a ría :

tablaDentada[1][0][3] = 10;

Ta b la s m u lt id im e n s io n a le s

Un a t a b la m u lt id im e n s io n a l e s u n a t a b la cu yo s e le m e n t o s s e e n cu e n t ra n o rg a n iza n d o u n a e s t ru ct u ra d e
va ria s d im e n s io n e s . Pa ra d e fin ir e s t e t ip o d e t a b la s s e u s a u n a s in t a xis s im ila r a la u s a d a p a ra d e cla ra r t a b la s
u n id im e n s io n a le s p e ro s e p a ra n d o la s d ife re n t e s d im e n s io n e s m e d ia n t e co m a s ( ,) Po r e je m p lo , u n a t a b la
m u lt id im e n s io n a l d e e le m e n t o s d e t ip o int q u e co n s t e d e 1 2 e le m e n t o s p u e d e t e n e r s u s e le m e n t o s
d is t rib u id o s e n d o s d im e n s io n e s fo rm a n d o u n a e s t ru ct u ra 3 x4 s im ila r a u n a m a t riz d e la fo rm a :

1 2 3 4
5 6 7 8
9 10 11 12

Es t a t a b la s e p o d ría d e cla ra r a s í:

int[,] tablaMultidimensional = new int[3,4] {, , };

En re a lid a d n o e s n e ce s a rio in d ica r e l n ú m e ro d e e le m e n t o s d e ca d a d im e n s ió n d e la t a b la ya q u e p u e d e n


d e d u cirs e d e lo s va lo re s e xp lícit a m e n t e in d ica d o s e n t re lla ve s , p o r lo q u e la d e fin ició n a n t e rio r e s s im ila r a
e sta :

int[,] tablaMultidimensional = new int[,] {, , };

In clu s o p u e d e re d u cirs e a ú n m á s la s in t a xis n e ce s a ria q u e d a n d o t a n s ó lo :

int[,] tablaMultidimensional = {, , };

S i n o q u e re m o s in d ica r e xp lícit a m e n t e lo s e le m e n t o s d e la t a b la a l d e cla ra rla , p o d e m o s o b via rlo s p e ro a ú n a s í


in d ica r e l t a m a ñ o d e ca d a d im e n s ió n d e la t a b la ( a lo s e le m e n t o s s e le s d a ría e l va lo r p o r d e fe ct o d e s u t ip o d e
d a t o ) a s í:

int[,] tablaMultidimensional = new int[3,4];

Ta m b ié n p o d e m o s n o e s p e cifica r n i s iq u ie ra e l n ú m e ro d e e le m e n t o s d e la t a b la d e e s t a fo rm a
( tablaMultidimensional co n t e n d ría a h o ra null) :

http://www.programacion.com/tutorial.csharp.8.html (7 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

int[,] tablaMultidimensional;

Au n q u e lo s e je m p lo s d e t a b la s m u lt id im e n s io n a le s h a s t a a h o ra m o s t ra d o s s o n d e t a b la s d e d o s d im e n s io n e s ,
e n g e n e ra l t a m b ié n e s p o s ib le cre a r t a b la s d e cu a lq u ie r n ú m e ro d e d im e n s io n e s . Po r e je m p lo , u n a t a b la q u e
a lm a ce n e 2 4 e le m e n t o s d e t ip o int y va lo r 0 e n u n a e s t ru ct u ra t rid im e n s io n a l 3 x4 x2 s e d e cla ra ría a s í:

int[,,] tablaMultidimensional = new int[3,4,2];

El a cce s o a lo s e le m e n t o s d e u n a t a b la m u lt id im e n s io n a l e s m u y s e n cillo : s ó lo h a y q u e in d ica r lo s ín d ice s d e la


p o s ició n q u e o cu p e e n la e s t ru ct u ra m u lt id im e n s io n a l e l e le m e n t o a l q u e s e d e s e e a cce d e r. Po r e je m p lo , p a ra
in cre m e n t a r e n u n a u n id a d e l e le m e n t o q u e o cu p e la p o s ició n ( 1 , 3 , 2 ) d e la t a b la a n t e rio r s e h a ría ( s e in d iza
desde 0):

tablaMultidimensional[0,2,1]++;

Nó t e s e q u e t a n t o la s t a b la s d e n t a d a s co m o la s t a b la s m u lt id im e n s io n a le s p u e d e n s e r u t iliza d a s t a n t o p a ra
re p re s e n t a r e s t ru ct u ra s m a t ricia le s co m o p a ra , e n g e n e ra l, re p re s e n t a r cu a lq u ie r e s t ru ct u ra d e va ria s
d im e n s io n e s . La d ife re n cia e n t re a m b a s s o n :

● Co m o la s t a b la s d e n t a d a s s o n t a b la s d e t a b la s , ca d a u n o d e s u s e le m e n t o s p u e d e s e r u n a
t a b la d e u n t a m a ñ o d ife re n t e . As í, co n la s t a b la s d e n t a d a s p o d e m o s re p re s e n t a r m a t rice s e n
la s q u e ca d a co lu m n a t e n g a u n t a m a ñ o d is t in t o ( p o r e l a s p e ct o "a s e rra d o " d e e s t e t ip o d e
m a t rice s e s p o r lo q u e s e le s lla m a t a b la s d e n t a d a s ) , m ie n t ra s q u e u s a n d o t a b la s
m u lt id im e n s io n a le s s ó lo e s p o s ib le cre a r m a t rice s re ct a n g u la re s o cu a d ra d a s . La s
e s t ru ct u ra s a s e rra d a s p u e d e n s im u la rs e u s a n d o m a t rice s m u lt id im e n s io n a le s co n t o d a s s u s
co lu m n a s d e l t a m a ñ o d e la co lu m n a m á s g ra n d e n e ce s a ria , a u n q u e e llo im p lica d e s p e rd icia r
m u ch a m e m o ria s o b re t o d o s i lo s t a m a ñ o s d e ca d a co lu m n a s o n m u y d ife re n t e s y la t a b la e s
g ra n d e De t o d o s m o d o s , la s e s t ru ct u ra s m á s co m u n e s q u e s e u s a n e n la m a yo ría d e
a p lica cio n e s s u e le n s e r re ct a n g u la re s o cu a d ra d a s .
● Lo s t ie m p o s q u e s e t a rd a n e n cre a r y d e s t ru ir t a b la s d e n t a d a s s o n s u p e rio re s a lo s q u e s e
t a rd a n e n cre a r y d e s t ru ir t a b la s m u lt id im e n s io n a le s . Es t o s e d e b e a q u e la s p rim e ra s s o n
t a b la s d e t a b la s m ie n t ra s q u e la s s e g u n d a s s o n u n a ú n ica t a b la , Po r e je m p lo , p a ra cre a r u n a
t a b la d e n t a d a [ 1 0 0 ] [ 1 0 0 ] h a y q u e cre a r 1 0 1 t a b la s ( la t a b la d e n t a d a m á s la s 1 0 0 t a b la s q u e
co n t ie n e ) , m ie n t ra s q u e p a ra cre a r u n a cre a r u n a t a b la b id im e n s io n a l [ 1 0 0 , 1 0 0 ] h a y q u e
cre a r u n a ú n ica t a b la .
● La s t a b la s d e n t a d a s n o fo rm a n p a rt e d e l CLS , p o r lo q u e n o t o d o s lo s le n g u a je s g e s t io n a d o s
lo s t ie n e n p o rq u é a d m it ir. Po r e je m p lo Vis u a l Ba s ic. NET n o la s a d m it e , p o r lo q u e a l u s a rla s
e n m ie m b ro s p ú b lico s e q u iva le a p e rd e r in t e ro p e ra b ilid a d co n e s t o s le n g u a je s .

Ta b la s m ix t a s

Un a t a b la m ix t a e s s im p le m e n t e u n a t a b la fo rm a d a p o r t a b la s m u lt id im e n s io n a le s y d e n t a d a s co m b in a d a s
e n t re s í d e cu a lq u ie r m a n e ra . Pa ra d e cla ra r u n a t a b la d e e s t e t ip o b a s t a co n t a n s o lo co m b in a r la s n o t a cio n e s
ya vis t a s p a ra la s m u lt id im e n s io n a le s y d e n t a d a s . Po r e je m p lo , p a ra d e cla ra r u n a t a b la d e t a b la s
m u lt id im e n s io n a le s cu yo s e le m e n t o s s e a n t a b la s u n id im e n s io n a le s d e e n t e ro s s e h a ría lo s ig u ie n t e :

int[][,][] tablaMixta;

Co v a ria n z a d e t a b la s

La c o v a ria n z a d e t a b la s e s e l re s u lt a d o d e lle va r e l p o lim o rfis m o a l m u n d o d e la s t a b la s . Es d e cir, e s la


ca p a cid a d d e t o d a t a b la d e p o d e r a lm a ce n a r e le m e n t o s d e cla s e s h ija s d e la cla s e d e e le m e n t o s q u e p u e d a
a lm a ce n a r. Po r e je m p lo , e n t a n t o q u e t o d a s cla s e s s o n h ija s d e System.Object, la s ig u ie n t e a s ig n a ció n e s
vá lid a :

string[] tablaCadenas = {"Manolo", "Paco", "Pepe"};

http://www.programacion.com/tutorial.csharp.8.html (8 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

object[] tablaObjetos = tablaCadenas;

Ha y q u e t e n e r e n cu e n t a q u e la co va ria n za d e t a b la s s ó lo s e a p lica a o b je t o s d e t ip o s re fe re n cia y n o a o b je t o s


d e t ip o s va lo r Po r e je m p lo , la s ig u ie n t e a s ig n a ció n n o s e ría vá lid a e n t a n t o q u e int e s u n t ip o p o r va lo r:

int[] tablaEnteros = {1, 2, 3};


object[] tablaObjetos = tablaEnteros;

La c la s e S y s t e m . Arra y

En re a lid a d , t o d a s la s t a b la s q u e d e fin a m o s , s e a cu a l s e a e l t ip o d e e le m e n t o s q u e co n t e n g a n , s o n o b je t o s q u e
d e riva n d e S y s t e m . Arra y . Es d e cir, va n a d is p o n e r d e t o d o s lo s m ie m b ro s q u e s e h a n d e fin id o p a ra e s t a
cla s e , e n t re lo s q u e s o n d e s t a ca b le s :

● Le n g t h : Ca m p o d e s ó lo le ct u ra q u e in fo rm a d e l n ú m e ro t o t a l d e e le m e n t o s q u e co n t ie n e la
t a b la . S i la t a b la t ie n e m á s d e u n a d im e n s ió n o n ive l d e a n id a ció n in d ica e l n ú m e ro d e
e le m e n t o s d e t o d a s s u s d im e n s io n e s y n ive le s . Po r e je m p lo :

int[] tabla = ;
int[][] tabla2 = {new int[] , new int[] };
int[,] tabla3 = {,};

Console.WriteLine(tabla.Length); //Imprime 4
Console.WriteLine(tabla2.Length); //Imprime 5
Console.WriteLine(tabla3.Length); //Imprime 6

● Ra n k : Ca m p o d e s ó lo le ct u ra q u e a lm a ce n a e l n ú m e ro d e d im e n s io n e s d e la t a b la .
Ob via m e n t e s i la t a b la n o e s m u lt id im e n s io n a l va ld rá 1 . Po r e je m p lo :

int[] tabla = ;
int[][] tabla2 = {new int[] , new int[] };
int[,] tabla3 = {,};

Console.WriteLine(tabla.Rank); //Imprime 1
Console.WriteLine(tabla2.Rank); //Imprime 1
Console.WriteLine(tabla3.Rank); //Imprime 2

● in t Ge t Le n g t h ( in t d im e n s ió n ) : Mé t o d o q u e d e vu e lve e l n ú m e ro d e e le m e n t o s d e la
d im e n s ió n e s p e cifica d a . La s d im e n s io n e s s e in d ica n e m p e za n d o a co n t a r d e s d e ce ro , p o r lo
q u e s i q u ie re o b t e n e rs e e l n ú m e ro d e e le m e n t o s d e la p rim e ra d im e n s ió n h a b rá q u e u s a r
Ge t Le n g t h ( 0 ) , s i s e q u ie re o b t e n e r lo s d e la s e g u n d a h a b rá q u e u s a r Ge t Le n g t h ( 1 ) , e t c. Po r
e je m p lo :

int[,] tabla = {, };

Console.WriteLine(tabla.GetLength(0)); // Imprime 2
Console.WriteLine(tabla.GetLength(1)); // Imprime 4

● v o id Co p y To ( Arra y d e s t in o , in t p o s ic ió n ) : Co p ia t o d o s lo s e le m e n t o s d e la t a b la s o b re la
q u e e s a p lica e n la q u e s e le p a s a co m o p rim e r p a rá m e t ro a p a rt ir d e la p o s ició n d e la
m is m a in d ica d a co m o s e g u n d o p a rá m e t ro . Po r e je m p lo :

int[] tabla1 = ;
int[] tabla2 = ;

http://www.programacion.com/tutorial.csharp.8.html (9 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

tabla1.CopyTo(tabla2,0); // A partir de ahora, ambas tablas contienen

Am b a s t a b la s h a n d e s e r u n id im e n s io n a le s . Po r o t ro la d o , y co m o e s o b vio , la t a b la d e d e s t in o h a d e s e r
d e u n t ip o q u e p u e d a a lm a ce n a r lo s o b je t o s d e la t a b la fu e n t e , e l ín d ice e s p e cifica d o h a d e s e r vá lid o
( m a yo r o ig u a l q u e ce ro y m e n o r q u e e l t a m a ñ o d e la t a b la d e d e s t in o ) y n o h a d e va le r null n in g u n a .
S i n o fu e s e a s í, s a lt a ría n e xce p cio n e s d e d ive rs o s t ip o s in fo rm a n d o d e l e rro r co m e t id o ( e n la
d o cu m e n t a ció n d e l S DK p u e d e ve r cu á le s s o n e n co n cre t o ) .

Ap a rt e d e lo s m ie m b ro s a q u í s e ñ a la d o s , d e System.Array cu e n t a co n m u ch o s m á s q u e p e rm it e n re a liza r
t a re a s t a n fre cu e n t e s co m o b ú s q u e d a s d e e le m e n t o s , o rd e n a cio n e s , e t c.

Ca d e n a s d e t e x t o

Un a c a d e n a d e t e x t o n o e s m á s q u e u n a s e cu e n cia d e ca ra ct e re s Un ico d e . En C# s e re p re s e n t a n m e d ia n t e
o b je t o s d e l t ip o t ip o d e d a t o lla m a d o string, q u e n o e s m á s q u e u n a lia s d e l t ip o System.String in clu id o
e n la BCL.

La s ca d e n a s d e t e xt o s u e le n cre a rs e a p a rt ir lit e ra le s d e ca d e n a o d e o t ra s ca d e n a s p re via m e n t e cre a d a s .


Eje m p lo s d e a m b o s ca s o s s e m u e s t ra n a co n t in u a ció n :

string cadena1 = "José Antonio";


string cadena2 = cadena;

En e l p rim e r ca s o s e h a cre a d o u n o b je t o string q u e re p re s e n t a a la ca d e n a fo rm a d a p o r la s e cu e n cia d e


ca ra ct e re s Jo s é An t o n io in d ica d a lit e ra lm e n t e ( n ó t e s e q u e la s co m illa s d o b le s e n t re la s q u e s e e n cie rra n lo s
lit e ra le s d e ca d e n a n o fo rm a n p a rt e d e l co n t e n id o d e la ca d e n a q u e re p re s e n t a n s in o q u e s ó lo s e u s a n co m o
d e lim it a d o re s d e la m is m a ) En e l s e g u n d o ca s o la va ria b le ca d e n a 2 cre a d a s e g e n e ra a p a rt ir d e la va ria b le
ca d e n a 1 ya e xis t e n t e , p o r lo q u e a m b a s va ria b le s a p u n t a rá n a l m is m o o b je t o e n m e m o ria .

Ha y q u e t e n e r e n cu e n t a q u e e l t ip o string e s u n t ip o re fe re n cia , p o r lo q u e e n p rin cip io la co m p a ra ció n


e n t re o b je t o s d e e s t e t ip o d e b e ría co m p a ra r s u s d ire ccio n e s d e m e m o ria co m o p a s a co n cu a lq u ie r t ip o
re fe re n cia . S in e m b a rg o , s i e je cu t a m o s e l s ig u ie n t e có d ig o ve re m o s q u e e s t o n o o cu rre e n e l ca s o d e la s
ca d e n a s :

using System;

public class IgualdadCadenas


{
public static void Main()
{
string cadena1 = "José Antonio";
string cadena2 = String.Copy(cadena1);

Console.WriteLine(cadena1==cadena2);
}
}

El m é t o d o Copy() d e la cla s e String u s a d o d e vu e lve u n a co p ia d e l o b je t o q u e s e le p a s a co m o p a rá m e t ro .


Po r t a n t o , a l s e r o b je t o s d ife re n t e s s e a lm a ce n a rá n e n p o s icio n e s d is t in t a s d e m e m o ria y a l co m p a ra rlo s
d e b e ría d e vo lve rs e false co m o p a s a co n cu a lq u ie r t ip o re fe re n cia . S in e m b a rg o , s i e je cu t a e l p ro g ra m a ve rá
q u e lo q u e s e o b t ie n e e s p re cis a m e n t e lo co n t ra rio : true. Es t o s e d e b e a q u e p a ra h a ce r p a ra h a ce r m á s
in t u it ivo e l t ra b a jo co n ca d e n a s , e n C# s e h a m o d ifica d o e l o p e ra d o r d e ig u a ld a d p a ra q u e cu a n d o s e a p liq u e
e n t re ca d e n a s s e co n s id e re q u e s u s o p e ra n d o s s o n ig u a le s s ó lo s i s o n le xico g rá fica m e n t e e q u iva le n t e s y n o s i
re fe re n cia n a l m is m o o b je t o e n m e m o ria . Ad e m á s , e s t a co m p a ra ció n s e h a ce t e n ie n d o e n cu e n t a la
ca p it a liza ció n u s a d a , p o r lo q u e "Hola"=="HOLA" ó "Hola"=="hola" d e vo lve rá n false ya q u e co n t ie n e n
la s m is m a s le t ra s p e ro co n d is t in t a ca p it a liza ció n .

http://www.programacion.com/tutorial.csharp.8.html (10 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

S i s e q u is ie s e co m p a ra r ca d e n a s p o r re fe re n cia h a b ría q u e o p t a r p o r u n a d e e s t a s d o s o p cio n e s : co m p a ra rla s


co n Object.ReferenceEquals() o co n ve rt irla s e n objects y lu e g o co m p a ra rla s co n == Po r e je m p lo :

Console.WriteLine(Object.ReferecenceEquals(cadena1, cadena2));
Console.WriteLine( (object) cadena1 == (object) cadena2);

Ah o ra s í q u e lo q u e s e co m p a ra n s o n la s d ire ccio n e s d e lo s o b je t o s q u e re p re s e n t a n a la s ca d e n a s e n
m e m o ria , p o r lo q u e la s a lid a q u e s e m o s t ra rá p o r p a n t a lla e s :

False
False

Ha y q u e s e ñ a la r u n a co s a , y e s q u e a u n q u e e n p rin cip io e l s ig u ie n t e có d ig o d e b e ría m o s t ra r la m is m a s a lid a


p o r p a n t a lla q u e e l a n t e rio r ya q u e la s ca d e n a s co m p a ra d a s s e d e b e ría n co rre s p o n d e r a o b je t o s q u e a u n q u e
s e a n le xico g rá fica m e n t e e q u iva le n t e s s e a lm a ce n a n e n p o s icio n e s d ife re n t e s e n m e m o ria :

using System;

public class IgualdadCadenas2


{
public static void Main()
{
string cadena1 = "José Antonio";
string cadena2 = "José Antonio";

Console.WriteLine(Object.ReferenceEquals(cadena1, cadena2));
Console.WriteLine( ((object) cadena1) == ((object) cadena2));
}
}

S i lo e je cu t a m o s ve re m o s q u e la s a lid a o b t e n id a e s ju s t a m e n t e la co n t ra ria :

True
True

Es t o s e d e b e a q u e e l co m p ila d o r h a d e t e ct a d o q u e a m b o s lit e ra le s d e ca d e n a s o n le xico g rá fica m e n t e


e q u iva le n t e s y h a d e cid id o q u e p a ra a h o rra m e m o ria lo m e jo r e s a lm a ce n a r e n m e m o ria u n a ú n ica co p ia d e la
ca d e n a q u e re p re s e n t a n y h a ce r q u e a m b a s va ria b le s a p u n t e n a e s a co p ia co m ú n . Es t o va a a fe ct a r a la fo rm a
e n q u e e s p o s ib le m a n ip u la r la s ca d e n a s co m o s e e xp lica rá m á s a d e la n t e .

Al ig u a l q u e e l s ig n ifica d o d e l o p e ra d o r == h a s id o e s p e cia lm e n t e m o d ifica d o p a ra t ra b a ja r co n ca d e n a s , lo


m is m o o cu rre co n e l o p e ra d o r b in a rio +. En e s t e ca s o , cu a n d o s e a p lica e n t re d o s ca d e n a s o u n a ca d e n a y u n
ca rá ct e r lo q u e h a ce e s d e vo lve r u n a n u e va ca d e n a co n e l re s u lt a d o d e co n ca t e n a r s u s o p e ra n d o s . As í p o r
e je m p lo , e n e l s ig u ie n t e có d ig o la s d o s va ria b le s cre a d a s a lm a ce n a rá n la ca d e n a Hola Mundo:

public class Concatenación


{
public static void Main()
{
string cadena = "Hola" + " Mundo";
string cadena2 = "Hola Mund" + 'o';
}
}

Po r o t ro la d o , e l a cce s o a la s ca d e n a s s e h a ce d e m a n e ra s im ila r a co m o s i d e t a b la s d e ca ra ct e re s s e t ra t a s e :
s u "ca m p o " Length a lm a ce n a rá e l n ú m e ro d e ca ra ct e re s q u e la fo rm a n y p a ra a cce d e r a s u s e le m e n t o s s e

http://www.programacion.com/tutorial.csharp.8.html (11 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

u t iliza e l o p e ra d o r []. Po r e je m p lo , e l s ig u ie n t e có d ig o m u e s t ra p o r p a n t a lla ca d a ca rá ct e r d e la ca d e n a Ho la


e n u n a lín e a d ife re n t e :

using System;

public class AccesoCadenas


{
public static void Main()
{
string cadena = "Hola";

Console.WriteLine(cadena[0]);
Console.WriteLine(cadena[1]);
Console.WriteLine(cadena[2]);
Console.WriteLine(cadena[3]);
}
}

S in e m b a rg o , h a y q u e s e ñ a la r u n a d ife re n cia im p o rt a n t e re s p e ct o a la fo rm a e n q u e s e a cce d e a la s t a b la s : la s


ca d e n a s s o n in m u t a b le s , lo q u e s ig n ifica q u e n o e s p o s ib le m o d ifica r lo s ca ra ct e re s q u e la s fo rm a n . Es t o s e
d e b e a q u e e l co m p ila d o r co m p a rt e e n m e m o ria la s re fe re n cia s a lit e ra le s d e ca d e n a le xico g rá fica m e n t e
e q u iva le n t e s p a ra a s í a h o rra r m e m o ria , y s i s e p e rm it ie s e m o d ifica rlo s lo s ca m b io s q u e s e h icie s e n a t ra vé s d e
u n a va ria b le a u n a ca d e n a co m p a rt id a a fe ct a ría n a l re s t o d e va ria b le s q u e la co m p a rt a n , lo q u e p o d ría ca u s a r
e rro re s d ifícile s d e d e t e ct a r. Po r t a n t o , h a ce r e s t o e s in co rre ct o :

string cadena = "Hola";


cadena[0]="A"; //Error: No se pueden modificar las cadenas

S in e m b a rg o , e l h e ch o d e q u e n o s e p u e d a n m o d ifica r la s ca d e n a s n o s ig n ifica q u e n o s e p u e d a n ca m b ia r lo s
o b je t o s a lm a ce n a d o s e n la s va ria b le s d e t ip o string. Po r e je m p lo , e l s ig u ie n t e có d ig o e s vá lid o :

String cad = "Hola";


cad = "Adios"; // Correcto, pues no se modifica la cadena
// almacenada en cad sino que se hace que cad
// pase a almacenar otra cadena distinta..

S i s e d e s e a t ra b a ja r co n ca d e n a s m o d ifica b le s p u e d e u s a rs e Sytem.Text.StringBuilder, q u e fu n cio n a d e


m a n e ra s im ila r a string p e ro p e rm it e la m o d ifica ció n d e s u s ca d e n a s e n t a n t o q u e e s t a s n o s e co m p a rt e n e n
m e m o ria . Pa ra cre a r o b je t o s d e e s t e t ip o b a s t a p a s a r co m o p a rá m e t ro d e s u co n s t ru ct o r e l o b je t o string q u e
co n t ie n e la ca d e n a a re p re s e n t a r m e d ia n t e u n StringBuilder, y p a ra co n ve rt ir u n StringBuilder e n
String s ie m p re p u e d e u s a rs e s u m é t o d o ToString() h e re d a d o d e System.Object. Po r e je m p lo :

using System.Text;
using System;

public class ModificaciónCadenas


{
public static void Main()
{
StringBuilder cadena = new StringBuilder("Pelas");
String cadenaInmutable;

cadena[0] = 'V';
Console.WriteLine(cadena); // Muestra Velas
cadenaInmutable = cadena.ToString();
Console.WriteLine(cadenaInmutable); // Muestra Velas

http://www.programacion.com/tutorial.csharp.8.html (12 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

}
}

Ap a rt e d e lo s m é t o d o s ya vis t o s , e n la cla s e System.String s e d e fin e n m u ch o s o t ro s m é t o d o s a p lica b le s a


cu a lq u ie r ca d e n a y q u e p e rm it e n m a n ip u la rla . Lo s p rin cip a le s s o n :

● in t I n d e x Of( s t rin g s u b c a d e n a ) : In d ica cu á l e s e l ín d ice d e la p rim e ra a p a rició n d e la


subcadena in d ica d a d e n t ro d e la ca d e n a s o b re la q u e s e a p lica . La b ú s q u e d a d e d ich a
s u b ca d e n a s e re a liza d e s d e e l p rin cip io d e la ca d e n a , p e ro e s p o s ib le in d ica r e n u n s e g u n d o
p a rá m e t ro o p cio n a l d e t ip o int cu á l e s e l ín d ice d e la m is m a a p a rt ir d e l q u e s e d e s e a
e m p e za r a b u s ca r. De l m is m o m o d o , la b ú s q u e d a a ca b a a l lle g a r a l fin a l d e la ca d e n a s o b re
la q u e s e b u s ca , p e ro p a s a n d o u n t e rce r p a rá m e t ro o p cio n a l d e t ip o int e s p o s ib le in d ica r
a lg ú n ín d ice a n t e rio r d o n d e t e rm in a rla .

Nó t e s e q u e e s u n m é t o d o m u y ú t il p a ra s a b e r s i u n a ca d e n a co n t ie n e o n o a lg u n a s u b ca d e n a
d e t e rm in a d a , p u e s s ó lo s i n o la e n cu e n t ra d e vu e lve u n - 1 .

● in t La s t I n d e x Of( s t rin g s u b c a d e n a ) : Fu n cio n a d e fo rm a s im ila r a IndexOf() s ó lo q u e


d e vu e lve la p o s ició n d e la ú lt im a a p a rició n d e la subcadena b u s ca d a e n lu g a r d e d e vo lve r la
d e la p rim e ra .
● s t rin g I n s e rt ( in t p o s ic ió n , s t rin g s u b c a d e n a ) : De vu e lve la ca d e n a re s u lt a n t e d e in s e rt a r
la subcadena in d ica d a e n la posición e s p e cifica d a d e la ca d e n a s o b re la q u e s e a p lica .
● s t rin g Re m o v e ( in t p o s ic ió n , in t n ú m e ro ) : De vu e lve la ca d e n a re s u lt a n t e d e e lim in a r e l
número d e ca ra ct e re s in d ica d o q u e h u b ie s e e n la ca d e n a s o b re a l q u e s e a p lica a p a rt ir d e la
posición e s p e cifica d a .
● s t rin g Re p la c e ( s t rin g a S u s t it u ir, s t rin g s u s t it u t a ) : De vu e lve la ca d e n a re s u lt a n t e d e
s u s t it u ir e n la ca d e n a s o b re la q u e s e a p lica t o d a a p a rició n d e la ca d e n a aSustituir
in d ica d a p o r la ca d e n a sustituta e s p e cifica d a co m o s e g u n d o p a rá m e t ro .
● s t rin g S u b s t rin g ( in t p o s ic ió n , in t n ú m e ro ) : De vu e lve la s u b ca d e n a d e la ca d e n a s o b re
la q u e s e a p lica q u e co m ie n za e n la posición in d ica d a y t ie n e e l número d e ca ra ct e re s
e s p e cifica d o s . S i n o s e in d ica d ich o n ú m e ro s e d e vu e lve la s u b ca d e n a q u e va d e s d e la
p o s ició n in d ica d a h a s t a e l fin a l d e la ca d e n a .
● s t rin g To Up p e r( ) y s t rin g To Lo w e r( ) : De vu e lve n , re s p e ct iva m e n t e , la ca d e n a q u e
re s u lt e d e co n ve rt ir a m a yú s cu la s o m in ú s cu la s la ca d e n a s o b re la q u e s e a p lica n .

Es p re cis o in cid ir e n q u e a u n q u e h a ya n m é t o d o s d e in s e rció n , re e m p la zo o e lim in a ció n d e ca ra ct e re s q u e


p u e d a n d a r la s e n s a ció n d e q u e e s p o s ib le m o d ifica r e l co n t e n id o d e u n a ca d e n a , e n re a lid a d la s ca d e n a s s o n
in m u t a b le s y d ich o m é t o d o s lo q u e h a ce n e s d e vo lve r u n a n u e va ca d e n a co n e l co n t e n id o co rre s p o n d ie n t e a
h a b e r e fe ct u a d o la s o p e ra cio n e s d e m o d ifia ció n s o licit a d a s s o b re la ca d e n a a la q u e s e a p lica n . Po r e llo , la s
ca d e n a s s o b re la s q u e s e a p lica n q u e d a n in t a ct a s co m o m u e s t ra e l s ig u ie n t e e je m p lo :

Using System;

public class EjemploInmutabilidad


{
public static void Main()
{
string cadena1="Hola";
string cadena2=cadena1.Remove(0,1);

Console.WriteLine(cadena1);
Console.WriteLine(cadena2);
}
}

La s a lid a p o r p a n t a lla d e e s t e e je m p lo d e m u e s t ra lo a n t e s d ich o , p u e s e s :

http://www.programacion.com/tutorial.csharp.8.html (13 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

Hola
ola

Co m o s e ve , t ra s e l Remove() la cadena1 p e rm a n ce in t a ct a y e l co n t e n id o d e cadena2 e s e l q u e d e b e ría


t e n e r cadena1 s i s e le h u b ie s e e lim in a d o s u p rim e r ca rá ct e r.

Co n s t a n t e s

Un a c o n s t a n t e e s u n a va ria b le cu yo va lo r p u e d e d e t e rm in a r e l co m p ila d o r d u ra n t e la co m p ila ció n y p u e d e


a p lica r o p t im iza cio n e s d e riva d a s d e e llo . Pa ra q u e e s t o s e a p o s ib le s e h a d e cu m p lir q u e e l va lo r d e u n a
co n s t a n t e n o p u e d a ca m b ia r d u ra n t e la e je cu ció n , p o r lo q u e e l co m p ila d o r in fo rm a rá co n u n e rro r d e t o d o
in t e n t o d e m o d ifica r e l va lo r in icia l d e u n a co n s t a n t e . La s co n s t a n t e s s e d e fin e n co m o va ria b le s n o rm a le s p e ro
p re ce d ie n d o e l n o m b re d e s u t ip o d e l m o d ifica d o r const y d á n d o le s s ie m p re u n va lo r in icia l a l d e cla ra rla s . O
s e a , co n e s t a s in t a xis :

const <tipoConstante> <nombreConstante> = <valor>;

As í, e je m p lo s d e d e fin ició n d e co n s t a n t e s e s e l s ig u ie n t e :

const int a = 123;


const int b = a + 125;

Da d a s e s t a s d e fin icio n e s d e co n s t a n t e s , lo q u e h a rá e l co m p ila d o r s e rá s u s t it u ir e n e l có d ig o g e n e ra d o t o d a s


la s re fe re n cia s a la s co n s t a n t e s a y b p o r lo s va lo re s 1 2 3 y 2 4 8 re s p e ct iva m e n t e , p o r lo q u e e l có d ig o
g e n e ra d o s e rá m á s e ficie n t e ya q u e n o in clu irá e l a cce s o y cá lcu lo d e lo s va lo re s d e a y b. Nó t e s e q u e p u e d e
h a ce r e s t o p o rq u e e n e l có d ig o s e in d ica e xp lícit a m e n t e cu a l e s e l va lo r q u e s ie m p re t e n d rá a y, a l s e r e s t e u n
va lo r fijo , p u e d e d e d u cir cu á l s e rá e l va lo r q u e s ie m p re t e n d rá b. Pa ra q u e e l co m p ila d o r p u e d a h a ce r e s t o s
cá lcu lo s s e h a d e cu m p lir q u e e l va lo r q u e s e a s ig n e a la s co n s t a n t e s e n s u d e cla ra ció n s e a u n a e xp re s ió n
co n s t a n t e . Po r e je m p lo , e l s ig u ie n t e có d ig o n o e s vá lid o e n t a n t o q u e e l va lo r d e x n o e s co n s t a n t e :

int x = 123; // x es una variable normal, no una constante


const int y = x +123; // Error: x no tiene porqué tener valor
// constante (aunque aquí lo tenga)

De b id o a la n e ce s id a d d e q u e e l va lo r d a d o a u n a co n s t a n t e s e a p re cis a m e n t e co n s t a n t e , n o t ie n e m u ch o
s e n t id o cre a r co n s t a n t e s d e t ip o s d e d a t o s n o b á s ico s , p u e s a n o s e r q u e va lg a n null s u s va lo re s n o s e
p u e d e n d e t e rm in a r d u ra n t e la co m p ila ció n s in o ú n ica m e n t e t ra s la e je cu ció n d e s u co n s t ru ct o r. La ú n ica
e xce p ció n a e s t a re g la s o n lo s t ip o s e n u m e ra d o s , cu yo s va lo re s s e p u e d e n d e t e rm in a r a l co m p ila r co m o s e
e xp lica rá cu a n d o lo s ve a m o s e n e l Te m a 1 4 : En u m e ra cio n e s

To d a s la s co n s t a n t e s s o n im p lícit a m e n t e e s t á t ica s , p o r lo s e co n s id e ra e rró n e o in clu ir e l m o d ifica d o r static


e n s u d e fin ició n a l n o t e n e r s e n t id o h a ce rlo . De h e ch o , p a ra le e r s u va lo r d e s d e có d ig o s e xt e rn o s a la d e fin ició n
d e la cla s e d o n d e e s t é d e fin id a la co n s t a n t e , h a b rá q u e u s a r la s in t a xis
<nombreClase>.<nombreConstante> t íp ica d e lo s ca m p o s static.

Po r ú lt im o , h a y q u e t e n e r e n cu e n t a q u e u n a va ria b le s ó lo p u e d e s e r d e fin id a co m o co n s t a n t e s i s e e s u n a
va ria b le lo ca l o u n ca m p o , p e ro n o s i e s u n p a rá m e t ro .

Va ria b le s d e s ó lo le c t u ra

Da d o q u e h a y cie rt o s ca s o s e n lo s q u e re s u lt a in t e re s a n t e d is p o n e r d e la ca p a cid a d d e s ó lo le ct u ra q u e t ie n e n
la s co n s t a n t e s p e ro n o e s p o s ib le u s a rla s d e b id o a la s re s t riccio n e s q u e h a y im p u e s t a s s o b re s u u s o , e n C#
t a m b ié n s e d a la p o s ib ilid a d d e d e fin ir va ria b le s q u e s ó lo p u e d a n s e r le íd a s . Pa ra e llo s e u s a la s ig u ie n t e
s in t a xis :

http://www.programacion.com/tutorial.csharp.8.html (14 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

readonly <tipoConstante> <nombreConstante> = <valor>;

Es t a s va ria b le s s u p e ra n la m a yo ría d e la s lim it a cio n e s d e la s co n s t a n t e s . Po r e je m p lo :

● No e s o b lig a t o rio d a rle s u n va lo r a l d e fin irla s , s in o q u e p u e d e d á rs e le s e n e l co n s t ru ct o r.


Ah o ra b ie n , u n a ve z d a d o u n va lo r a u n a va ria b le readonly ya n o e s p o s ib le vo lve rlo a
m o d ifica r. S i n o s e le d a n in g ú n va lo r n i e n s u co n s t ru ct o r n i e n s u d e fin ició n t o m a rá e l va lo r
p o r d e fe ct o co rre s p o n d ie n t e a s u t ip o d e d a t o .

● No t ie n e n p o rq u é a lm a ce n a r va lo re s co n s t a n t e s , s in o q u e e l va lo r q u e a lm a ce n e n p u e d e
ca lcu la rs e d u ra n t e la e je cu ció n d e la a p lica ció n .

● No t ie n e n p o rq u é d e fin irs e co m o e s t á t ica s , a u n q u e s i s e d e s e a p u e d e h a ce rs e .

● S u va lo r s e d e t e rm in a d u ra n t e la e je cu ció n d e la a p lica ció n , lo q u e p e rm it e la a ct u a liza ció n


d e có d ig o s clie n t e s in n e ce s id a d d e re co m p ila r. Po r e je m p lo , d a d o :

namespace Programa1
{
public class Utilidad
{
public static readonly int X = 1;
}
}
namespace Programa2
{
class Test
{
public static void Main() {
System.Console.WriteLine(Programa1.Utilidad.X);

}
}
}

En p rin cip io , la e je cu ció n d e e s t e p ro g ra m a p ro d u cirá e l va lo r 1 . S in e m b a rg o , s i ca d a e s p a cio d e n o m b re s s e


co m p ila n e n m ó d u lo s d e có d ig o s e p a ra d o s q u e lu e g o s e e n la za n d in á m ica m e t e y ca m b ia m o s e l va lo r d e X, s ó lo
t e n d re m o s q u e re co m p ila r e l m ó d u lo d o n d e e s t é d e fin id o Programa1.Utilidad y Programa2.Test p o d rá
e je cu t a rs e u s a n d o e l n u e vo va lo r d e X s in n e ce s id a d d e re co m p ila lo .

S in e m b a rg o , p e s e a la s ve n t a ja s q u e la s va ria b le s d e s ó lo le ct u ra o fre ce n re s p e ct o a la s co n s t a n t e s , t ie n e n
d o s in co n ve n ie n t e s re s p e ct o a é s t a s : s ó lo p u e d e n d e fin irs e co m o ca m p o s ( n o co m o va ria b le s lo ca le s ) y co n
e lla s n o e s p o s ib le re a liza r la s o p t im iza cio n e s d e có d ig o co m e n t a d a s p a ra la s co n s t a n t e s .

Ord e n d e in ic ia liz a c ió n d e v a ria b le s

Pa ra d e d u cir e l o rd e n e n q u e s e in icia liza rá n la s va ria b le s d e u n t ip o d e d a t o b a s t a s a b e r cu á l e s e l m o m e n t o


e n q u e s e in icia liza ca d a u n a y cu a n d o s e lla m a a lo s co n s t ru ct o re s :

● Lo s c a m p o s e s t á t ic o s s ó lo s e in icia liza n la p rim e ra ve z q u e s e a cce d e a l t ip o a l q u e


p e rt e n e ce n , p e ro n o e n s u ce s ivo s a cce s o s . Es t o s a cce s o s p u e d e n s e r t a n t o p a ra cre a r
o b je t o s d e d ich o t ip o co m o p a ra a cce d e r a s u s m ie m b ro s e s t á t ico s . La in icia liza ció n s e h a ce
d e m o d o q u e e n p rim e r lu g a r s e d é a ca d a va ria b le e l va lo r p o r d e fe ct o co rre s p o n d ie n t e a s u
t ip o , lu e g o s e d é a ca d a u n a e l va lo r in icia l e s p e cifica d o a l d e fin irla s , y p o r ú lt im o s e lla m e a l
co n s t ru ct o r d e l t ip o . Un co n s t ru ct o r d e t ip o e s s im ila r a u n co n s t ru ct o r n o rm a l s ó lo q u e e n

http://www.programacion.com/tutorial.csharp.8.html (15 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

s u có d ig o ú n ica m e n t e p u e d e a cce d e rs e a m ie m b ro s static ( s e ve rá e n e l Te m a 8 : Mé t o d o s )

● Lo s c a m p o s n o e s t á t ic o s s e in icia liza n ca d a ve z q u e s e cre a u n o b je t o d e l t ip o d e d a t o a l


q u e p e rt e n e ce n . La in icia liza ció n s e h a ce d e l m is m o m o d o q u e e n e l ca s o d e lo s ca m p o s
e s t á t ico s , y u n a ve z t e rm in a d a s e p a s a a e je cu t a r e l có d ig o d e l co n s t ru ct o r e s p e cifica d o a l
cre a r e l o b je t o . En ca s o d e q u e la cre a ció n d e l o b je t o s e a e l p rim e r a cce s o q u e s e h a g a a l
t ip o d e d a t o d e l m is m o , e n t o n ce s p rim e ro s e in icia liza rá n lo s ca m p o s e s t á t ico s y lu e g o lo s n o
e s t á t ico s .

● Lo s p a rá m e t ro s s e in icia liza n e n ca d a lla m a d a a l m é t o d o a l q u e p e rt e n e ce n co n lo s va lo re s


e s p e cifica d o s a l lla m a rlo .

● La s v a ria b le s lo c a le s s e in icia liza n e n ca d a lla m a d a a l m é t o d o a l cu a l p e rt e n e ce n p e ro t ra s


h a b e rs e in icia liza d o lo s p a rá m e t ro s d e fin id o s p a ra e l m is m o . S i n o s e le s d a va lo r in icia l n o
t o m a n n in g u n o p o r d e fe ct o , co n s id e rá n d o s e e rró n e o t o d o a cce s o d e le ct u ra q u e s e h a g a a
la s m is m a s m ie n t ra s n o s e le s e s crib a a lg ú n va lo r.

Ha y q u e t e n e r e n cu e n t a q u e a l d e fin irs e ca m p o s e s t á t ico s p u e d e n h a ce rs e d e fin icio n e s cíclica s e n la s q u e e l


va lo r d e u n o s ca m p o s d e p e n d a d e l d e o t ro s y e l va lo r d e lo s s e g u n d o s d e p e n d a d e l d e lo s p rim e ro s . Po r
e je m p lo :

class ReferenciasCruzadas
{
static int a = b + 1;
static int b = a + 1;

public static void Main()


{
System.Console.WriteLine("a = {0}, b = {1}", a, b);
}
}

Es t o s ó lo e s p o s ib le h a ce rlo a l d e fin ir ca m p o s e s t á t ico s y n o e n t re ca m p o s n o e s t á t ica s o va ria b le s lo ca le s , ya


q u e n o s e p u e d e in icia liza r ca m p o s n o e s t á t ico s e n fu n ció n d e l va lo r d e o t ro s m ie m b ro s n o e s t á t ico s d e l m is m o
o b je t o p o rq u e e l o b je t o a ú n n o e s t a ría in cia liza d o s , y n o s e p u e d e in icia liza r va ria b le s lo ca le s e n fu n ció n d e l
va lo r d e o t ra s va ria b le s lo ca le s d e fin id a s m á s a d e la n t e p o rq u e n o s e p u e d e n le e r va ria b le s n o in icia liza d a s .
Ad e m á s , a u n q u e la s co n s t a n t e s s e a n im p lícit a m e n t e e s t á t ica s t a m p o co p u e d e h a ce rs e d e fin icio n e s cíclica s
e n t re co n s t a n t e s .

En p rim e r lu g a r, h a y q u e s e ñ a la r q u e e s crib ir u n có d ig o co m o e l d e l e je m p lo a n t e rio r n o e s u n b u e n h á b it o d e


p ro g ra m a ció n ya q u e d ificu lt a in n e ce s a ria m e n t e la le g ib ilid a d d e l p ro g ra m a . Aú n a s í, C# a d m it e e s t e t ip o d e
có d ig o s y p a ra d e t e rm in a r e l va lo r co n q u e s e in icia liza rá n b a s t a t e n e r e n cu e n t a q u e s ie m p re s e in icia liza n
p rim e ro t o d o s lo s ca m p o s co n s u s va lo re s p o r d e fe ct o y lu e g o s e in icia liza n a q u e llo s q u e t e n g a n va lo re s
in icia le s co n d ich o s va lo re s in icia le s y e n e l m is m o o rd e n e n q u e a p a re zca n e n e l có d ig o fu e n t e . De e s t e m o d o ,
la s a lid a d e l p ro g ra m a d e e je m p lo a n t e rio r s e rá :

a = 1, b = 2

Nó t e s e q u e lo q u e s e h a h e ch o e s in icia liza r p rim e ro a y b co n s u s va lo re s p o r d e fe ct o ( 0 e n e s t e ca s o ) , lu e g o


ca lcu la r e l va lo r fin a l d e a y lu e g o ca lcu la r e l va lo r fin a l d e b. Co m o b va le 0 cu a n d o s e ca lcu la e l va lo r fin a l d e
a , e n t o n ce s e l va lo r fin a l d e a e s 1 ; y co m o a va le 1 cu a n d o s e ca lcu la e l va lo r fin a l d e b, e n t o n ce s e l va lo r
fin a l d e b e s 2 .

http://www.programacion.com/tutorial.csharp.8.html (16 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.8.html (17 de 17) [20/10/2002 18:21:25]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 8 : Mé t o d o s
❍ Co n ce p t o d e m é t o d o
❍ De fin ició n d e m é t o d o s
❍ Lla m a d a a m é t o d o s
❍ Tip o s d e p a rá m e t ro s . S in t a xis d e d e fin ició n
❍ Mé t o d o s e xt e rn o s
❍ Co n s t ru ct o re s
❍ De s t ru ct o re s

Te m a 8 : Mé t o d o s

Co n c e p t o d e m é t o d o

Un m é t o d o e s u n co n ju n t o d e in s t ru ccio n e s a la s q u e s e le s d a u n d e t e rm in a d o n o m b re d e t a l
m a n e ra q u e s e a p o s ib le e je cu t a rla s e n cu a lq u ie r m o m e n t o s in t e n e rla s q u e re e s crib ir s in o u s a n d o
s ó lo s u n o m b re . A e s t a s in s t ru ccio n e s s e le s d e n o m in a c u e rp o d e l m é t o d o , y a s u e je cu ció n a t ra vé s
d e s u n o m b re s e le d e n o m in a lla m a d a a l m é t o d o .

La e je cu ció n d e la s in s t ru ccio n e s d e u n m é t o d o p u e d e p ro d u cir co m o re s u lt a d o u n o b je t o d e


cu a lq u ie r t ip o . A e s t e o b je t o s e le lla m a v a lo r d e re t o rn o d e l m é t o d o y e s co m p le t a m e n t e o p cio n a l,
p u d ié n d o s e e s crib ir m é t o d o s q u e n o d e vu e lva n n in g u n o .

La e je cu ció n d e la s in s t ru ccio n e s d e u n m é t o d o p u e d e d e p e n d e r d e l va lo r d e u n a s va ria b le s


e s p e cia le s d e n o m in a d a s p a rá m e t ro s d e l m é t o d o , d e m a n e ra q u e e n fu n ció n d e l va lo r q u e s e d é a
e s t a s va ria b le s e n ca d a lla m a d a la e je cu ció n d e l m é t o d o s e p u e d a re a liza r d e u n a u o t ra fo rm a y
p o d rá p ro d u cir u n o u o t ro va lo r d e re t o rn o .

Al co n ju n t o fo rm a d o p o r e l n o m b re d e u n m é t o d o y e l n ú m e ro y t ip o d e s u s p a rá m e t ro s s e le co n o ce
co m o s ig n a t u ra d e l m é t o d o . La s ig n a t u ra d e u n m é t o d o e s lo q u e ve rd a d e ra m e n t e lo id e n t ifica , d e
m o d o q u e e s p o s ib le d e fin ir e n u n m is m o t ip o va rio s m é t o d o s co n id é n t ico n o m b re s ie m p re y cu a n d o
t e n g a n d is t in t o s p a rá m e t ro s . Cu a n d o e s t o o cu rre s e d ice q u e e l m é t o d o q u e t ie n e e s e n o m b re e s t á
s o b re c a rg a d o .

http://www.programacion.com/tutorial.csharp.9.html (1 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

D e fin ic ió n d e m é t o d o s

Pa ra d e fin ir u n m é t o d o h a y q u e in d ica r t a n t o cu á le s s o n la s in s t ru ccio n e s q u e fo rm a n s u cu e rp o co m o


cu á l e s e l n o m b re q u e s e le d a rá , cu á l e s e l t ip o d e o b je t o q u e p u e d e d e vo lve r y cu á le s s o n lo s
p a rá m e t ro s q u e p u e d e t o m a r. Es t o s e in d ica n d e fin ié n d o lo a s í:

<tipoRetorno> <nombreMétodo>(<parámetros>)
{
<cuerpo>
}

En <tipoRetorno> s e in d ica cu á l e s e l t ip o d e d a t o d e l o b je t o q u e e l m é t o d o d e vu e lve , y s i n o


d e vu e lve n in g u n o s e h a d e e s crib ir void e n s u lu g a r.

Co m o n o m b re d e l m é t o d o s e p u e d e p o n e r e n <nombreMétodo> cu a lq u ie r id e n t ifica d o r vá lid o . Co m o


s e ve rá m á s a d e la n t e e n e l Te m a 1 5 : In t e rfa ce s , t a m b ié n e s p o s ib le in clu ir e n <nombreMétodo>
in fo rm a ció n d e e xp licit a ció n d e im p le m e n t a ció n d e in t e rfa z, p e ro p o r a h o ra p o d e m o s co n s id e ra r q u e
s ie m p re s e rá u n id e n t ifica d o r.

Au n q u e e s p o s ib le e s crib ir m é t o d o s q u e n o t o m e n p a rá m e t ro s , s i u n m é t o d o lo s t o m a s e h a d e
in d ica r e n <parámetros> cu á l e s e l n o m b re y t ip o d e ca d a u n o d e e llo s , s e p a rá n d o lo s co n co m a s s i
s o n m á s d e u n o y s ig u ie n d o la s in t a xis q u e m á s a d e la n t e e n e s t e m is m o t e m a e s e xp lica .

El <cuerpo> d e l m é t o d o t a m b ié n e s o p cio n a l, p e ro s i e l m é t o d o re t o rn a a lg ú n t ip o d e o b je t o
e n t o n ce s h a d e in clu ir a l m e n o s u n a in s t ru cció n return q u e in d iq u e cu á l e s e l o b je t o a d e vo lve r.

La s in t a xis a n t e rio rm e n t e vis t a n o e s la q u e s e u s a p a ra d e fin ir m é t o d o s a b s t ra c t o s . Co m o ya s e


vio e n e l Te m a 5 : Cla s e s , e n e s o s ca s o s lo q u e s e h a ce e s s u s t it u ir e l cu e rp o d e l m é t o d o y la s lla ve s
q u e lo e n cie rra n p o r u n s im p le p u n t o y co m a ( ;) Má s a d e la n t e e n e s t e t e m a ve re m o s q u e e s o e s
t a m b ié n lo q u e s e h a ce p a ra d e fin ir m é t o d o s e x t e rn o s .

A co n t in u a ció n s e m u e s t ra u n e je m p lo d e có m o d e fin ir u n m é t o d o d e n o m b re S a lu d a cu yo cu e rp o
co n s is t a e n e s crib ir e n la co n s o la e l m e n s a je "Ho la Mu n d o " y q u e d e vu e lva u n o b je t o int d e va lo r 1:

int Saluda()
{
Console.WriteLine("Hola Mundo");
return 1;
}

Lla m a d a a m é t o d o s

La fo rm a e n q u e s e p u e d e lla m a r a u n m é t o d o d e p e n d e d e l t ip o d e m é t o d o d e l q u e s e t ra t e . S i e s u n
m é t o d o d e o b je t o ( m é t o d o n o e s t á t ico ) s e h a d e u s a r la n o t a ció n :

<objeto>.<nombreMétodo>(<valoresParámetros>)

El <objeto> in d ica d o p u e d e s e r d ire ct a m e n t e u n a va ria b le d e l t ip o d e d a t o s a l q u e p e rt e n e zca e l


m é t o d o o p u e d e s e r u n a e xp re s ió n q u e p ro d u zca co m o re s u lt a d o u n a va ria b le d e e s e t ip o

http://www.programacion.com/tutorial.csharp.9.html (2 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

( re co rd e m o s q u e , d e b id o a la h e re n cia , e l t ip o d e l <objeto> p u e d e s e r u n s u b t ip o d e l t ip o d o n d e
re a lm e n t e s e h a ya d e fin id o e l m é t o d o ) ; p e ro s i d e s d e có d ig o d e a lg ú n m é t o d o d e u n o b je t o s e d e s e a
lla m a r a o t ro m é t o d o d e e s e m is m o o b je t o , e n t o n ce s s e h a d e d a r e l va lo r this a <objeto>.

En ca s o d e q u e s e a u n m é t o d o d e t ip o ( m é t o d o e s t á t ico ) , e n t o n e s s e h a d e u s a r:

<tipo>.<nombreMétodo>(<valoresParámetros>)

Ah o ra e n <tipo> h a d e in d ica rs e e l t ip o d o n d e s e h a ya d e fin id o e l m é t o d o o a lg ú n s u b t ip o s u yo . S in


e m b a rg o , s i e l m é t o d o p e rt e n e ce a l m is m o t ip o q u e e l có d ig o q u e lo lla m a e n t o n ce s s e p u e d e u s a r la
n o t a ció n a b re via d a :

<nombreMétodo>(<valoresParámetros>)

El fo rm a t o e n q u e s e p a s e n lo s va lo re s a ca d a p a rá m e t ro e n <valoresParámetros> a a q u e llo s
m é t o d o s q u e t o m e n p a rá m e t ro s d e p e n d e d e l t ip o d e p a rá m e t ro q u e s e a . Es t o s e e xp lica e n e l
s ig u ie n t e a p a rt a d o .

Tip o s d e p a rá m e t ro s . S in t a x is d e d e fin ic ió n

La fo rm a e n q u e s e d e fin e ca d a p a rá m e t ro d e u n m é t o d o d e p e n d e d e l t ip o d e p a rá m e t ro d e l q u e s e
t ra t e . En C# s e a d m it e n cu a t ro t ip o s d e p a rá m e t ro s : p a rá m e t ro s d e e n t ra d a , p a rá m e t ro s d e s a lid a ,
p a rá m e t ro s p o r re fe re n cia y p a rá m e t ro s d e n ú m e ro in d e fin id o .

P a rá m e t ro s d e

Un p a rá m e t ro d e e n t ra d a re cib e u n a co p ia d e l va lo r q u e a lm a ce n a ría u n a va ria b le d e l t ip o d e l


o b je t o q u e s e le p a s e . Po r t a n t o , s i e l o b je t o e s d e u n t ip o va lo r s e le p a s a rá u n a co p ia d e l o b je t o y
cu a lq u ie r m o d ifica ció n q u e s e h a g a a l p a rá m e t ro d e n t ro d e l cu e rp o d e l m é t o d o n o a fe ct a rá a l o b je t o
o rig in a l s in o a s u co p ia ; m ie n t ra s q u e s i e l o b je t o e s d e u n t ip o re fe re n cia e n t o n ce s s e le p a s a rá u n a
co p ia d e la re fe re n cia a l m is m o y cu a lq u ie r m o d ifica ció n q u e s e h a g a a l p a rá m e t ro d e n t ro d e l m é t o d o
t a m b ié n a fe ct a rá a l o b je t o o rig in a l ya q u e e n re a lid a d e l p a rá m e t ro re fe re n cia a e s e m is m o o b je t o
o rig in a l.

Pa ra d e fin ir u n p a rá m e t ro d e e n t ra d a b a s t a in d ica r cu á l e l n o m b re q u e s e le d e s e a d a r y e l cu á l e s
t ip o d e d a t o q u e p o d rá a lm a ce n a r. Pa ra e llo s e s ig u e la s ig u ie n t e s in t a xis :

<tipoParámetro> <nombreParámetro>

Po r e je m p lo , e l s ig u ie n t e có d ig o d e fin e u n m é t o d o lla m a d o S u m a q u e t o m a d o s p a rá m e t ro s d e
e n t ra d a d e t ip o int lla m a d o s par1 y par2 y d e vu e lve u n int co n s u s u m a :

int Suma(int par1, int par2)


{
return par1+par2;
}

Co m o s e ve , s e u s a la in s t ru cció n return p a ra in d ica r cu á l e s e l va lo r q u e h a d e d e vo lve r e l m é t o d o .


Es t e va lo r e s e l re s u lt a d o d e e je cu t a r la e xp re s ió n par1+par2; e s d e cir, e s la s u m a d e lo s va lo re s
p a s a d o s a s u s p a rá m e t ro s par1 y par2 a l lla m a rlo .

http://www.programacion.com/tutorial.csharp.9.html (3 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

En la s lla m a d a s a m é t o d o s s e e xp re s a n lo s va lo re s q u e s e d e s e e n d a r a e s t e t ip o d e p a rá m e t ro s
in d ica n d o s im p le m e n t e e l va lo r d e s e a d o . Po r e je m p lo , p a ra lla m a r a l m é t o d o a n t e rio r co n lo s va lo re s
2 y 5 s e h a ría <objeto>.Suma(2,5), lo q u e d e vo lve ría e l va lo r 7 .

To d o e s t o s e re s u m e co n e l s ig u ie n t e e je m p lo :

using System;

class ParámetrosEntrada
{
public int a = 1;

public static void F(ParémetrosEntrada p)


{
p.a++;
}

public static void G(int p)


{
p++;
}

public static void Main()


{
int obj1 = 0;
ParámetrosEntrada obj2 = new ParámetrosEntrada();

G(obj1);
F(obj2);

Console.WriteLine("{0}, {1}", obj1, obj2.a);


}
}

Es t e p ro g ra m a m u e s t ra la s ig u ie n t e s a lid a p o r p a n t a lla :

0, 2

Co m o s e ve , la lla m a d a a l m é t o d o G() n o m o d ifica e l va lo r q u e t e n ía obj1 a n t e s d e lla m a rlo ya q u e


obj1 e s d e u n t ip o va lo r ( int) S in e m b a rg o , co m o obj2 e s d e u n t ip o re fe re n cia
( ParámetrosLlamadas) lo s ca m b io s q u e s e le h a ce n d e n t ro d e F() a l p a s á rs e lo co m o p a rá m e t ro s í
q u e le a fe ct a n .

P a rá m e t ro s d e s a lid a

Un p a rá m e t ro d e s a lid a s e d ife re n cia d e u n o d e e n t ra d a e n q u e t o d o ca m b io q u e s e le re a lice e n e l


có d ig o d e l m é t o d o a l q u e p e rt e n e ce a fe ct a rá a l o b je t o q u e s e le p a s e a l lla m a r d ich o m é t o d o t a n t o s i
é s t e e s d e u n t ip o p o r co m o s i e s d e u n t ip o re fe re n cia . Es t o s e d e b e a q u e lo q u e a e s t o s p a rá m e t ro s
s e le s p a s a e s s ie m p re u n a re fe re n cia a l va lo r q u e a lm a ce n a ría u n a va ria b le d e l t ip o d e l o b je t o q u e s e
le s p a s e .

Cu a lq u ie r p a rá m e t ro d e s a lid a d e u n m é t o d o s ie m p re h a d e m o d ifica rs e d e n t ro d e l cu e rp o d e l m é t o d o

http://www.programacion.com/tutorial.csharp.9.html (4 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

y a d e m á s d ich a m o d ifica ció n h a d e h a ce rs e a n t e s q u e cu a lq u ie r le ct u ra d e s u va lo r. S i e s t o n o s e


h icie s e a s í e l co m p ila d o r lo d e t e ct a ría e in fo rm a ría d e e llo co n u n e rro r. Po r e s t a ra zó n e s p o s ib le
p a s a r p a rá m e t ro s d e s a lid a q u e s e a n va ria b le s n o in icia liza d a s , p u e s s e g a ra n t iza q u e e n e l m é t o d o
s e in icia liza rá n a n t e s d e le e rla s . Ad e m á s , t ra s la lla m a d a a u n m é t o d o s e co n s id e ra q u e la s va ria b le s
q u e s e le p a s a ro n co m o p a rá m e t ro s d e s a lid a ya e s t a rá n in icia liza d a s , p u e s d e n t ro d e l m é t o d o s e g u ro
q u e s e la s in icia liza ció .

Nó t e s e q u e e s t e t ip o d e p a rá m e t ro s p e rm it e n d is e ñ a r m é t o d o s q u e d e vu e lva n m ú lt ip le s o b je t o s : u n
o b je t o s e d e vo lve ría co m o va lo r d e re t o rn o y lo s d e m á s s e d e vo lve ría n e s crib ie n d o s e n lo s
p a rá m e t ro s d e s a lid a .

Lo s p a rá m e t ro s d e s a lid a s e d e fin e n d e fo rm a p a re cid a a lo s p a rá m e t ro s d e e n t ra d a p e ro s e le s h a d e


a ñ a d ir la p a la b ra re s e rva d a out. O s e a , s e d e fin e n a s í:

out <tipoParámetro> <nombreParámetro>

Al lla m a r a u n m é t o d o q u e t o m e p a rá m e t ro s d e e s t e t ip o t a m b ié n s e h a p re ce d e r e l va lo r
e s p e cifica d o p a ra e s t o s p a rá m e t ro s d e l m o d ifica d o r o u t . Un a u t ilid a d d e e s t o e s fa cilit a r la le g ib ilid a d
d e la s lla m a d a s a m é t o d o s . Po r e je m p lo , d a d a u n a lla m a d a d e la fo rm a :

a.f(x, out z)

Es fá cil d e t e rm in a r q u e lo q u e s e h a ce e s lla m a r a l m é t o d o f() d e l o b je t o a p a s á n d o le x co m o


p a rá m e t ro d e e n t ra d a y z co m o p a rá m e t ro d e s a lid a . Ad e m á s , t a m b ié n s e p u e d e d e d u cir q u e e l va lo r
d e z ca m b ia rá t ra s la lla m a d a .

S in e m b a rg o , la ve rd a d e ra u t ilid a d d e fo rza r a e xp licit a r e n la s lla m a d a s e l t ip o d e p a s o d e ca d a


p a rá m e t ro e s q u e p e rm it e e vit a r e rro re s d e riva d o s d e q u e u n p ro g ra m a d o r p a s e u n a va ria b le a u n
m é t o d o y n o s e p a q u e e l m é t o d o la p u e d e m o d ifica r. Te n ié n d o la q u e e xp licit a r s e a s e g u ra q u e e l
p ro g ra m a d o r s e a co n s cie n t e d e lo q u e h a ce .

P a rá m e t ro s p o r re fe re n c ia

Un p a rá m e t ro p o r re fe re n c ia e s s im ila r a u n p a rá m e t ro d e s a lid a s ó lo q u e n o e s o b lig a t o rio


m o d ifica rlo d e n t ro d e l m é t o d o a l q u e p e rt e n e ce , p o r lo q u e s e rá o b lig a t o rio p a s a rle u n a va ria b le
in icia liza d a ya q u e n o s e g a ra n t iza s u in icia liza ció n e n e l m é t o d o .

Lo s p a rá m e t ro s p o r re fe re n cia s e d e fin e n ig u a l q u e lo s p a rá m e t ro s d e s a lid a p e ro s u s t it u ye n d o e l


m o d ifica d o r out p o r e l m o d ifica d o r ref. De l m is m o m o d o , a l p a s a r va lo re s a p a rá m e t ro s p o r
re fe re n cia t a m b ié n h a y q u e p re ce d e rlo s d e l ref.

P a rá m e t ro s d e n ú m e ro in d e fin id o

C# p e rm it e d is e ñ a r m é t o d o s q u e p u e d a n t o m a r cu a lq u ie r n ú m e ro d e p a rá m e t ro s . Pa ra e llo h a y q u e
in d ica r co m o ú lt im o p a rá m e t ro d e l m é t o d o u n p a rá m e t ro d e a lg ú n t ip o d e t a b la u n id im e n s io n a l o
d e n t a d a p re ce d id o d e la p a la b ra re s e rva d a params. Po r e je m p lo :

static void F(int x, params object[] extras)


{}

To d o s lo s p a rá m e t ro s d e n ú m e ro in d e fin id o q u e s e p a s a n a l m é t o d o a l lla m a rlo h a n d e s e r d e l m is m o

http://www.programacion.com/tutorial.csharp.9.html (5 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

t ip o q u e la t a b la . Nó t e s e q u e e n e l e je m p lo e s e t ip o e s la cla s e p rim ig e n ia object, co n lo q u e s e


co n s ig u e q u e g ra cia s a l p o lim o rfis m o e l m é t o d o p u e d a t o m a r cu a lq u ie r n ú m e ro d e p a rá m e t ro s d e
cu a lq u ie r t ip o . Eje m p lo s d e lla m a d a s vá lid a s s e ría n :

F(4); // Pueden pasarse 0 parámetros indefinidos


F(3,2);
F(1, 2, "Hola", 3.0, new Persona());
F(1, new object[] {2,"Hola", 3.0, new Persona});

El p rim e r e je m p lo d e m u e s t ra q u e e l n ú m e ro d e p a rá m e t ro s in d e fin id o s q u e s e p a s e n t a m b ié n p u e d e
s e r 0 . Po r s u p a rt e , lo s d o s ú lt im o s e je m p lo s s o n t o t a lm e n t e e q u iva le n t e s , p u e s p re cis a m e n t e la
u t ilid a d d e p a la b ra re s e rva d a params e s in d ica r q u e s e d e s e a q u e la cre a ció n d e la t a b la object[]
s e h a g a im p lícit a m e n t e .

Es im p o rt a n t e s e ñ a la r q u e la p rio rid a d d e u n m é t o d o q u e in clu ya e l params e s in fe rio r a la d e


cu a lq u ie r o t ra s o b re ca rg a d e l m is m o . Es d e cir, s i s e h u b ie s e d e fin id o u n a s o b re ca rg a d e l m é t o d o
a n t e rio r co m o la s ig u ie n t e :

static void F(int x, int y)


{}

Cu a n d o s e h icie s e u n a lla m a d a co m o F(3,2) s e lla m a ría a e s t a ú lt im a ve rs ió n d e l m é t o d o , ya q u e


a u n q u e la d e l params e s t a m b ié n a p lica b le , s e co n s id e ra q u e e s m e n o s p rio rit a ria .

S o b re c a rg a d e t ip o s d e p a rá m e t ro s

En re a lid a d lo s m o d ifica d o re s ref y out d e lo s p a rá m e t ro s d e u n m é t o d o t a m b ié n fo rm a n p a rt e d e lo


q u e s e co n o ce co m o s ig n a t u ra d e l m é t o d o , p o r lo q u e e s t a cla s e e s vá lid a :

class Sobrecarga
{
public void f(int x)
{}

public void f(out int x)


{}
}

Nó t e s e q u e e s t a cla s e e s co rre ct a p o rq u e ca d a u n o d e s u s m é t o d o s t ie n e u n a s ig n a t u ra d is t in t a : e l
p a rá m e t ro e s d e e n t ra d a e n e l p rim e ro y d e s a lid a e n e l s e g u n d o .

S in e m b a rg o , h a y u n a re s t ricció n : n o p u e d e o cu rrir q u e la ú n ica d ife re n cia e n t re la s ig n a t u ra d e d o s


m é t o d o s s e a q u e e n u n o u n d e t e rm in a d o p a rá m e t ro lle ve e l m o d ifica d o r ref y e n e l o t ro lle ve e l
m o d ifica d o r out. Po r e je m p lo , n o e s vá lid o :

class SobrecargaInválida
{
public void f(ref int x)
{}

public void f(out int x)

http://www.programacion.com/tutorial.csharp.9.html (6 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

{}
}

Mé t o d o s e x t e rn o s

Un m é t o d o e x t e rn o e s a q u é l cu ya im p le m e n t a ció n n o s e d a e n e l fich e ro fu e n t e e n q u e e s
d e cla ra d o . Es t o s m é t o d o s s e d e cla ra n p re ce d ie n d o s u d e cla ra ció n d e l m o d ifica d o r extern. Co m o s u
có d ig o s e d a e xt e rn a m e n t e , e n e l fu e n t e s e s u s t it u ye n la s lla ve s d o n d e d e b e ría e s crib irs e s u cu e rp o
p o r u n p u n t o y co m a ( ;) , q u e d a n d o u n a s in t a xis d e la fo rm a :

extern <nombreMétodo>(<parámetros>);

La fo rm a e n q u e s e a s o cie e l có d ig o e xt e rn o a l m é t o d o n o e s t á d e fin id a e n la e s p e cifica ció n d e C#


s in o q u e d e p e n d e d e la im p le m e n t a ció n q u e s e h a g a d e l le n g u a je . El ú n ico re q u is it o e s q u e n o p u e d a
d e fin irs e u n m é t o d o co m o a b s t ra ct o y e xt e rn o a la ve z, p e ro p o r t o d o lo d e m á s p u e d e co m b in a rs e
co n lo s d e m á s m o d ifica d o re s , in clu s o p u d ié n d o s e d e fin ir m é t o d o s virt u a le s e xt e rn o s .

La fo rm a m á s h a b it u a l d e a s o cia r có d ig o e xt e rn o co n s is t e e n p re ce d e r la d e cla ra ció n d e l m é t o d o d e


u n a t rib u t o d e t ip o System.Runtime.InteropServices.DllImport q u e in d iq u e e n cu á l lib re ría
d e e n la ce d in á m ico ( DLL) s e h a im p le m e n t a d o . Es t e a t rib u t o re q u ie re q u e e l m é t o d o e xt e rn o q u e le
s ig a s e a e s t á t ico , y u n e je m p lo d e s u u s o e s :

using System.Runtime.InteropServices; // Aquí está definido DllImport

public class Externo


{
[DllImport("kernel32")]
public static extern void CopyFile(string fuente, string destino);

public static void Main()


{
CopyFile("fuente.dat", "destino.dat");
}
}

El co n ce p t o d e a t rib u t o s e e xp lica d e t a lla d a m e n t e e n e l Te m a 1 4 : At rib u t o s . Po r a h o ra b a s t a s a b e r


q u e lo s a t rib u t o s s e u s a n d e fo rm a n s im ila r a lo s m é t o d o s s ó lo q u e n o e s t á n a s o cia d o s a n in g ú n
o b je t o n i t ip o y s e in d ica n e n t re co rch e t e s ( []) a n t e s d e d e cla ra cio n e s d e e le m e n t o s d e l le n g u a je . En
e l ca s o co n cre t o d e DllImport lo q u e in d ica e l p a rá m e t ro q u e s e le p a s a e s cu á l e s e l fich e ro ( p o r
d e fe ct o s e co n s id e ra q u e s u e xt e n s ió n e s .dll) d o n d e s e e n cu e n t ra la im p le m e n t a ció n d e l m é t o d o
e xt e rn o a co n t in u a ció n d e fin id o .

Lo q u e e l có d ig o d e l e je m p lo a n t e rio r h a ce e s s im p le m e n t e d e fin ir u n m é t o d o d e n o m b re
CopyFile() cu yo có d ig o s e co rre s p o n d a co n e l d e la fu n ció n CopyFile() d e l fich e ro ke rn e l3 2 . d ll
d e l API Win32. Es t e m é t o d o e s lla m a d o e n Main() p a ra co p ia r e l fich e ro d e n o m b re fu e n t e . d a t e n
o t ro d e n o m b re d e s t in o . d a t . Nó t e s e q u e d a d o q u e CopyFile() s e h a d e cla ra d o co m o static y s e
le lla m a d e s d e la m is m a cla s e d o n d e s e h a d e cla ra d o , n o e s n e ce s a rio p re ce d e rlo d e la n o t a ció n
<nombreClase>. p a ra lla m a rlo .

Co m o s e ve , la u t ilid a d p rin cip a l d e lo s m é t o d o s e xt e rn o s e s p e rm it ir h a ce r lla m a d a s a c ó d ig o


n a t iv o d e s d e có d ig o g e s t io n a d o , lo q u e p u e d e s e r ú t il p o r ra zo n e s d e e ficie n cia o p a ra re u t iliza r
có d ig o a n t ig u a m e n t e e s crit o p e ro re d u ce la p o rt a b ilid a d d e la a p lica ció n .

http://www.programacion.com/tutorial.csharp.9.html (7 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

Co n s t ru c t o re s

Co n c e p t o d e c o n s t ru c t o re s

Lo s c o n s t ru c t o re s d e u n t ip o d e d a t o s s o n m é t o d o s e s p e cia le s q u e s e d e fin e n co m o m ie m b ro s d e
é s t e y q u e co n t ie n e n có d ig o a e je cu t a r ca d a ve z q u e s e cre e u n o b je t o d e e s e t ip o . És t e có d ig o s u e le
u s a rs e p a ra la b o re s d e in icia liza ció n d e lo s ca m p o s d e l o b je t o a cre a r, s o b re t o d o cu a n d o e l va lo r d e
é s t o s n o e s co n s t a n t e o in clu ye a ccio n e s m á s a llá d e u n a a s ig n a ció n d e va lo r ( a p e rt u ra s d e fich e ro s ,
a cce s o s a re d e s , e t c. )

Ha y q u e t e n e r e n cu e n t a q u e la e je cu ció n d e l co n s t ru ct o r s ie m p re s e re a liza d e s p u é s d e h a b e rs e
in icia liza d o t o d o s lo s ca m p o s d e l o b je t o , ya s e a co n lo s va lo re s in icia le s q u e s e h u b ie s e n e s p e cifica d o
e n s u d e fin ició n o d e já n d o lo s co n e l va lo r p o r d e fe ct o d e s u t ip o .

Ap a rt e d e s u e s p e cia l s in t a xis d e d e fin ició n , lo s co n s t ru ct o re s y lo s m é t o d o s n o rm a le s t ie n e n u n a


d ife re n cia m u y im p o rt a n t e : lo s c o n s t ru c t o re s n o s e h e re d a n .

D e fin ic ió n d e c o n s t ru c t o re s

La s in t a xis b á s ica d e d e fin ició n d e co n s t ru ct o re s co n s is t e e n d e fin irlo s co m o cu a lq u ie r o t ro m é t o d o


p e ro d á n d o le s e l m is m o n o m b re q u e e l t ip o d e d a t o a l q u e p e rt e n e ce n y n o in d ica n d o e l t ip o d e va lo r
d e re t o rn o d e b id o a q u e n u n ca p u e d e n d e vo lve r n a d a . Es d e cir, s e u s a la s in t a xis :

<modificadores> <nombreTipo>(<parámetros>)
{
<código>
}

Un co n s t ru ct o r n u n ca p u e d e d e vo lve r n in g ú n t ip o d e o b je t o p o rq u e , co m o ya s e h a vis t o , s ó lo s e u s a
ju n t o a l o p e ra d o r new, q u e d e vu e lve u n a re fe re n cia a l o b je t o re cié n cre a d o . Po r e llo , e s a b s u rd o q u e
d e vu e lva a lg ú n va lo r ya q u e n u n ca p o d ría s e r ca p t u ra d o e n t a n t o q u e new n u n ca lo d e vo lve ría . Po r
e s t a ra zó n e l co m p ila d o r co n s id e ra e rró n e o in d ica r a lg ú n t ip o d e re t o rn o e n s u d e fin ició n , in clu s o
a u n q u e s e in d iq u e void.

Lla m a d a a l c o n s t ru c t o r

Al co n s t ru ct o r d e u n a cla s e s e le lla m a e n e l m o m e n t o e n q u e s e cre a a lg ú n o b je t o d e la m is m a


u s a n d o e l o p e ra d o r n e w . De h e ch o , la fo rm a d e u s o d e e s t e o p e ra d o r e s :

new <llamadaConstructor>

Po r e je m p lo , e l s ig u ie n t e p ro g ra m a d e m u e s t ra có m o a l cre a rs e u n o b je t o s e e je cu t a n la s
in s t ru ccio n e s d e s u co n s t ru ct o r:

class Prueba
{
Prueba(int x)
{
System.Console.Write("Creado objeto Prueba con x={0}",x);
}

http://www.programacion.com/tutorial.csharp.9.html (8 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

public static void Main()


{
Prueba p = new Prueba(5);
}
}

La s a lid a p o r p a n t a lla d e e s t e p ro g ra m a d e m u e s t ra q u e s e h a lla m a d o a l co n s t ru ct o r d e l o b je t o d e


cla s e Prueba cre a d o e n Main(), p u e s e s :

Creado objeto Prueba con x=5;

Lla m a d a s e n t re c o n s t ru c t o re s

Al ig u a l q u e o cu rre co n cu a lq u ie r o t ro m é t o d o , t a m b ié n e s p o s ib le s o b re ca rg a r lo s co n s t ru ct o re s . Es
d e cir, s e p u e d e n d e fin ir va rio s co n s t ru ct o re s s ie m p re y cu a n d o e s t o s t o m e n d ife re n t e s n ú m e ro s o
t ip o s d e p a rá m e t ro s . Ad e m á s , d e s d e e l có d ig o d e u n co n s t ru ct o r p u e d e lla m a rs e a o t ro s
co n s t ru ct o re s d e l m is m o t ip o d e d a t o a n t e s d e e je cu t a r la s in s t ru ccio n e s d e l cu e rp o d e l p rim e ro . Pa ra
e llo s e a ñ a d e u n in ic ia liz a d o r t h is a l co n s t ru ct o r, q u e e s e s t ru ct u ra q u e p re ce d e a la lla ve d e
a p e rt u ra d e s u cu e rp o t a l y co m o s e m u e s t ra e n e l s ig u ie n t e e je m p lo :

class A
{
int total;

A(int valor): this(valor, 2); // (1)


{
}

A(int valor, int peso) // (2)


{
total = valor*peso;
}
}

El this in clu id o h a ce q u e la lla m a d a a l co n s t ru ct o r ( 1) d e la cla s e A p ro vo q u e u n a lla m a d a a l


co n s t ru ct o r ( 2) d e e s a m is m a cla s e e n la q u e s e le p a s e co m o p rim e r p a rá m e t ro e l va lo r
o rig in a lm e n t e p a s a d o a l co n s t ru ct o r ( 1) y co m o s e g u n d o p a rá m e t ro e l va lo r 2 . Es im p o rt a n t e s e ñ a la r
q u e la lla m a d a a l co n s t ru ct o r ( 2) e n ( 1) s e h a ce a n t e s d e e je cu t a r cu a lq u ie r in s t ru cció n d e ( 1)

Nó t e s e q u e la s o b re ca rg a d e co n s t ru ct o re s - y d e cu a lq u ie r m é t o d o e n g e n e ra l- e s u n b u e n m o d o d e
d e fin ir ve rs io n e s m á s co m p a ct a s d e m é t o d o s d e u s o fre cu e n t e e n la s q u e s e t o m e n va lo re s p o r
d e fe ct o p a ra p a rá m e t ro s d e o t ra s ve rs io n e s m e n o s co m p a ct a s d e l m is m o m é t o d o . La im p le m e n t a ció n
d e e s t a s ve rs io n e s co m p a ct a s co n s is t iría e n h a ce r u n a lla m a d a a la ve rs ió n m e n o s co m p a ct a d e l
m é t o d o e n la q u e s e le p a s e n e s o s va lo re s p o r d e fe ct o ( a t ra vé s d e l this e n e l ca s o d e lo s
co n s t ru ct o re s ) y s i a ca s o lu e g o ( y/ o a n t e s , s i n o e s u n co n s t ru ct o r) s e h a g a n la b o re s e s p e cífica s e n e l
cu e rp o d e l m é t o d o co m p a ct o .

De l m is m o m o d o q u e e n la d e fin ició n d e u n co n s t ru ct o r d e u n t ip o d e d a t o s e s p o s ib le lla m a r a o t ro s


co n s t ru ct o re s d e l m is m o t ip o d e d a t o s , t a m b ié n e s p o s ib le h a ce r lla m a d a s a co n s t ru ct o re s d e s u t ip o
p a d re s u s t it u ye n d o e n s u in icia liza d o r la p a la b ra re s e rva d a this p o r base. Po r e je m p lo :

http://www.programacion.com/tutorial.csharp.9.html (9 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

class A
{
int total;

A(int valor, int peso)


{
total = valor*peso;
}
}

class B:A
{
B(int valor):base(valor,2)
{}
}

En a m b o s ca s o s , lo s va lo re s p a s a d o s co m o p a rá m e t ro s e n e l in icia liza d o r n o p u e d e n co n t e n e r
re fe re n cia s a ca m p o s d e l o b je t o q u e s e e s t é cre a n d o , ya q u e s e co n s id e ra q u e u n o b je t o n o e s t á
cre a d o h a s t a q u e n o s e e je cu t e s u co n s t ru ct o r y, p o r t a n t o , a l lla m a r a l in icia liza d o r a ú n n o e s t á
cre a d o . S in e m b a rg o , lo q u e s í p u e d e n in clu ir s o n re fe re n cia s a lo s p a rá m e t ro s co n lo s q u e s e lla m ó
a l co n s t ru ct o r. Po r e je m p lo , s e ría vá lid o h a ce r:

A(int x, int y): this(x+y)


{}

Co n s t ru c t o r p o r d e fe c t o

To d o t ip o d e d a t o s h a d e d is p o n e r d e a l m e n o s u n co n s t ru ct o r. Cu a n d o s e d e fin e u n t ip o s in
e s p e cifica r n in g u n o e l co m p ila d o r co n s id e ra q u e im p lícit a m e n t e s e h a d e fin id o u n o s in cu e rp o n i
p a rá m e t ro s d e la s ig u ie n t e fo rm a :

public <nombreClase>(): base()


{}

En e l ca s o d e q u e e l t ip o s e a u n a cla s e a b s t ra ct a , e n t o n ce s e l co n s t ru ct o r p o r d e fe ct o in t ro d u cid o e s
e l q u e s e m u e s t ra a co n t in u a ció n , ya q u e e l a n t e rio r n o s e ría vá lid o p o rq u e p e rm it iría cre a r o b je t o s
d e la cla s e a la q u e p e rt e n e ce :

protected <nombreClase>(): base()


{}

En e l m o m e n t o e n s e d e fin a e xp lícit a m e n t e a lg ú n co n s t ru ct o r e l co m p ila d o r d e ja rá d e in t ro d u cir


im p lícit a m e n t e e l a n t e rio r. Ha y q u e t e n e r e s p e cia l cu id a d o co n la lla m a d a q u e e s t e co n s t ru ct o r p o r
d e fe ct o re a liza e n s u in icia liza d o r, p u e s p u e d e n p ro d u cirs e e rro re s co m o e l d e l s ig u ie n t e e je m p lo :

class A
{
public A(int x)
{}
}

class B:A

http://www.programacion.com/tutorial.csharp.9.html (10 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

{
public static void Main()
{
B b = new B(); // Error: No hay constructor base
}
}

En e s t e ca s o , la cre a ció n d e l o b je t o d e cla s e B e n Main() n o e s p o s ib le d e b id o a q u e e l co n s t ru ct o r


q u e p o r d e fe ct o e l co m p ila d o r cre a p a ra la cla s e B lla m a a l co n s t ru ct o r s in p a rá m e t ro s d e s u cla s e
b a s e A, p e ro A ca re ce d e d ich o co n s t ru ct o r p o rq u e n o s e le h a d e fin id o e xp lícit a m e n t e n in g u n o co n
e s a s ca ra ct e rís t ica s p e ro s e le h a d e fin id o o t ro q u e h a h e ch o q u e e l co m p ila d o r n o le d e fin a
im p lícit a m e n t e e l p rim e ro .

Ot ro e rro r q u e p o d ría d a rs e co n s is t iría e n q u e a u n q u e e l t ip o p a d re t u vie s e u n co n s t ru ct o r s in


p a rá m e t ro s , é s t e fu e s e p riva d o y p o r t a n t o in a cce s ib le p a ra e l t ip o h ijo .

Ta m b ié n e s im p o rt a n t e s e ñ a la r q u e a ú n e n e l ca s o d e q u e d e fin a m o s n u e s t ra s p ro p io s co n s t ru ct o re s ,
s i n o e s p e cifica m o s u n in icia liza d o r e l co m p ila d o r in t ro d u cirá p o r n o s o t ro s u n o d e la fo rm a :base()
Po r t a n t o , e n e s t o s ca s o s t a m b ié n h a y q u e a s e g u ra rs e d e q u e e l t ip o d o n d e s e h a ya d e fin id o e l
co n s t ru ct o r h e re d e d e o t ro q u e t e n g a u n co n s t ru ct o r s in p a rá m e t ro s n o p riva d o .

Lla m a d a s p o lim ó rfic a s e n c o n s t ru c t o re s

Es co n ve n ie n t e e vit a r e n la m e d id a d e lo p o s ib le la re a liza ció n d e lla m a d a s a m é t o d o s virt u a le s


d e n t ro d e lo s co n s t ru ct o re s , ya q u e e llo p u e d e p ro vo ca r e rro re s m u y d ifícile s d e d e t e ct a r d e b id o a
q u e s e e je cu t e n m é t o d o s cu a n d o la p a rt e d e l o b je t o q u e m a n ip u la n a ú n n o s e h a s id o in icia liza d o . Un
e je m p lo d e e s t o e s e l s ig u ie n t e :

using System;

public class Base


{
public Base()
{
Console.WriteLine("Constructor de Base");
this.F();
}

public virtual void F()


{
Console.WriteLine("Base.F");
}
}

public class Derivada:Base


{
Derivada()
{
Console.WriteLine("Constructor de Derivada");
}

public override void F()

http://www.programacion.com/tutorial.csharp.9.html (11 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

{
Console.WriteLine("Derivada.F()");
}

public static void Main()


{
Base b = new
Derivada();
}
}

La s a lid a p o r p a n t a lla m o s t ra d a p o r e s t e p ro g ra m a a l e je cu t a rs e e s la s ig u ie n t e :

Constructor de Base
Derivada.F()
Constructor de Derivada

Lo q u e h a o cu rrid o e s lo s ig u ie n t e : Al cre a rs e e l o b je t o Derivada s e h a lla m a d o a s u co n s t ru ct o r s in


p a rá m e t ro s , q u e co m o n o t ie n e in icia liza d o r im p lícit a m e n t e lla m a a l co n s t ru ct o r s in p a rá m e t ro s d e s u
cla s e b a s e . El co n s t ru ct o r d e Ba s e re a liza u n a lla m a d a a l m é t o d o virt u a l F(), y co m o e l ve rd a d e ro
t ip o d e l o b je t o q u e s e e s t á co n t ru ye n d o e s Derivada, e n t o n ce s ve rs ió n d e l m é t o d o virt u a l e je cu t a d a
e s la re d e fin ició n d e l m is m o in clu id a e n d ich a cla s e . Po r ú lt im o , s e t e rm in a lla m a n d o a l co n s t ru ct o r d e
Derivada y fin a liza la co n s t ru cció n d e l o b je t o .

Nó t e s e q u e s e h a e je cu t a d o e l m é t o d o F() d e Derivada a n t e s q u e e l có d ig o d e l co n s t ru ct o r d e
d ich a cla s e , p o r lo q u e s i e s e m é t o d o m a n ip u la s e ca m p o s d e fin id o s e n De riva d a q u e s e in icia liza s e n a
t ra vé s d e co n s t ru ct o r, s e h a b ría a cce d id o a e llo s a n t e s d e in icia liza rlo s y e llo s e g u ra m e n t e p ro vo ca ría
e rro re s d e ca u s a s d ifícile s d e a ve rig u a r.

Co n s t ru c t o r d e t ip o

To d o t ip o p u e d e t e n e r o p cio n a lm e n t e u n c o n s t ru c t o r d e t ip o , q u e e s u n m é t o d o e s p e cia l q u e
fu n cio n a d e fo rm a s im ila r a lo s co n s t ru ct o re s o rd in a rio s s ó lo q u e p a ra lo q u e s e u s a e s p a ra in icia liza r
lo s ca m p o s static d e l t ip o d o n d e s e h a d e fin id o .

Ca d a t ip o d e d a t o s ó lo p u e d e t e n e r u n co n s t ru ct o r d e t ip o . És t e co n s t ru ct o r e s lla m a d o
a u t o m á t ica m e n t e p o r e l co m p ila d o r la p rim e ra ve z q u e s e a cce d e a l t ip o , ya s e a p a ra cre a r o b je t o s
d e l m is m o o p a ra a cce d e r a s u s ca m p o s e s t á t ico s . Es t a lla m a d a s e h a ce ju s t o d e s p u é s d e in icia liza r
lo s ca m p o s e s t á t ico s d e l t ip o co n lo s va lo re s in icia le s e s p e cifica d o s a l d e fin irlo s ( o , e n s u a u s e n cia ,
co n lo s va lo re s p o r d e fe ct o d e s u s t ip o s d e d a t o ) , p o r lo q u e e l p ro g ra m a d o r n o t ie n e fo rm a d e
co n t ro la r la fo rm a e n q u e s e le lla m a y, p o r t a n t o , n o p u e d e p a s a rle p a rá m e t ro s q u e co n d icio n e n s u
e je cu ció n .

Co m o ca d a t ip o s ó lo p u e d e t e n e r u n co n s t ru ct o r d e t ip o n o t ie n e s e n t id o p o d e rs e u s a r this e n s u
in icia liza d o r p a ra lla m a r a o t ro . Y a d e m á s , t a m p o co t ie n e s e n t id o u s a r base d e b id o a q u e é s t e
s ie m p re h a rá re fe re n cia a l co n s t ru ct o r d e t ip o s in p a rá m e t ro s d e s u cla s e b a s e . O s e a , u n
c o n s t ru c t o r d e t ip o n o p u e d e t e n e r in ic ia liz a d o r.

Ad e m á s , n o t ie n e s e n t id o d a rle m o d ifica d o re s d e a cce s o ya q u e e l p ro g ra m a d o r n u n ca lo p o d rá


lla m a r s in o q u e s ó lo s e rá lla m a d o a u t o m á t ica m e n t e y s ó lo a l a cce d e rs e a l t ip o p o r p rim e ra ve z. Co m o
e s a b s u rd o , e l co m p ila d o r co n s id e ra u n e rro r d á rs e lo s .

http://www.programacion.com/tutorial.csharp.9.html (12 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

La fo rm a e n q u e s e d e fin e e l co n s t ru ct o r d e t ip o e s s im ila r a la d e lo s co n s t ru ct o re s n o rm a le s , s ó lo
q u e a h o ra la d e fin ició n h a d e ir p re fija d a d e l m o d ifica d o r static y n o p u e d e co n t a r co n p a rá m e t ro s
n i in icia liza d o r. O s e a , s e d e fin e d e la s ig u ie n t e m a n e ra :

static <nombreTipo>()
{
<código>
}

En la e s p e cificica ció n d e C# n o s e h a re co g id o cu á l h a d e s e r e l o rd e n e xa ct o d e la s lla m a d a s a lo s


co n s t ru ct o re s d e t ip o s cu a n d o s e co m b in a n co n h e re n cia , a u n q u e lo q u e s í s e in d ica e s q u e s e h a d e
a s e g u ra r d e q u e n o s e a cce d e a u n ca m p o e s t á t ico s in h a b e rs e e je cu t a d o a n t e s s u co n s t ru ct o r d e
t ip o . To d o e s t o p u e d e ve rs e m á s cla ro co n u n e je m p lo :

using System;

class A
{
public static X;

static A()
{
Console.WriteLine("Constructor de A");
X=1;
}
}

class B:A
{
static B()
{
Console.WriteLine("Constructor de B");
X=2;
}

public static void Main()


{
B b = new B();
Console.WriteLine(B.X);
}
}

La s a lid a q u e m u e s t ra p o r p a n t a lla la e je cu ció n d e e s t e p ro g ra m a e s la s ig u ie n t e :

Inicializada clase B
Inicializada clase A
2

En p rin cip io la s a lid a d e e s t e p ro g ra m a p u e d e re s u lt a r co n fu s a d e b id o a q u e lo s p rim e ro s d o s


m e n s a je s p a re ce n d a r la s e n s a ció n d e q u e la cre a ció n d e l o b je t o b p ro vo có q u e s e e je cu t a s e e l
co n s t ru ct o r d e la cla s e h ija a n t e s q u e a l d e la cla s e p a d re , p e ro e l ú lt im o m e n s a je s e co rre s p o n d e co n
u n a e je cu ció n e n e l o rd e n o p u e s t o . Pu e s b ie n , lo q u e h a o cu rrid o e s lo s ig u ie n t e : co m o e l o rd e n d e

http://www.programacion.com/tutorial.csharp.9.html (13 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

lla m a d a a co n s t ru ct o re s d e t ip o n o e s t á e s t a b le cid o , e l co m p ila d o r d e Micro s o ft h a lla m a d o a n t e s a l


d e la cla s e h ija y p o r e llo e l p rim e r m e n s a je m o s t ra d o e s Inicializada clase B. S in e m b a rg o ,
cu a n d o e n e s t e co n s t ru ct o r s e va a a cce d e r a l ca m p o X s e d e t e ct a q u e la cla s e d o n d e s e d e fin ió a ú n
n o e s t á in icia liza d a y e n t o n ce s s e lla m a a s u co n s t ru ct o r d e t ip o , lo q u e h a ce q u e s e m u e s t re e l
m e n s a je Inicializada clase A. Tra s e s t a lla m a d a s e m a ch a ca e l va lo r q u e e l co n s t ru ct o r d e A
d io a X ( va lo r 1 ) p o r e l va lo r q u e e l co n s t ru ct o r d e B le d a ( va lo r 2 ) Fin a lm e n t e , e l ú lt im o
WriteLine() m u e s t ra u n 2, q u e e s e l ú lt im o va lo r e s crit o e n X.

D e s t ru c t o re s

Al ig u a l q u e e s p o s ib le d e fin ir m é t o d o s co n s t ru ct o re s q u e in clu ya n có d ig o q u e g e s t io n e la cre a ció n d e


o b je t o s d e u n t ip o d e d a t o , t a m b ié n e s p o s ib le d e fin ir u n d e s t ru c t o r q u e g e s t io n e có m o s e
d e s t ru ye n lo s o b je t o s d e e s e t ip o d e d a t o . Es t e m é t o d o s u e le s e r ú t il p a ra lib e ra r re cu rs o s t a le s co m o
lo s fich e ro s o la s co n e xio n e s d e re d e s a b ie rt a s q u e e l o b je t o a d e s t ru ir e s t u vie s e a ca p a ra n d o e n e l
m o m e n t o e n q u e s e fu e s e a d e s t ru ir.

La d e s t ru cció n d e u n o b je t o e s re a liza d a p o r e l re co le ct o r d e b a s u ra cu a n d o re a liza u n a re co le cció n


d e b a s u ra y d e t e ct a q u e n o e xis t e n re fe re n cia s a e s e o b je t o n i e n p ila , n i e n re g is t ro s n i d e s d e o t ro s
o b je t o s s í re fe re n cia d o s . La s re co le ccio n e s s e in icia n a u t o m á t ica m e n t e cu a n d o e l re co le ct o r d e t e ct a
q u e q u e d a p o ca m e m o ria lib re o q u e s e va a fin a liza r la e je cu ció n d e la a p lica ció n , a u n q u e t a m b ié n
p u e d e fo rza rs e lla m a n d o a l m é t o d o Collect() d e la cla s e System.GC

La s in t a xis q u e s e u s a p a ra d e fin ir u n d e s t ru ct o r e s la s ig u ie n t e :

~<nombreTipo>()
{
<código>
}

Tra s la e je cu ció n d e l d e s t ru ct o r d e u n o b je t o d e u n d e t e rm in a d o t ip o s ie m p re s e lla m a a l d e s t ru ct o r


d e s u t ip o p a d re , fo rm á n d o s e a s í u n a ca d e n a d e lla m a d a s a d e s t ru ct o re s q u e a ca b a a l lle g a rs e a l
d e s t ru ct o r d e object. És t e ú lt im o d e s t ru ct o r n o co n t ie n e có d ig o a lg u n o , y d a d o q u e object n o
t ie n e p a d re , t a m p o co lla m a a n in g ú n o t ro d e s t ru ct o r.

Lo s d e s t ru ct o re s n o s e h e re d a n . S in e m b a rg o , p a ra a s e g u ra r q u e la ca d e n a d e lla m a d a s a
d e s t ru ct o re s fu n cio n e co rre ct a m e n t e s i n o in clu im o s n in g u n a d e fin ició n d e d e s t ru ct o r e n u n t ip o , e l
co m p ila d o r in t ro d u cirá e n e s o s ca s o s u n a p o r n o s o t ro s d e la s ig u ie n t e fo rm a :

~<nombreTipo>()

{}

El s ig u ie n t e e je m p lo m u e s t ra co m o s e d e fin e n d e s t ru ct o re s y có m o fu n cio n a la ca d e n a d e lla m a d a a


d e s t ru ct o re s :

using System;

class A
{
~A()
{
Console.WriteLine("Destruido objeto de clase A");

http://www.programacion.com/tutorial.csharp.9.html (14 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

}
}

class B:A
{
~B()
{
Console.WriteLine("Destruido objeto de clase B");
}
public static void Main()
{
new B();
}
}

El có d ig o d e l m é t o d o Main() d e e s t e p ro g ra m a cre a u n o b je t o d e cla s e B p e ro n o a lm a ce n a n in g u n a


re fe re n cia a l m is m o . Lu e g o fin a liza la e je cu ció n d e l p ro g ra m a , lo q u e p ro vo ca la a ct u a ció n d e l
re co le ct o r d e b a s u ra y la d e s t ru cció n d e l o b je t o cre a d o lla m a n d o a n t e s a s u d e s t ru ct o r. La s a lid a q u e
o fre ce p o r p a n t a lla e l p ro g ra m a d e m u e s t ra q u e t ra s lla m a r a l d e s t ru ct o r d e B s e lla m a a l d e s u cla s e
p a d re , ya q u e e s :

Destruido objeto de clase B


Destruido objeto de clase A

Nó t e s e q u e a u n q u e n o s e h a ya g u a rd a d o n in g u n a re fe re n cia a l o b je t o d e t ip o B cre a d o y p o r t a n t o
s e a in n a ce s ib le p a ra e l p ro g ra m a d o r, a l re co le ct o r d e b a s u ra n o le p a s a lo m is m o y s ie m p re t ie n e
a cce s o a lo s o b je t o s , a u n q u e s e a n in ú t ile s p a ra e l p ro g ra m a d o r.

Es im p o rt a n t e re ca lca r q u e n o e s vá lid o in clu ir n in g ú n m o d ifica d o r e n la d e fin ició n d e u n d e s t ru ct o r,


n i s iq u ie ra m o d ifica d o re s d e a cce s o , ya q u e co m o n u n ca s e le p u e d e lla m a r e xp lícit a m e n t e n o t ie n e
n in g ú n n ive l d e a cce s o p a ra e l p ro g ra m a d o r. S in e m b a rg o , e llo n o im p lica q u e cu a n d o s e le s lla m e n o
s e t e n g a e n cu e n t a e l ve rd a d e ro t ip o d e lo s o b je t o s a d e s t ru ir, co m o d e m u e s t ra e l s ig u ie n t e e je m p lo :

using System;

public class Base


{
public virtual void F()
{
Console.WriteLine("Base.F");
}

~Base()
{
Console.WriteLine("Destructor de Base");
this.F();
}
}

public class Derivada:Base


{
~Derivada()

http://www.programacion.com/tutorial.csharp.9.html (15 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

{
Console.WriteLine("Destructor de Derivada");
}

public override void F()


{
Console.WriteLine("Derivada.F()");
}

public static void Main()


{
Base b = new Derivada();
}
}

La s a lid a m o s t ra d a q u e m u e s t ra p o r p a n t a lla e s t e p ro g ra m a a l e je cu t a rlo e s :

Destructor de Derivada
Destructor de Base
Derivada.F()

Co m o s e ve , a u n q u e e l o b je t o cre a d o s e a lm a ce n e e n u n a va ria b le d e t ip o Base, s u ve rd a d e ro t ip o


e s Derivada y p o r e llo s e lla m a a l d e s t ru ct o r d e e s t a cla s e a l d e s t ru irlo . Tra s e je cu t a rs e d ich o
co n t ru ct o r s e lla m a a l co n s t ru ct o r d e s u cla s e p a d re s ig u ié n d o s e la ca d e n a d e lla m a d a s a
d e s t ru ct o re s . En e s t e co n s t ru ct o r p a d re h a y u n a lla m a d a a l m é t o d o virt u a l F(), q u e co m o
n u e va m e n t e e l o b je t o q u e s e e s t á d e s t ru ye n d o e s d e t ip o Derivada, la ve rs ió n d e F() a la q u e s e
lla m a rá e s a la d e la d ich a cla s e .

Nó t e s e q u e u n a lla m a d a a u n m é t o d o virt u a l d e n t ro d e u n d e s t ru ct o r co m o la q u e s e h a ce e n e l
e je m p lo a n t e rio r p u e d e d a r lu g a r a e rro re s d ifícile s d e d e t e ct a r, p u e s cu a n d o s e lla m a a l m é t o d o
virt u a l ya s e h a d e s t ru id o la p a rt e d e l o b je t o co rre s p o n d ie n t e a l t ip o d o n d e s e d e fin ió e l m é t o d o
e je cu t a d o . As í, e n e l e je m p lo a n t e rio r s e h a e je cu t a d o Derivada.F() t ra s Derivada.~F(), p o r lo
q u e s i e n Derivada.F() s e u s a s e a lg ú n ca m p o d e s t ru id o e n Derivada.~F() p o d ría n p ro d u cirs e
e rro re s d ifícile s d e d e t e ct a r.

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.9.html (16 de 16) [20/10/2002 18:21:35]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 9 : Pro p ie d a d e s
❍ Co n ce p t o d e p ro p ie d a d
❍ De fin ició n d e p ro p ie d a d e s
❍ Acce s o a p ro p ie d a d e s
❍ Im p le m e n t a ció n in t e rn a d e p ro p ie d a d e s

Te m a 9 : P ro p ie d a d e s

Co n c e p t o d e p ro p ie d a d

Un a p ro p ie d a d e s u n a m e zcla e n t re e l co n ce p t o d e ca m p o y e l co n ce p t o d e m é t o d o . Ext e rn a m e n t e
e s a cce d id a co m o s i d e u n ca m p o n o rm a l s e t ra t a s e , p e ro in t e rn a m e n t e e s p o s ib le a s o cia r có d ig o a
e je cu t a r e n ca d a a s ig n a ció n o le ct u ra d e s u va lo r. És t e có d ig o p u e d e u s a rs e p a ra co m p ro b a r q u e n o
s e a s ig n e n va lo re s in vá lid o s , p a ra ca lcu la r s u va lo r s ó lo a l s o licit a r s u le ct u ra , e t c.

Un a p ro p ie d a d n o a lm a ce n a d a t o s , s in o s ó lo s e u t iliza co m o s i lo s a lm a ce n a s e . En la p rá ct ica lo q u e
s e s u e le h a ce r e s crib ir co m o có d ig o a e je cu t a r cu a n d o s e le a s ig n e u n va lo r, có d ig o q u e co n t ro le
q u e e s e va lo r s e a co rre ct o y q u e lo a lm a ce n e e n u n ca m p o p riva d o s i lo e s ; y co m o có d ig o a
e je cu t a r cu a n d o s e le a s u va lo r, có d ig o q u e d e vu e lva e l va lo r a lm a ce n a d o e n e s e ca m p o p ú b lico . As í
s e s im u la q u e s e t ie n e u n ca m p o p ú b lico s in lo s in co n ve n ie n t e s q u e e s t o s p re s e n t a n p o r n o p o d e rs e
co n t ro la r e l a cce s o a e llo s .

D e fin ic ió n d e p ro p ie d a d e s

Pa ra d e fin ir u n a p ro p ie d a d s e u s a la s ig u ie n t e s in t a xis :

< tipoPropiedad> <nombrePropiedad>


{
set
{

http://www.programacion.com/tutorial.csharp.10.html (1 de 4) [20/10/2002 18:21:40]


Programación en castellano. El lenguaje de programación C#

<códigoEscritura>
}

get
{
<códigoLectura>
}
}

Un a p ro p ie d a d a s í d e fin id a s e ría a cce d id a co m o s i d e u n ca m p o d e t ip o <tipoPropiedad> s e


t ra t a s e , p e ro e n ca d a le ct u ra d e s u va lo r s e e je cu t a ría e l <códigoLectura> y e n ca d a e s crit u ra d e
u n va lo r e n e lla s e e je cu t a ría <códigoEscritura>

Al e s crib ir lo s b lo q u e s d e có d ig o get y set h a y q u e t e n e r e n cu e n t a q u e d e n t ro d e l có d ig o set s e


p u e d e h a ce r re fe re n cia a l va lo r q u e s e s o licit a a s ig n a r a t ra vé s d e u n p a rá m e t ro e s p e cia l d e l m is m o
t ip o d e d a t o q u e la p ro p ie d a d lla m a d o value ( lu e g o n o s o t ro s n o p o d e m o s d e fin ir u n o co n e s e
n o m b re e n <códigoEscritura>) ; y q u e d e n t ro d e l có d ig o get s e h a d e d e vo lve r s ie m p re u n
o b je t o d e l t ip o d e d a t o d e la p ro p ie d a d .

En re a lid a d e l o rd e n e n q u e a p a re zca n lo s b lo q u e s d e có d ig o set y get e s irre le va n t e . Ad e m á s , e s


p o s ib le d e fin ir p ro p ie d a d e s q u e s ó lo t e n g a n e l b lo q u e get ( p ro p ie d a d e s d e s ó lo le c t u ra ) o q u e
s ó lo t e n g a n e l b lo q u e set ( p ro p ie d a d e s d e s ó lo e s c rit u ra ) Lo q u e n o e s vá lid o e s d e fin ir
p ro p ie d a d e s q u e n o in clu ya n n in g u n o d e lo s d o s b lo q u e s .

La s p ro p ie d a d e s p a rt icip a n d e l m e ca n is m o d e p o lim o rfis m o ig u a l q u e lo s m é t o d o s , s ie n d o in clu s o


p o s ib le d e fin ir p ro p ie d a d e s cu yo s b lo q u e s d e có d ig o get o set s e a n a b s t ra ct o s . Es t o s e h a ría
p re fija n d o e l b lo q u e a p ro p ia d o co n u n m o d ifica d o r abstract y s u s t it u ye n d o la d e fin ició n d e s u
có d ig o p o r u n p u n t o y co m a . Po r e je m p lo :

using System;

abstract class A
{
public abstract int PropiedadEjemplo
{
set;
get;
}
}

class B:A
{
private int valor;

public override int PropiedadEjemplo


{
get
{
Console.WriteLine("Leído {0} de PropiedadEjemplo", valor);
return valor;
}

http://www.programacion.com/tutorial.csharp.10.html (2 de 4) [20/10/2002 18:21:40]


Programación en castellano. El lenguaje de programación C#

set
{
valor = value;
Console.WriteLine("Escrito {0} en PropiedadEjemplo", valor);
}
}
}

En e s t e e je m p lo s e ve có m o s e d e fin e n y re d e fin e n p ro p ie d a d e s a b s t ra ct a s . Al ig u a l q u e abstract


y override, t a m b ié n e s p o s ib le u s a r cu a lq u ie ra d e lo s m o d ifica d o re s re la t ivo s a h e re n cia y
p o lim o rfis m o ya vis t o s : virtual, new y sealed.

Nó t e s e q u e a u n q u e e n e l e je m p lo s e h a o p t a d o p o r a s o cia r u n ca m p o p riva d o va lo r a la p ro p ie d a d
Pro p ie d a d Eje m p lo , e n re a lid a d n a d a o b lig a a q u e e llo s e h a g a y e s p o s ib le d e fin ir p ro p ie d a d e s q u e
n o t e n g a ca m p o s a s o cia d o s . Es d e cir, u n a p ro p ie d a d n o s e t ie n e p o rq u é co rre s p o n d e r co n u n
a lm a cé n d e d a t o s .

Ac c e s o a p ro p ie d a d e s

La fo rm a d e a cce d e r a u n a p ro p ie d a d , ya s e a p a ra le ct u ra o e s crit u ra , e s e xa ct a m e n t e la m is m a q u e
la q u e s e u s a ría p a ra a cce d e r a u n ca m p o d e s u m is m o t ip o . Po r e je m p lo , s e p o d ría a cce d e r a la
p ro p ie d a d d e u n o b je t o d e la cla s e B d e l e je m p lo a n t e rio r co n :

B obj = new B();


obj.PropiedadEjemplo++;

El re s u lt a d o q u e p o r p a n t a lla s e m o s t ra ría a l h a ce r u n a a s ig n a ció n co m o la a n t e rio r s e ría :

Leído 0 de PropiedadEjemplo;
Escrito 1 en PropiedadEjemplo;

Nó t e s e q u e e n e l p rim e r m e n s a je s e m u e s t ra q u e e l va lo r le íd o e s 0 p o rq u e lo q u e d e vu e lve e l
b lo q u e get d e la p ro p ie d a d e s e l va lo r p o r d e fe ct o d e l ca m p o p riva d o va lo r, q u e co m o e s d e t ip o
int t ie n e co m o va lo r p o r d e fe ct o 0 .

I m p le m e n t a c ió n in t e rn a d e p ro p ie d a d e s

En re a lid a d la d e fin ició n d e u n a p ro p ie d a d co n la s in t a xis a n t e s vis t a e s co n ve rt id a p o r e l co m p ila d o r


e n la d e fin ició n d e u n p a r d e m é t o d o s d e la s ig u ie n t e fo rm a :

<tipoPropiedad> get_<nombrePropiedad>()
{ // Método en que se convierte el bloque get
<códigoLectura>
}

void set_<nombrePropiedad> (<tipoPropiedad> value)


{ // Método en que se convierte el bloque set
<códigoEscritura>
}

http://www.programacion.com/tutorial.csharp.10.html (3 de 4) [20/10/2002 18:21:40]


Programación en castellano. El lenguaje de programación C#

Es t o s e h a ce p a ra q u e d e s d e le n g u a je s q u e n o s o p o rt e n la s p ro p ie d a d e s s e p u e d a a cce d e r t a m b ié n
a e lla s . S i u n a p ro p ie d a d e s d e s ó lo le ct u ra s ó lo s e g e n e ra rá e l m é t o d o get_X(), y s i e s d e s ó lo
e s crit u ra s ó lo s e g e n e ra rá e l set_X() Ah o ra b ie n , e n cu a lq u ie r ca s o h a y q u e t e n e r cu id a d o co n n o
d e fin ir e n u n m is m o t ip o d e d a t o m é t o d o s co n s ig n a t u ra s co m o e s t a s s i s e va n a g e n e ra r
in t e rn a m e n t e d e b id o a la d e fin ició n d e u n a p ro p ie d a d , ya q u e e llo p ro vo ca ría u n e rro r d e d e fin ició n
m ú lt ip le d e m é t o d o .

Te n ie n d o e n cu e n t a la im p le m e n t a ció n in t e rn a d e la s p ro p ie d a d e s , e s fá cil ve r q u e e l ú lt im o e je m p lo
d e a cce s o a p ro p ie d a d e s e q u iva le n t e a :

B b = new B();
obj.set_PropiedadEjemplo(obj.get_Propiedad_Ejemplo()++);

Co m o s e ve , g ra cia s a la s p ro p ie d a d e s s e t ie n e u n a s in t a xis m u ch o m á s co m p a ct a y cla ra p a ra


a cce d e r a ca m p o s d e m a n e ra co n t ro la d a . S e p o d ría p e n s a r q u e la co n t ra p a rt id a d e e s t o e s q u e e l
t ie m p o d e a cce s o a l ca m p o a u m e n t a co n s id e ra b le m e n t e p o r p e rd e rs e t ie m p o e n h a ce r la s lla m a d a a
m é t o d o s set/ get. Pu e s b ie n , e s t o n o t ie n e p o rq u é s e r a s í ya q u e e l co m p ila d o r d e C# e lim in a
lla m a d a s h a cie n d o in lin in g ( s u s t it u ció n d e la lla m a d a p o r s u cu e rp o ) e n lo s a cce s o s a b lo q u e s
get/ set n o virt u a le s y d e có d ig o s p e q u e ñ o s , q u e s o n lo s m á s h a b it u a le s .

Nó t e s e q u e d e la fo rm a e n q u e s e d e fin e n lo s m é t o d o s g e n e ra d o s p o r e l co m p ila d o r s e p u e d e
d e d u cir e l p o rq u é d e l h e ch o d e q u e e n e l b lo q u e s e t s e p u e d a a cce d e r a t ra vé s d e v a lu e a l va lo r
a s ig n a d o y d e q u e e l o b je t o d e vu e lt o p o r e l có d ig o d e u n b lo q u e g e t t e n g a q u e s e r d e l m is m o t ip o
d e d a t o q u e la p ro p ie d a d a la q u e p e rt e n e ce .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.10.html (4 de 4) [20/10/2002 18:21:40]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 1 0 : In d iza d o re s
❍ Co n ce p t o d e in d iza d o r
❍ De fin ició n d e in d iza d o r
❍ Acce s o a in d iza d o re s
❍ Im p le m e n t a ció n in t e rn a d e in d iza d o re s

Te m a 1 0 : I n d iz a d o re s

Co n c e p t o d e in d iz a d o r

Un in d iz a d o r e s u n a d e fin ició n d e có m o s e p u e d e a p lica r e l o p e ra d o r d e a cce s o a t a b la s ( [ ] ) a lo s o b je t o s d e u n


t ip o d e d a t o . Es t o e s e s p e cia lm e n t e ú t il p a ra h a ce r m á s cla ra la s in t a xis d e a cce s o a e le m e n t o s d e o b je t o s q u e
p u e d a n co n t e n e r co le ccio n e s d e e le m e n t o s , p u e s p e rm it e t ra t a rlo s co m o s i fu e s e n t a b la s n o rm a le s .

Lo s in d iza d o re s p e rm it e n d e fin ir có d ig o a e je cu t a r ca d a ve z q u e s e a cce d a a u n o b je t o d e l t ip o d e l q u e s o n


m ie m b ro s u s a n d o la s in t a xis p ro p ia d e la s t a b la s , ya s e a p a ra le e r o e s crib ir. A d ife re n cia d e la s t a b la s , lo s ín d ice s
q u e s e le s p a s e e n t re co rch e t e s n o t ie n e p o rq u é s e r e n t e ro s , p u d ié n d o s e d e fin ir va rio s in d iza d o re s e n u n m is m o
t ip o s ie m p re y cu a n d o ca d a u n o t o m e u n n ú m e ro o t ip o d e ín d ice s d ife re n t e .

D e fin ic ió n d e in d iz a d o r

A la h o ra d e d e fin ir u n in d iza d o r s e u s a u n a s in t a xis p a re cid a a la d e la s p ro p ie d a d e s :

<tipoIndizador> this[<índices>]
{
set
{
<códigoEscritura>
}
get
{
<códigoLectura>
}
}

La s ú n ica s d ife re n cia s e n t re e s t a s in t a xis y la d e la s p ro p ie d a d e s s o n :

http://www.programacion.com/tutorial.csharp.11.html (1 de 3) [20/10/2002 18:21:42]


Programación en castellano. El lenguaje de programación C#

● El n o m b re d a d o a u n in d iza d o r s ie m p re h a d e s e r t h is , p u e s ca re ce d e s e n t id o p o d e r d a rle
cu a lq u ie ra e n t a n t o q u e a u n in d iza d o r n o s e a cce d e p o r s u n o m b re s in o a p lica n d o e l o p e ra d o r [
] a u n o b je t o . Po r e llo , lo q u e d ife re n cia rá a u n o s in d iza d o re s d e o t ro s s e rá e l n ú m e ro y t ip o d e
s u s <índices>

● En <índices> s e in d ica cu á le s s o n lo s ín d ice s q u e s e p u e d e n u s a r a l a cce d e r a l in d iza d o r. Pa ra


e llo la s in t a xis u s a d a e s ca s i la m is m a q u e la q u e s e u s a p a ra e s p e cifica r lo s p a rá m e t ro s d e u n
m é t o d o , s ó lo q u e n o s e a d m it e la in clu s ió n d e m o d ifica d o re s ref, out o params y q u e s ie m p re
h a d e d e fin irs e a l m e n o s u n p a rá m e t ro . Ob via m e n t e , e l n o m b re q u e s e d é a ca d a ín d ice s e rá e l
n o m b re co n e l q u e lu e g o s e p o d rá a cce d e r a l m is m o e n lo s b lo q u e s set/ get.

● No s e p u e d e n d e fin ir in d iza d o re s e s t á t ico s , s in o s ó lo in d iza d o re s d e o b je t o s .

Po r t o d o lo d e m á s , la s in t a xis d e d e fin ició n d e lo s in d iza d o re s e s la m is m a q u e la d e la s p ro p ie d a d e s : p u e d e n s e r


d e s ó lo le ct u ra o d e s ó lo e s crit u ra , d a ig u a l e l o rd e n e n q u e s e d e fin a n s u s b lo q u e s set/ get, d e n t ro d e l b lo q u e
set s e p u e d e a cce d e r a l va lo r a e s crib ir a t ra vé s d e l p a rá m e t ro e s p e cia l value d e l t ip o d e l in d iza d o r, e l có d ig o d e l
b lo q u e get h a d e d e vo lve r u n o b je t o d e d ich o t ip o , e t c.

A co n t in u a ció n s e m u e s t ra u n e je m p lo d e d e fin ició n d e u n a cla s e q u e co n s t a d e d o s in d iza d o re s : a m b o s p e rm it e n


a lm a ce n a r e le m e n t o s d e t ip o e n t e ro , p e ro u n o t o m a co m o ín d ice u n e n t e ro y e l o t ro t o m a d o s ca d e n a s :

using System;

public class A
{
public int this[int índice]
{
set
{
Console.WriteLine("Escrito {0} en posición {1}", value, índice);
}
get
{
Console.WriteLine("Leído 1 de posición {0}", índice);
return 1;
}
}

public int this[string cad1, string cad2]


{
set
{
Console.WriteLine("Escrito {0} en posición ({1},{2})", value, cad1, cad2);
}
get
{
Console.WriteLine("Leído prueba de posición ({0},{1})", cad1, cad2);
return 2;
}
}
}

Ac c e s o a in d iz a d o re s

Pa ra a cce d e r a u n in d iza d o r s e u t iliza e xá ct a m e n t e la m is m a s in t a xis q u e p a ra a cce d e r a u n a t a b la , s ó lo q u e lo s


ín d ice s n o t ie n e n p o rq u é s e r e n t e ro s s in o q u e p u e d e n s e r d e cu a lq u ie r t ip o d e d a t o q u e s e h a ya e s p e cifica d o e n s u
d e fin ició n . Po r e je m p lo , a cce s o s vá lid o s a lo s in d iza d o re s d e u n o b je t o d e la cla s e A d e fin id a e n e l e p íg ra fe a n t e rio r

http://www.programacion.com/tutorial.csharp.11.html (2 de 3) [20/10/2002 18:21:42]


Programación en castellano. El lenguaje de programación C#

son:

A obj = new A();


obj[100] = obj["barco", "coche"];

La e je cu ció n d e la a s ig n a ció n d e e s t e e je m p lo p ro d u cirá e s t a s a lid a p o r p a n t a lla :

Leído prueba de posición (barco, coche)


Escrito 2 en posición 100

I m p le m e n t a c ió n in t e rn a d e in d iz a d o re s

Al ig u a l q u e la s p ro p ie d a d e s , p a ra fa cilit a r la in t e ro p e ra b ilid a d e n t re le n g u a je s lo s in d iza d o re s s o n t a m b ié n


co n ve rt id o s p o r e l co m p ila d o r e n lla m a d a s a m é t o d o s cu ya d e fin ició n s e d e d u ce d e la d e fin ició n d e l in d iza d o r.
Ah o ra lo s m é t o d o s s o n d e la fo rm a :

<tipoIndizador> get_Item(<índices>)
{
<códigoLectura>
}

void set_Item(<índices>, <tipoIndizador> value)


{
<códigoEscritura>
}

Nu e va m e n t e , h a y q u e t e n e r cu id a d o co n la s ig n a t u ra d e lo s m é t o d o s q u e s e d e fin a n e n u n a cla s e ya q u e co m o la
d e a lg u n o co in cid a co n la g e n e ra d a a u t o m á t ica m e n t e p o r e l co m p ila d o r p a ra lo s in d iza d o re s s e p ro d u cirá u n e rro r
d e a m b ig ü e d a d .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.11.html (3 de 3) [20/10/2002 18:21:42]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 1 1 : Re d e fin ició n d e o p e ra d o re s
❍ Co n ce p t o d e re d e fin ició n d e o p e ra d o r
❍ De fin ició n d e re d e fin icio n e s d e o p e ra d o re s
❍ Re d e fin icio n e s d e o p e ra d o re s d e co n ve rs ió n

Te m a 1 1 : Re d e fin ic ió n d e o p e ra d o re s

Co n c e p t o d e re d e fin ic ió n d e o p e ra d o r

Un o p e ra d o r e n C# n o e s m á s q u e u n s ím b o lo fo rm a d o p o r u n o o m á s ca ra ct e re s q u e p e rm it e re a liza r
u n a d e t e rm in a d a o p e ra ció n e n t re u n o o m á s d a t o s y p ro d u ce u n re s u lt a d o . En e l Te m a 4 : As p e ct o s
Lé x ico s ya h e m o s vis t o q u e C# cu e n t a co n u n b u e n n ú m e ro d e o p e ra d o re s q u e p e rm it e n re a liza r co n u n a
s in t a xis cla ra e in t u it iva la s o p e ra cio n e s co m u n e s a la m a yo ría d e le n g u a je s ( a rit m é t ica , ló g ica , e t c) a s í
co m o o t ra s o p e ra cio n e s m á s p a rt icu la re s d e C# ( o p e ra d o r is, o p e ra d o r stackalloc, e t c. )

En C# vie n e p re d e fin id o e l co m p o rt a m ie n t o d e s u s o p e ra d o re s cu a n d o s e a p lica n a cie rt o s t ip o s d e d a t o s .


Po r e je m p lo , s i s e a p lica e l o p e ra d o r + e n t re d o s o b je t o s int d e vu e lve s u s u m a , y s i s e a p lica e n t re d o s
o b je t o s string d e vu e lve s u co n ca t e n a ció n . S in e m b a rg o , t a m b ié n s e p e rm it e q u e e l p ro g ra m a d o r p u e d a
d e fin ir e l s ig n ifica d o la m a yo ría d e e s t o s o p e ra d o re s cu a n d o s e a p liq u e n a o b je t o s d e t ip o s q u e é l h a ya
d e fin id o , y e s t o e s a lo q u e s e le co n o ce co m o re d e fin ic ió n d e o p e ra d o r.

Nó t e s e q u e e n re a lid a d la p o s ib ilid a d d e re d e fin ir u n o p e ra d o r n o a p o rt a n in g u n a n u e va fu n cio n a lid a d a l


le n g u a je y s ó lo s e h a in clu id o e n C# p a ra fa cilit a r la le g ib ilid a d d e l có d ig o . Po r e je m p lo , s i t e n e m o s u n a
cla s e Co m p le jo q u e re p re s e n t a n ú m e ro s co m p le jo s p o d ría m o s d e fin ir u n a fu n ció n Sumar() p a ra s u s
o b je t o s d e m o d o q u e a t ra vé s d e e lla s e p u d ie s e co n s e g u ir la s u m a d e d o s o b je t o s d e e s t a cla s e co m o
m u e s t ra e s t e e je m p lo :

Complejo c1 = new Complejo(3,2); // c1 = 3 + 2i


Complejo c2 = new Complejo(5,2); // c2 = 5 + 2i
Complejo c3 = c1.Sumar(c2); // c3 = 8 + 4i

S in e m b a rg o , e l có d ig o s e ría m u ch o m á s le g ib le e in t u it ivo s i e n ve z d e t e n e rs e q u e u s a r e l m é t o d o
Sumar() s e re d e fin ie s e e l s ig n ifica d o d e l o p e ra d o r + p a ra q u e a l a p lica rlo e n t re o b je t o s Complejo
d e vo lvie s e s u s u m a . Co n e llo , e l có d ig o a n t e rio r q u e d a ría a s í:

http://www.programacion.com/tutorial.csharp.12.html (1 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

Complejo c1 = new Complejo(3,2); // c1 = 3 + 2i


Complejo c2 = new Complejo(5,2); // c2 = 5 + 2i
Complejo c3 = c1 + c2; // c3 = 8 + 4i

És t a e s p re cis a m e n t e la u t ilid a d d e la re d e fin ició n d e o p e ra d o re s : h a ce r m á s cla ro y le g ib le e l có d ig o , n o


h a ce rlo m á s co rt o . Po r t a n t o , cu a n d o s e re d e fin a u n o p e ra d o r e s im p o rt a n t e q u e s e le d é u n s ig n ifica d o
in t u it ivo ya q u e s i n o s e iría co n t ra d e la filo s o fía d e la re d e fin ició n d e o p e ra d o re s . Po r e je m p lo , a u n q u e
s e ría p o s ib le re d e fin ir e l o p e ra d o r * p a ra q u e cu a n d o s e a p lica s e e n t re o b je t o s d e t ip o Complejo d e vu e lva
s u s u m a o im p rim ie s e lo s va lo re s d e s u s o p e ra n d o s e n la ve n t a n a d e co n s o la , s e ría a b s u rd o h a ce rlo ya
q u e m á s q u e cla rifica r e l có d ig o lo q u e h a ría s e ría d ificu lt a r s u co m p re n s ió n .

De t o d a s fo rm a s , s u e le s e r b u e n a id e a q u e ca d a ve z q u e s e re d e fin a u n o p e ra d o r e n u n t ip o d e d a t o
t a m b ié n s e d é u n a d e fin ició n d e u n m é t o d o q u e fu n cio n e d e fo rm a e q u iva le n t e a l o p e ra d o r. As í d e s d e
le n g u a je s q u e n o s o p o rt e n la re d e fin ició n d e o p e ra d o re s t a m b ié n p o d rá re a liza rs e la o p e ra ció n y e l t ip o
s e rá m á s re u t iliza b le .

D e fin ic ió n d e re d e fin ic io n e s d e o p e ra d o re s

S in t a x is g e n e ra l d e re d e fin ic ió n d e o p e ra d o r

La fo rm a e n q u e s e re d e fin e u n o p e ra d o r d e p e n d e d e l t ip o d e o p e ra d o r d e l q u e s e t ra t e , ya q u e n o e s lo
m is m o d e fin ir u n o p e ra d o r u n a rio q u e u n o b in a rio . S in e m b a rg o , co m o re g la g e n e ra l p o d e m o s co n s id e ra r
q u e s e d e fin ie n d o u n m é t o d o p ú b lico y e s t á t ico cu yo n o m b re s e a e l s ím b o lo d e l o p e ra d o r a re d e fin ir y
ve n g a p re ce d id o d e la p a la b ra re s e rva d a operator. Es d e cir, s e s ig u e u n a s in t a xis d e la fo rm a :

public static <tipoDevuelto> operator <símbolo>(<operandos>)


{
<cuerpo>
}

Lo s m o d ifica d o re s public y static p u e d e n p e rm u t a rs e s i s e d e s e a , lo q u e e s im p o rt a n t e e s q u e s ie m p re


a p a re zca n e n t o d a re d e fin ició n d e o p e ra d o r. S e p u e d e re d e fin ir t a n t o o p e ra d o re s u n a rio s co m o b in a rio s , y
e n <operandos> s e h a d e in clu ir t a n t o s p a rá m e t ro s co m o o p e ra n d o s p u e d a t o m a r e l o p e ra d o r a re d e fin ir,
ya q u e ca d a u n o re p re s e n t a rá a u n o d e s u s o p e ra n d o s . Po r ú lt im o , e n <cuerpo> s e h a d e e s crib ir la s
in s t ru ccio n e s a e je cu t a r ca d a ve z q u e s e a p liq u e la o p e ra ció n cu yo o p e ra d o r e s <símbolo> a o p e ra n d o s
d e lo s t ip o s in d ica d o s e n <operandos>

<tipoDevuelto> n o p u e d e s e r v o id , p u e s p o r d e fin ició n t o d a o p e ra ció n t ie n e u n re s u lt a d o , p o r lo q u e


t o d o o p e ra d o r h a d e d e vo lve r a lg o . Ad e m á s , p e rm it irlo co m p lica ría in n e ce s a ria m e n t e e l co m p ila d o r y é s t e
t e n d ría q u e a d m it ir in s t ru ccio n e s p o co in t u it iva s ( co m o a+b; s i e l + e s t u vie s e re d e fin id o co n va lo r d e
re t o rn o void p a ra lo s t ip o s d e a y b)

Ad e m á s , lo s o p e ra d o re s n o p u e d e n re d e fin irs e co n t o t a l lib e rt a d ya q u e e llo d ificu lt a ría in n ce s a ria m e n t e la


le g ib ilid a d d e l có d ig o , p o r lo q u e s e h a n in t ro d u cid o la s s ig u ie n t e s re s t riccio n e s a l re d e fin irlo s :

Al m e n o s u n o d e lo s o p e ra n d o s h a d e s e r d e l m is m o t ip o d e d a t o d e l q u e s e a m ie m b ro la re d e fin ició n d e l
o p e ra d o r. Co m o p u e d e d e d u cirs e , e llo im p lica q u e a u n q u e p u e d a n s o b re ca rg a rs e lo s o p e ra d o re s b in a rio s
n u n ca p o d rá h a ce rs e lo m is m o co n lo s b in a rio s ya q u e s u ú n ico p a rá m e t ro s ó lo p u e d e s e r d e u n ú n ico t ip o
( e l t ip o d e n t ro d e l q u e s e d e fin a ) Ad e m á s , e llo t a m b ié n p ro vo ca q u e n o p u e d e n re d e fin irs e la s
co n ve rs io n e s ya in clu id a s e n la BCL p o rq u e a l m e n o s u n o d e lo s o p e ra n d o s s ie m p re h a b rá d e s e r d e a lg ú n
n u e vo t ip o d e fin id o p o r e l u s u a rio .

No p u e d e n a lt e ra rs e s u s re g la s d e p re ce d e n cia , a s o cia t ivid a d , u b ica ció n y n ú m e ro d e o p e ra n d o s , p u e s s i

http://www.programacion.com/tutorial.csharp.12.html (2 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

ya d e p o r s í e s d ifícil p a ra m u ch o s re co rd a rla s cu a n d o s o n fija s , m u ch o m á s lo s e ría s i p u d ie s e n


m o d ifica rs e s e g ú n lo s t ip o s d e s u s o p e ra n d o s .

No p u e d e n d e fin irs e n u e vo s o p e ra d o re s n i co m b in a cio n e s d e lo s ya e xis t e n t e s co n n u e vo s s ig n ifica d o s ( p o r


e je m p lo ** p a ra re p re s e n t a r e xp o n e n cia ció n ) , p u e s e llo co m p lica ría in n e ce s a ria m e n t e e l co m p ila d o r, e l
le n g u a je y la le g ib ilid a d d e l có d ig o cu a n d o e n re a lid a d e s a lg o q u e p u e d e s im u la rs e d e fin ie n d o m é t o d o s .

No t o d o s lo s o p e ra d o re s in clu id o s e n e l le n g u a je p u e d e n re d e fin irs e , p u e s m u ch o s d e e llo s ( co m o ., new,


=, e t c. ) s o n b á s ico s p a ra e l le n g u a je y s u re d e fin ició n e s in via b le , p o co ú t il o d ificu lt a ría in n e ce s a ria m e n t e
la le g ib ilid a d d e lo s fu e n t e s . Ad e m á s , n o t o d o s lo s re d e fin ib le s s e re d e fin e n u s a n d o la s in t a xis g e n e ra l
h a s t a a h o ra vis t a , a u n q u e e n s u m o m e n t o s e irá n e xp lica n d o cu á le s s o n lo s re d e fin ib le s y cu á le s s o n la s
p e cu lia rid a d e s d e a q u e llo s q u e re q u ie ra n u n a re d e fin ició n e s p e cia l.

A co n t in u a ció n s e m u e s t ra có m o s e re d e fin iría e l s ig n ifica d o d e l o p e ra d o r + p a ra lo s o b je t o s Complejo d e l


e je m p lo a n t e rio r:

class Complejo;
{
public float ParteReal;
public float ParteImaginaria;

public Complejo (float parteReal, float parteImaginaria)


{
this.ParteReal = parteReal;
this.ParteImaginaria = parteImaginaria;
}

public static Complejo operator +(Complejo op1, Complejo op2)


{
Complejo resultado = new Complejo();

resultado.ParteReal = op1.ParteReal + op2.ParteReal;


resultado.ParteImaginaria = op1.ParteImaginaria + op2.ParteImaginaria;
return resultado;
}
}

Es fá cil ve r q u e lo q u e e n e l e je m p lo s e h a re d e fin id o e s e l s ig n ifica d o d e l o p e ra d o r + p a ra q u e cu a n d o s e


a p liq u e e n t re d o s o b je t o s d e cla s e Co m p le jo d e vu e lva u n n u e vo o b je t o Co m p le jo cu ya s p a rt e s re a l e
im a g in a ria s e a la s u m a d e la s d e s u s o p e ra n d o s .

S e co n s id e ra e rró n e o in clu ir la p a la b ra re s e rva d a n e w e n la re d e fin ició n d e u n o p e ra d o r, ya q u e n o


p u e d e n o cu lt a rs e re d e fin icio n e s d e o p e ra d o re s e n t a n t o q u e e s t o s n o s e a p lica n a u s a n d o e l n o m b re d e l
t ip o e n q u e e s t é n d e fin id o s . La s ú n ica s p o s ib le s co in cid e n cia s s e d a ría e n s it u a cio n e s co m o la d e l s ig u ie n t e
e je m p lo :

using System;

class A
{
public static int operator +(A obj1, B obj2)
{
Console.WriteLine("Aplicado + de A");
return 1;
}

http://www.programacion.com/tutorial.csharp.12.html (3 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

class B:A
{
public static int operator +(A obj1, B obj2)
{
Console.WriteLine("Aplicado + de B");
return 1;
}

public static void Main()


{
A o1 = new A();
B o2 = new B();

Console.WriteLine("o1+o2={0}", o1+o2);
}
}

S in e m b a rg o , m á s q u e u n a o cu lt a ció n d e o p e ra d o re s lo q u e s e t ie n e e s u n p ro b le m a d e a m b ig ü e d a d e n la
d e fin ició n d e l o p e ra d o r + e n t re o b je t o s d e t ip o s A y B, d e la q u e s e in fo rm a rá a l co m p ila r ya q u e e l
co m p ila d o r n o s a b rá cu á l ve rs ió n d e l o p e ra d o r d e b e u s a r p a ra t ra d u cir o1+o2 a có d ig o b in a rio .

Re d e fin ic ió n d e o p e ra d o re s u n a rio s

Lo s ú n ico s o p e ra d o re s u n a rio s re d e fin ib le s s o n : !, +, -, ~, ++, --, true y false, y t o d a re d e fin ició n d e


u n o p e ra d o r u n a rio h a d e t o m a r u n ú n ico p a rá m e t ro q u e h a d e s e r d e l m is m o t ip o q u e e l t ip o d e d a t o a l
q u e p e rt e n e zca la re d e fin ició n .

Lo s o p e ra d o re s ++ y -- s ie m p re h a n d e re d e fin irs e d e m a n e ra q u e e l t ip o d e d a t o d e l o b je t o d e vu e lt o s e a
e l m is m o q u e e l t ip o d e d a t o d o n d e s e d e fin e n . Cu a n d o s e u s e n d e fo rm a p re fija s e d e vo lve rá e s e o b je t o ,
y cu a n d o s e u s e n d e fo rm a p o s t ifja e l co m p ila d o r lo q u e h a rá s e rá d e vo lve r e l o b je t o o rig in a l q u e s e le s
p a s ó co m o p a rá m e t ro e n lu g a r d e l in d ica d o e n e l return. Po r e llo e s im p o rt a n t e n o m o d ifica r d ich o
p a rá m e t ro s i e s d e u n t ip o re fe re n cia y q u e re m o s q u e e s t o s o p e ra d o re s t e n g a n s u s ig n ifica d o t ra d icio n a l.
Un e je m p lo d e có m o h a ce rlo e s la s ig u ie n t e re d e fin ició n d e ++ p a ra e l t ip o Co m p le jo :

public static Complejo operator ++ (Complejo op)


{
Complejo resultado = new Complejo(op.ParteReal + 1, op.ParteImaginaria);

return resultado;
}

Nó t e s e q u e s i h u b ié s e m o s re d e fin id o e l ++ d e e s t a o t ra fo rm a :

public static Complejo operator ++ (Complejo op)


{
op.ParteReal++;

return op;
}

e n t o n ce s e l re s u lt a d o d e vu e lt o a l a p licá rs e lo a u n o b je t o s ie m p re s e ría e l m is m o t a n t o s i fu e a p lica d o d e


fo rm a p re fija co m o s i lo fu e d e fo rm a p o s t ifija , ya q u e e n a m b o s ca s o s e l o b je t o d e vu e lt o s e ría e l m is m o .

http://www.programacion.com/tutorial.csharp.12.html (4 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

S in e m b a rg o , e s o n o o cu rriría s i Complejo fu e s e u n a e s t ru ct u ra , ya q u e e n t o n ce s op n o s e ría e l o b je t o


o rig in a l s in o u n a co p ia d e é s t e y lo s ca m b io s q u e s e le h icie s e n e n e l cu e rp o d e la re d e fin ició n d e ++ n o
a fe ct a ría n a l o b je t o o rig in a l, q u e e s e l q u e s e d e vu e lve cu a n d o s e u s a ++ d e m a n e ra p o s t fija .

Re s p e ct o a lo s o p e ra d o re s true y false, e s t o s in d ica n re s p e ct iva m e n t e , cu a n d o s e h a d e co n s id e ra r q u e


u n o b je t o re p re s e n t a e l va lo r ló g ico cie rt o y cu a n d o s e h a d e co n s id e ra r q u e re p re s e n t a e l va lo r ló g ico
fa ls o , p o r lo q u e s u re d e fin icio n e s s ie m p re h a n d e d e vo lve r u n o b je t o d e t ip o bool q u e in d iq u e d ich a
s it u a ció n . Ad e m á s , s i s e re d e fin e u n o d e e s t o s o p e ra d o re s , e n t o n ce s e s o b lig a t o rio re d e fin ir t a m b ié n e l
o t ro , e n t a n t o q u e s ie m p re e s p o s ib le u s a r in d is t in t a m e n t e u n o u o t ro p a ra d e t e rm in a r e l va lo r ló g ico q u e
u n o b je t o d e e s e t ip o re p re s e n t e .

En re a lid a d lo s o p e ra d o re s true y false n o p u e d e n u s a rs e d ire ct a m e n t e e n e l có d ig o fu e n t e , s in o q u e


re d e fin irlo s p a ra u n t ip o d e d a t o e s ú t il p o rq u e p e rm it ir u s a r o b je t o s d e e s e t ip o e n e xp re s io n e s
co n d icio n a le s t a l y co m o s i d e u n va lo r ló g ico s e t ra t a s e . Po r e je m p lo , p o d e m o s re d e fin ir e s t o s o p e ra d o re s
e n e l t ip o Complejo d e m o d o q u e co n s id e re n cie rt o a t o d o co m p le jo d is t in t o d e 0 + 0 i y fa ls o a 0 + 0 i:

public static bool operator true(Complejo op)


{
return (op.ParteReal != 0 || op.ParteImaginaria != 0);
}

public static bool operator false(Complejo op)


{
return (op.ParteReal == 0 && op.ParteImaginaria == 0);
}

Co n e s t a s re d e fin icio n e s , u n có d ig o co m o e l q u e s ig u e m o s t ra ría p o r p a n t a lla e l m e n s a je Es cierto:

Complejo c1 = new Complejo(1, 0); // c1 = 1 + 0i


if (c1)
System.Console.WriteLine("Es cierto");

Re d e fin ic ió n d e o p e ra d o re s b in a rio s

Lo s o p e ra d o re s b in a rio s re d e fin ib le s s o n +, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >= y <= To d a
re d e fin ició n q u e s e h a g a d e e llo s h a d e t o m a r d o s p a rá m e t ro s t a le s q u e a l m e n o s u n o d e e llo s s e a d e l
m is m o t ip o q u e e l t ip o d e d a t o d e l q u e e s m ie m b ro la re d e fin ició n .

Ha y q u e t e n e r e n cu e n t a q u e a q u e llo s d e e s t o s o p e ra d o re s q u e t e n g a n co m p le m e n t a rio s ie m p re h a n d e
re d e fin irs e ju n t o co n é s t e . Es d e cir, s ie m p re q u e s e re d e fin a e n u n t ip o e l o p e ra d o r > t a m b ié n h a d e
re d e fin irs e e n é l e l o p e ra d o r <, s ie m p re q u e s e re d e fin a >= h a d e re d e fin irs e <=, y s ie m p re q u e s e re d e fin a
== h a d e re d e fin irs e !=.

Ta m b ié n h a y q u e s e ñ a la r q u e , co m o p u e d e d e d u cirs e d e la lis t a d e o p e ra d o re s b in a rio s re d e fin ib le s d a d a ,


n o e s p o s ib le re d e fin ir d ire ct a m e n t e n i e l o p e ra d o r d e a s ig n a ció n = n i lo s o p e ra d o re s co m p u e s t o s ( +=, -=,
e t c. ) S in e m b a rg o , e n e l ca s o d e e s t o s ú lt im o s d ich a re d e fin ició n o cu rre d e m a n e ra a u t o m á t ica a l re d e fin ir
s u p a rt e "n o =" Es d e cir, a l re d e fin ir + q u e d a rá re d e fin id o co n s e cu e n t e m e n t e +=, a l re d e fin ir * lo h a rá *=,
e t c.

Po r o t ra p a rt e , t a m b ié n ca b e s e ñ a la r q u e n o e s p o s ib le re d e fin ir d iré ct a m e n t e lo s o p e ra d o re s && y ||.


Es t o s e d e b e a q u e e l co m p ila d o r lo s t ra t a d e u n a m a n e ra e s p e cia l q u e co n s is t e e n e va lu a rlo s
p e re zo s a m e n t e . S in e m b a rg o , e s p o s ib le s im u la r s u re d e fin ició n re d e fin ie n d o lo s o p e ra d o re s u n a rio s true
y false, lo s o p e ra d o re s b in a rio s & y | y t e n ie n d o e n cu e n t a q u e && y || s e e va lú a n a s í:

http://www.programacion.com/tutorial.csharp.12.html (5 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

● &&: S i t e n e m o s u n a e xp re s ió n d e la fo rm a x && y, s e a p lica p rim e ro e l o p e ra d o r fa ls e a


x. S i d e vu e lve fa ls e , e n t o n ce s x && y d e vu e lve e l re s u lt a d o d e e va lu a r x; y s i n o ,
e n t o n ce s d e vu e lve e l re s u lt a d o d e e va lu a r x & y

● ||: S i t e n e m o s u n a e xp re s ió n d e la fo rm a x || y, s e a p lica p rim e ro e l o p e ra d o r true a


x. S i d e vu e lve true, s e d e vu e lve e l re s u lt a d o d e e va lu a r x; y s i n o , s e d e vu e lve e l d e
e va lu a r x | y.

Re d e fin ic io n e s d e o p e ra d o re s d e c o n v e rs ió n

En e l Te m a 4 : As p e ct o s Lé x ico s ya vim o s q u e p a ra co n ve rt ir o b je t o s d e u n t ip o d e d a t o e n o t ro s e p u e d e
u s a r u n o p e ra d o r d e co n ve rs ió n q u e t ie n e la s ig u ie n t e s in t a xis :

(<tipoDestino>) <expresión>

Lo q u e e s t e o p e ra d o r h a ce e s d e vo lve r e l o b je t o re s u lt a n t e d e co n ve rt ir a l t ip o d e d a t o d e n o m b re
<tipoDestino> e l o b je t o re s u lt a n t e d e e va lu a r <expresión> Pa ra q u e la co n ve rs ió n p u e d a a p lica rs e e s
p re cis o q u e e xis t a a lg u n a d e fin ició n d e có m o s e h a d e co n ve rt ir a <tipoDestino> lo s o b je t o s d e l t ip o
re s u lt a n t e d e e va lu a r <expresión> Es t o p u e d e in d ica rs e in t ro d u cie n d o co m o m ie m b ro d e l t ip o d e e s o s
o b je t o s o d e l t ip o <tipoDestino> u n a re d e fin ició n d e l o p e ra d o r d e co n ve rs ió n q u e in d iq u e có m o h a ce r la
co n ve rs ió n d e l t ip o d e l re s u lt a d o d e e va lu a r <expresión> a <tipoDestino>

La s re d e fin icio n e s d e o p e ra d o re s d e co n ve rs ió n p u e d e s e r d e d o s t ip o s :

● Ex p líc it a s : La co n ve rs ió n s ó lo s e re a liza cu a n d o s e u s e n e xp lícit a m e n t e lo s o p e ra d o re s


d e co n ve rs ió n a n t e s co m e n t a d o .

● I m p líc it a s : La co n ve rs ió n t a m b ié n s e re a liza a u t o m á t ica m e n t e ca d a ve z q u e s e a s ig n e


u n o b je t o d e e s e t ip o d e d a t o a u n o b je t o d e l t ip o <tipoDestino>. Es t a s co n ve rs io n e s
s o n m á s có m o d a s q u e la s e xp lícit a s p e ro t a m b ié n m á s p e lig ro s a s ya q u e p u e d e n o cu rrir
s in q u e e l p ro g ra m a d o r s e d é cu e n t a . Po r e llo , s ó lo d e b e ría n d e fin irs e co m o im p lícit a s la s
co n ve rs ió n s e g u ra s e n la s q u e n o s e p u e d a n p ro d u cir e xce p cio n e s n i p e rd e rs e
in fo rm a ció n a l re a liza rla s .

En u n m is m o t ip o d e d a t o p u e d e n d e fin irs e m ú lt ip le s co n ve rs io n e s s ie m p re y cu a n d o e l t ip o o rig e n d e la s


m is m a s s e a d ife re n t e . Po r t a n t o , n o e s vá lid o d e fin ir a la ve z e n u n m is m o t ip o u n a ve rs ió n im p lícit a d e
u n a cie rt a co n ve rs ió n y o t ra e xp lícit a .

La s in t a xis q u e s e u s a p a ra h a ce r re d e fin ir u n a o p e ra d o r d e co n ve rs ió n e s p a re cid a a la u s a d a p a ra


cu a lq u ie r o t ro o p e ra d o r s ó lo q u e n o h a y q u e d a rle n o m b re , t o m a u n ú n ico p a rá m e t ro y h a y q u e p re ce d e r
la p a la b ra re s e rva d a operator co n la s p a la b ra s re s e rva d a s explicit o implicit s e g ú n s e d e fin a la
co n ve rs ió n co m o e xp lícit a o im p lícit a . Po r e je m p lo , p a ra d e fin ir u n a co n ve rs ió n im p lícit a d e Complejo a
float p o d ría h a ce rs e :

public static implicit operator float(Complejo op)


{
return op.ParteReal;
}

Nó t e s e q u e e l t ip o d e l p a rá m e t ro u s a d o a l d e fin ir la co n ve rs ió n s e co rre s p o n d e co n e l t ip o d e d a t o d e l
o b je t o a l q u e s e p u e d e a p lica r la co n ve rs ió n ( t ip o o rig e n ) , m ie n t ra s q u e e l t ip o d e l va lo r d e vu e lt o s e rá e l
t ip o a l q u e s e re a lice la co n ve rs ió n ( t ip o d e s t in o ) Co n e s t a d e fin ició n p o d ría n e s crib irs e có d ig o s co m o e l
s ig u ie n t e :

http://www.programacion.com/tutorial.csharp.12.html (6 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

Complejo c1 = new Complejo(5,2); // c1 = 5 + 2i


float f = c1; // f = 5

Nó t e s e q u e e n la co n ve rs ió n d e Co m p le jo a flo a t s e p ie rd e in fo rm a ció n ( la p a rt e im a g in a ria ) , p o r lo q u e


s e ría m e jo r d e fin ir la co n ve rs ió n co m o e xp lícit a s u s t it u ye n d o e n s u d e fin ició n la p a la b ra re s e rva d a im p lic it
p o r e x p lic it . En e s e ca s o , e l có d ig o a n t e rio r h a b ría d e ca m b ia rs e p o r:

Complejo c1 = new Complejo(5,2); // c1 = 5 + 2i


float f = (float) c1; // f = 5

Po r o t ro la d o , s i lo q u e h a ce m o s e s re d e fin ir la co n ve rs ió n d e float a Complejo co n :

public static implicit operator Complejo(float op)


{
return (new Complejo(op, 0));
}

En t o n ce s s e p o d ría cre a r o b je t o s Complejo a s í:

Complejo c2 = 5; // c2 = 5 + 0i

Vé a s e q u e e n e s t e ca s o n u n ca s e p e rd e rá in fo rm a ció n y la co n ve rs ió n n u n ca fa lla rá , p o r lo q u e e s
p e rfe ct a m e n t e vá lid o d e fin irla co m o im p lícit a . Ad e m á s , n ó t e s e co m o re d e fin ie n d o co n ve rs io n e s im p lícit a s
p u e d e co n s e g u irs e q u e lo s t ip o s d e fin id o s p o r e l u s u a rio p u e d a n in icia liza rs e d ire ct a m e n t e a p a rt ir d e
va lo re s lit e ra le s t a l y co m o s i fu e s e n t ip o s b á s ico s d e l le n g u a je .

En re a lid a d , cu a n d o s e d e fin a n co n ve rs io n e s n o t ie n e p o rq u é s s ie m p re o cu rrir q u e e lt ip o d e s t in o in d ica d o


s e a e l t ip o d e l q u e s e a m ie m b ro la re d e fin ició n , s in o q u e s ó lo h a d e cu m p lirs e q u e o e l t ip o d e s t in o o e l
t ip o o rig e n s e a n d e d ich o t ip o . O s e a , d e n t ro d e u n t ip o d e d a t o s ó lo p u e d e n d e fin irs e co n ve rs io n e s d e e s e
t ip o a o t ro o d e o t ro t ip o a e s e . S in e m b a rg o , a l p e rm it irs e co n ve rs io n e s e n a m b o s s e n t id o s h a y q u e t e n e r
cu id a d o p o rq u e e llo p u e d e p ro d u cir p ro b le m a s s i s e s o licit a n co n ve rs io n e s p a ra la s q u e e xis t a u n a
d e fin ició n d e có m o re a liza rla s e n e l t ip o fu e n t e y o t ra e n e l t ip o d e s t in o . Po r e je m p lo , e l s ig u ie n t e có d ig o
p ro vo ca u n e rro r a l co m p ila r d e b id o a e llo :

class A
{
static void Main(string[] args)
{
A obj = new B(); // Error: Conversión de B en A ambigua
}

public static implicit operator A(B obj)


{
return new A();
}
}

class B
{
public static implicit operator A(B obj)
{
return new A();
}

http://www.programacion.com/tutorial.csharp.12.html (7 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

El p ro b le m a d e e s t e t ip o d e e rro re s e s q u e p u e d e re s u lt a d ifícil d e s cu b rir s u s ca u s a s e n t a n t o q u e e l


m e n s a je q u e e l co m p ila d o r e m it e in d ica q u e n o s e p u e d e n co n ve rt ir lo s o b je t o s A e n o b je t o s B p e ro n o
a cla ra q u e e llo s e d e b a a u n a a m b ig ü e d a d .

Ot ro e rro r co n e l q u e h a y q u e t e n e r cu id a d o e s co n e l h e ch o d e q u e p u e d e o cu rrir q u e a l m e zcla r


re d e fin icio n e s im p lícit a s co n m é t o d o s s o b re ca rg a d o s p u e d a n h a b e r a m b ig u e d a d e s a l d e t e rm in a r a q u é
ve rs ió n d e l m é t o d o s e h a d e lla m a r. Po r e je m p lo , d a d o e l có d ig o :

using System;

class A
{

public static implicit operator A(B obj)


{
return new A();
}

public static void MétodoSobrecargado(A o)


{
Console.WriteLine("Versión que toma A");
}

public static void MétodoSobrecargado(C o)


{
Console.WriteLine("Versión que toma C");
}

static void Main(string[] args)


{
MétodoSobrecargado(new B());
}
}

class B
{
public static implicit operator C(B obj)
{
return new C();
}
}

class C
{}

Al co m p ila rlo s e p ro d u cirá u n e rro r d e b id o a q u e e n la lla m a d a a MétodoSobrecargado() e l co m p ila d o r


n o p u e d e d e d u cir a q u é ve rs ió n d e l m é t o d o s e d e s e a lla m a r ya q u e e xis t e n co n ve rs io n e s im p líct a s d e
o b je t o s d e t ip o B e n cu a lq u ie ra d e lo s t ip o s a d m it id o s p o r s u s d is t in t a s ve rs io n e s . Pa ra re s o lve rlo lo m e jo r
e s p e cifica r e xp lícit a m e n t e e n la lla m a d a la co n ve rs ió n a a p lica r u s a n d o e l o p e ra d o r () Po r e je m p lo , p a ra
u s a r u s a r la ve rs ió n d e l m é t o d o q u e t o m a co m o p a rá m e t ro u n o b je t o d e t ip o A s e p o d ría h a ce r:

MétodoSobrecargado ( (A) new B());

http://www.programacion.com/tutorial.csharp.12.html (8 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

S in e m b a rg o , h a y q u e t e n e r cu id a d o ya q u e s i e n ve z d e l có d ig o a n t e rio r s e t u vie s e :

class A
{
public static implicit operator A(B obj)
{
return new A();
}

public static void MétodoSobrecargado(A o)


{
Console.WriteLine("Versión que toma A");
}

public static void MétodoSobrecargado(C o)


{
Console.WriteLine("Versión que toma C");
}

static void Main(string[] args)


{
MétodoSobrecargado(new B());
}
}

class B
{
public static implicit operator A(B obj)
{
return new A();
}

public static implicit operator C(B obj)


{
return new C();
}
}

class C
{}

En t o n ce s e l fu e n t e co m p ila ría co n n o rm a lid a d y a l e je cu t a rlo s e m o s t ra ría e l s ig u ie n t e m e n s a je q u e


d e m u e s t ra q u e s e h a u s a d o la ve rs ió n d e l m é t o d o q u e t o m a u n o b je t o C.

Versión que toma C

Fin a lm e n t e , h a y q u e s e ñ a la r q u e n o e s p o s ib le d e fin ir cu a lq u ie r t ip o d e co n ve rs ió n , s in o q u e a q u e lla s p a ra


lo s q u e ya e xis t a u n m e ca n is m o p re d e fin id o e n e l le n g u a je n o s o n vá lid a s . Es d e cir, n o p u e d e n d e fin irs e
co n ve rs io n e s e n t re u n t ip o y s u s a n t e ce s o re s ( p o r e l p o lim o rfis m o ya e xis t e n ) , n i e n t re u n t ip o y é l m is m o ,
n i e n t re t ip o s e in t e rfa ce s p o r e llo s im p le m e n t a d a s ( la s in t e rfa ce s s e e xp lica rá n e n e l Te m a 1 6 : In t e rfa ce s )

Prin cip io Pá g in a

http://www.programacion.com/tutorial.csharp.12.html (9 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.


Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.12.html (10 de 10) [20/10/2002 18:21:49]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n
C#

En e s t a p á g in a :

● Te m a 1 2 : De le g a d o s y e ve n t o s
❍ Co n ce p t o d e d e le g a d o
❍ De fin ició n d e d e le g a d o s
❍ Ma n ip u la ció n d e o b je t o s d e le g a d o s
❍ La cla s e S ys t e m . Mu lt ica s t De le g a t e
❍ Lla m a d a s a s ín cro n a s
❍ Im p le m e n t a ció n in t e rn a d e lo s d e le g a d o s
❍ Eve n t o s

Te m a 1 2 : D e le g a d o s y e v e n t o s

Co n c e p t o d e d e le g a d o

Un d e le g a d o e s u n t ip o e s p e cia l d e cla s e cu yo s o b je t o s p u e d e n a lm a ce n a r re fe re n cia s a u n o o m á s m é t o d o s d e


t a l m a n e ra q u e a t ra vé s d e l o b je t o s e a p o s ib le s o licit a r la e je cu ció n e n ca d e n a d e t o d o s e llo s .

Lo s d e le g a d o s s o n m u y ú t ile s ya q u e p e rm it e n d is p o n e r d e o b je t o s cu yo s m é t o d o s p u e d a n s e r m o d ifica d o s
d in á m ica m e n t e d u ra n t e la e je cu ció n d e u n p ro g ra m a . De h e ch o , s o n e l m e ca n is m o b á s ico e n e l q u e s e b a s a la
e s crit u ra d e a p lica cio n e s d e ve n t a n a s e n la p la t a fo rm a . NET. Po r e je m p lo , s i e n lo s o b je t o s d e u n a cla s e Button
q u e re p re s e n t e a lo s b o t o n e s e s t á n d a r d e Win d o ws d e fin im o s u n ca m p o d e t ip o d e le g a d o , p o d e m o s co n s e g u ir
q u e ca d a b o t ó n q u e s e cre e e je cu t e u n có d ig o d ife re n t e a l s e r p u ls a d o s in m á s q u e a lm a ce n a r e l có d ig o a
e je cu t a r p o r ca d a b o t ó n e n s u ca m p o d e t ip o d e le g a d o y lu e g o s o licit a r la e je cu ció n t o d o e s t e có d ig o
a lm a ce n a d o ca d a ve z q u e s e p u ls e e l b o t ó n .

S in e m b a rg o , t a m b ié n s o n ú t ile s p a ra m u ch ís im a s o t ra s co s a s t a le s co m o a s o cia ció n d e có d ig o a la ca rg a y


d e s ca rg a d e e n s a m b la d o s , a ca m b io s e n b a s e s d e d a t o s , a ca m b io s e n e l s is t e m a d e a rch ivo s , a la fin a liza ció n
d e o p e ra cio n e s a s ín cro n a s , la o rd e n a ció n d e co n ju n t o s d e e le m e n t o s , e t c. En g e n e ra l, s o n ú t ile s e n t o d o s
a q u e llo s ca s o s e n q u e in t e re s e p a s a r m é t o d o s co m o p a rá m e t ro s d e o t ro s m é t o d o s .

Ad e m á s , lo s d e le g a d o s p ro p o rcio n a n u n m e ca n is m o s m e d ia n t e e l cu a l u n o s o b je t o s p u e d e n s o licit a r a o t ro s q u e
s e le s n o t ifiq u e cu a n d o o cu rra n cie rt o s s u ce s o s . Pa ra e llo , b a s t a ría s e g u ir e l p a t ró n co n s is t e n t e e n h a ce r q u e lo s
o b je t o s n o t ifica d o re s d is p o n g a n d e a lg ú n ca m p o d e t ip o d e le g a d o y h a ce r q u e lo s o b je t o s in t e re s a d o s
a lm a ce n e n m é t o d o s s u yo s e n d ich o s ca m p o s d e m o d o q u e cu a n d o o cu rra e l s u ce s o a p ro p ia d o e l o b je t o
n o t ifica d o r s im u le la n o t ifica ció n e je cu t a n d o t o d o s lo s m é t o d o s a s í a s o cia d o s a é l.

http://www.programacion.com/tutorial.csharp.13.html (1 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

D e fin ic ió n d e d e le g a d o s

Un d e le g a d o n o e s m á s q u e u n t ip o e s p e cia l d e s u b cla s e System.MulticastDelegate . S in e m b a rg o , p a ra


d e fin ir e s t a s cla s e s n o s e p u e d e u t iliza r e l m e ca n is m o d e h e re n cia n o rm a l s in o q u e h a d e s e g u irs e la s ig u ie n t e
s in t a xis e s p e cia l:

<modificadores> delegate <tipoRetorno> <nombreDelegado> (<parámetros>);

<nombreDelegado> s e rá e l n o m b re d e la cla s e d e le g a d o q u e s e d e fin e , m ie n t ra s q u e <tipoRetorno> y


<parámetros> s e co rre s p o n d e rá n , re s p e ct iva m e n t e , co n e l t ip o d e l va lo r d e re t o rn o y la lis t a d e p a rá m e t ro s
d e lo s m é t o d o s cu yo s có d ig o s p u e d e a lm a ce n a r e n s u in t e rio r lo s o b je t o s d e e s e t ip o d e le g a d o ( o b je t o s
d e le g a d o s )

Un e je m p lo d e có m o d e fin ir u n d e le g a d o d e n o m b re De le g cu yo s o b je t o s p u e d a n a lm a ce n a r m é t o d o s q u e
d e vu e lva n u n string y t o m e n co m o p a rá m e t ro u n int e s :

delegate string Deleg(int valor);

Lo s o b je t o s d e le g a d o s d e e s t e t ip o s ó lo p o d rá n a lm a ce n a r có d ig o s d e m é t o d o s q u e n o d e vu e lva n n a d a y t o m e n
u n ú n ico p a rá m e t ro d e t ip o in t . Cu a lq u ie r in t e n t o d e a lm a ce n a r m é t o d o s co n o t ra s ca ra ct e rís t ica s p ro d u cirá u n
e rro r d e co m p ila ció n o , s i n o p u e d e d e t e ct a rs e a l co m p ila r, u n a e xce p ció n d e t ip o
System.ArgumentNullException e n t ie m p o d e e je cu ció n t a l y co m o m u e s t ra e l s ig u ie n t e p ro g ra m a d e
e je m p lo :

using System;
using System.Reflection;

public delegate void D();

public class ComprobaciónDelegados


{
public static void Main()
{
Type t = typeof(ComprobaciónDelegados);
MethodInfo m = t.GetMethod("Método1");
D obj = (D) Delegate.CreateDelegate(typeof(D), m);
obj();
}

public static void Método1()


{ Console.WriteLine("Ejecutado Método1"); }

public static void Método2(string s)


{ Console.WriteLine("Ejecutado Método2"); }
}

Lo q u e s e h a ce e n e l m é t o d o Main() d e e s t e p ro g ra m a e s cre a r a p a rt ir d e l o b je t o Type q u e re p re s e n t a a l t ip o


ComprobaciónDelegados u n o b je t o System.Reflection.MethodInfo q u e re p re s e n t a a s u m é t o d o
Método1. Co m o s e ve , p a ra cre a r e l o b je t o Type s e u t iliza e l o p e ra d o r typeof ya e s t u d ia d o , y p a ra o b t e n e r e l
o b je t o MethodInfo s e u s a s u m é t o d o GetMethod() q u e t o m a co m o p a rá m e t ro u n a ca d e n a co n e l n o m b re d e l
m é t o d o cu yo MethodInfo d e s e e o b t e n e rs e . Un a ve z co n s e g u id o , s e cre a u n o b je t o d e le g a d o d e t ip o D q u e
a lm a ce n e u n a re fe re n cia a l m é t o d o p o r é l re p re s e n t a d o a t ra vé s d e l m é t o d o CreateDelegate() d e la cla s e
Delegate y s e lla m a d ich o o b je t o , lo q u e m u e s t ra e l m e n s a je :

Ejecutado Método1

http://www.programacion.com/tutorial.csharp.13.html (2 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

Au n q u e e n ve z d e o b t e n e r e l MethodInfo q u e re p re s e n t a a l Método1 s e h u b ie s e o b t e n id o e l q u e re p re s e n t a a l
Método2 e l co m p ila d o r n o d e t e ct a ría n a d a ra ro a l co m p ila r ya q u e n o e s lo b a s t a n t e in t e lig e n t e co m o p a ra
s a b e r q u e d ich o o b je t o n o re p re s e n t a a u n m é t o d o a lm a ce n a b le e n o b je t o s d e le g a d o s d e t ip o D. S in e m b a rg o , a l
e je cu t a rs e la a p lica ció n e l CLR s í q u e lo d e t e ct a ría y e llo p ro vo ca ría u n a Arg u m e n t N u llEx c e p t io n

És t o e s u n d ife re n cia im p o rt a n t e d e lo s d e le g a d o s re s p e ct o a lo s p u n t e ro s a fu n ció n d e C/ C+ + ( q u e t a m b ié n


p u e d e n a lm a ce n a r re fe re n cia s a m é t o d o s ) , ya q u e co n e s t o s ú lt im o s n o s e re a liza n d ich a s co m p ro b a cio n e s e n
t ie m p o d e e je cu ció n y p u e d e t e rm in a r o cu rrie n d o q u e u n p u n t e ro a fu n ció n a p u n t e a u n m é t o d o cu ya s ig n a t u ra
o va lo r d e re t o rn o n o s e co rre s p o n d a n co n lo s in d ica d o s e n s u d e fin ició n , lo q u e p u e d e o ca s io n a r q u e e l
p ro g ra m a fa lle p o r ca u s a s d ifícile s d e d e t e ct a r.

La s d e fin icio n e s d e d e le g a d o s t a m b ié n p u e d e n in clu ir cu a lq u ie ra d e lo s m o d ifica d o re s d e a cce s ib ilid a d vá lid o s


p a ra u n a cla s e , ya q u e a l fin y a l ca b o lo s d e le g a d o s s o n cla s e s . Es d e cir, t o d o s p u e d e n in clu ir lo s m o d ifica d o re s
public e internal, y lo s s e d e fin a n d e n t ro d e o t ro t ip o t a m b ié n p u e d e n in clu ir protected, private y
protected internal.

Ma n ip u la c ió n d e o b je t o s d e le g a d o s

Un o b je t o d e u n t ip o d e le g a d o s e cre a e xa ct a m e n t e ig u a l q u e u n o b je t o d e cu a lq u ie r cla s e s ó lo q u e e n s u
co n s t ru ct o r h a d e p a s á rs e le e l n o m b re d e l m é t o d o cu yo có d ig o a lm a ce n a rá . Es t e m é t o d o p u e d e t a n t o s e r u n
m é t o d o e s t á t ico co m o u n o n o e s t á t ico . En e l p rim e r ca s o s e in d ica ría s u n o m b re co n la s in t a xis
<nombreTipo>.<nombreMétodo>, y e n e l s e g u n d o s e in d ica ría co n <objeto>.<nombreMétodo>

Pa ra lla m a r a l có d ig o a lm a ce n a d o e n e l d e le g a d o s e u s a u n a s in t a xis s im ila r a la d e la s lla m a d a s a m é t o d o s ,


s ó lo q u e n o h a y q u e p re fija r e l o b je t o d e le g a d o d e n in g ú n n o m b re d e t ip o o d e o b je t o y s e u s a s im p le m e n t e
<objetoDelegado>(<valoresParámetros>)

El s ig u ie n t e e je m p lo m u e s t ra có m o cre a r u n o b je t o d e le g a d o d e t ip o D, a s o cia rle e l có d ig o d e u n m é t o d o


lla m a d o F y e je cu t a r d ich o có d ig o a t ra vé s d e l o b je t o d e le g a d o :

using System;

delegate void D(int valor);

class EjemploDelegado
{
public static void Main()
{
D objDelegado = new D(F);
objDelegado(3);
}

public static void F(int x)


{
Console.WriteLine( "Pasado valor {0} a F()");
}
}

La e je cu ció n d e e s t e p ro g ra m a p ro d u cirá la s ig u ie n t e s a lid a p o r p a n t a lla :

Pasado valor 3 a F()

Nó t e s e q u e p a ra a s o cia r e l có d ig o d e F( ) a l d e le g a d o n o s e h a in d ica d o e l n o m b re d e e s t e m é t o d o e s t á t ico co n


la s in t a xis <nombreTipo>.<nombreMétodo> a n t e s co m e n t a d a . Es t o s e d e b e a q u e n o e s n e ce s a rio in clu ir e l
<nombreTipo>. cu a n d o e l m é t o d o a a s o cia r a u n d e le g a d o e s e s t á t ico y e s t á d e fin id o e n e l m is m o t ip o q u e e l
có d ig o d o n d e e s a s o cia d o

http://www.programacion.com/tutorial.csharp.13.html (3 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

En re a lid a d u n o b je t o d e le g a d o p u e d e a lm a ce n a r có d ig o s d e m ú lt ip le s m é t o d o s t a n t o e s t á t ico s co m o n o
e s t á t ico s d e m a n e ra q u e u n a lla m a d a a t ra vé s s u ya p ro d u zca la e je cu ció n e n ca d e n a d e t o d o s e llo s e n e l m is m o
o rd e n e n q u e s e a lm a ce n a ro n e n é l. Nó t e s e q u e s i lo s m é t o d o s d e vu e lve n a lg ú n va lo r, t ra s la e je cu ció n d e la
ca d e n a d e lla m a d a s s ó lo s e d e vo lve rá e l va lo r d e re t o rn o d e la ú lt im a lla m a d a .

Ad e m á s , cu a n d o s e re a liza u n a lla m a d a a t ra vé s d e u n o b je t o d e le g a d o n o s e t ie n e n e n cu e n t a lo s
m o d ifica d o re s d e vis ib ilid a d d e lo s m é t o d o s q u e s e e je cu t a rá n , lo q u e p e rm it e lla m a r d e s d e u n t ip o a m é t o d o s
p riva d o s d e o t ro s t ip o s q u e e s t é n a lm a ce n a d o s e n u n d e le g a d o p o r a cce s ib le d e s d e e l p rim e ro t a l y co m o
m u e s t ra e l s ig u ie n t e e je m p lo :

using System;

public delegate void D();

class A
{
public static D obj;

public static void Main()


{
B.AlmacenaPrivado();
obj();
}
}

class B
{
private static void Privado()
{ Console.WriteLine("Llamado a método privado"); }

public static void AlmacenaPrivado()


{ A.obj += new D(Privado); }
}

La lla m a d a a AlmacenaPrivado e n e l m é t o d o Main() d e la cla s e A p ro vo ca q u e e n e l ca m p o d e le g a d o o b j d e


d ich a cla s e s e a lm a ce n e u n a re fe re n cia a l m é t o d o p riva d o Privado() d e la cla s e B, y la in s t ru cció n s ig u ie n t e
p ro vo ca la lla m a d a a d ich o m é t o d o p riva d o d e s d e u n a cla s e e xt e rn a a la d e s u d e fin ició n co m o d e m u e s t ra la
s a lid a d e l p ro g ra m a :

Llamado a método privado

Pa ra a ñ a d ir n u e vo s m é t o d o s a u n o b je t o d e le g a d o s e le a p lica e l o p e ra d o r += p a s á n d o le co m o o p e ra n d o
d e re ch o u n o b je t o d e le g a d o d e s u m is m o t ip o ( n o va le d e o t ro a u n q u e a d m it a lo s m is m o s t ip o s d e p a rá m e t ro s y
va lo r d e re t o rn o ) q u e co n t e n g a lo s m é t o d o s a a ñ a d irle , y p a ra q u it á rs e lo s s e h a ce lo m is m o p e ro co n e l
o p e ra d o r -=. Po r e je m p lo , e l s ig u ie n t e có d ig o m u e s t ra lo s e fe ct o s d e a m b o s o p e ra d o re s :

using System;

delegate void D(int valor);

class EjemploDelegado
{
public string Nombre;

EjemploDelegado(string nombre)
{
Nombre = nombre;
}

http://www.programacion.com/tutorial.csharp.13.html (4 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

public static void Main()


{
EjemploDelegado obj1 += new EjemploDelegado("obj1");
D objDelegado = new D(f);
objDelegado += new D(obj1.g);
objDelegado(3);
objDelegado -= new D(obj1.g);
objDelegado(5);
}

public void g(int x)


{
Console.WriteLine("Pasado valor {0} a g() en objeto {1}", x, Nombre);
}

public static void f(int x)


{
Console.WriteLine( "Pasado valor {0} a f()", x);
}
}

La s a lid a p ro d u cid a p o r p a n t a lla p o r e s t e p ro g ra m a s e rá :

Pasado valor 3 a f()


Pasado valor 3 a g() en objeto obj1
Pasado valor 5 a f()

Co m o s e ve , cu a n d o a h o ra s e h a ce la lla m a d a objDelegado(3) s e e je cu t a n lo s có d ig o s d e lo s d o s m é t o d o s
a lm a ce n a d o s e n objDelegado, y a l q u it á rs e le lu e g o u n o d e e s t o s có d ig o s la s ig u ie n t e lla m a d a s ó lo e je cu t a e l
có d ig o d e l q u e q u e d a . Nó t e s e a d e m á s e n e l e je m p lo co m o la re d e fin ició n d e + re a liza d a p a ra lo s d e le g a d o s
p e rm it e q u e s e p u e d a in icia liza r objDelegado u s a n d o += e n ve z d e =. Es d e cir, s i u n o d e lo s o p e ra n d o s d e +
va le null n o s e p ro d u ce n in g u n a e xce p ció n , s in o q u e t a n s ó lo n o s e a ñ a d e n in g ú n m é t o d o a l o t ro .

Ha y q u e s e ñ a la r q u e u n o b je t o d e le g a d o va le null s i n o t ie n e n in g ú n m é t o d o a s o cia d o , ya s e a p o rq u e n o s e h a
lla m a d o a ú n a s u co n s t ru ct o r o p o rq u e lo s q u e t u vie s e a s o cia d o s e le h a ya n q u it a d o co n -=. As í, s i a l Main()
d e l e je m p lo a n t e rio r le a ñ a d im o s a l fin a l:

objDelegado -= new D(f);


objDelegado(6);

S e p ro d u cirá a l e je cu t a rlo u n a e xce p ció n d e t ip o System.NullReferenceException in d ica n d o q u e s e h a


in t e n t a d o a cce d e r a u n a re fe re n cia n u la .

Ta m b ié n h a y q u e s e ñ a la r q u e p a ra q u e e l o p e ra d o r -= fu n cio n e s e le h a d e p a s a r co m o o p e ra d o r d e re ch o u n
o b je t o d e le g a d o q u e a lm a ce n e a lg ú n m é t o d o e xa ct a m e n t e ig u a l a l m é t o d o q u e s e le q u ie ra q u it a r a l o b je t o
d e le g a d o d e s u la d o izq u ie rd o . Po r e je m p lo , s i s e le q u ie re q u it a r u n m é t o d o d e u n cie rt o o b je t o , s e le h a d e
p a s a r u n o b je t o d e le g a d o q u e a lm a ce n e e s e m é t o d o d e e s e m is m o o b je t o , y n o va le q u e a lm a ce n e e s e m é t o d o
p e ro d e o t ro o b je t o d e s u m is m o t ip o . Po r e je m p lo , s i a l Ma in ( ) a n t e rio r le a ñ a d im o s a l fin a l:

objDelegado -= new g(obj1.g);


objDelegado(6);

En t o n ce s n o s e p ro d u cirá n in g u n a e xce p ció n ya q u e e l -= n o e lim in a rá n in g ú n m é t o d o d e objDelegado d e b id o


a q u e e s e o b je t o d e le g a d o n o co n t ie n e n in g ú n m é t o d o g() p ro ce d e n t e d e l o b je t o obj1. Es m á s , la s a lid a q u e
s e p ro d u cirá p o r p a n t a lla s e rá :

http://www.programacion.com/tutorial.csharp.13.html (5 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

Pasado valor 3 a f()


Pasado valor 3 a g() en objeto obj1
Pasado valor 5 a f()
Pasado valor 6 a f()

La c la s e S y s t e m . Mu lt ic a s t D e le g a t e

Ya s e h a d ich o q u e la s in t a xis e s p e cia l d e d e fin ició n d e d e le g a d o s n o e s m á s q u e u n a fo rm a e s p e cia l d e fin ir


s u b cla s e s d e System.MulticastDelegate. Es t a cla s e a s u ve z d e riva d e System.Delegate, q u e
re p re s e n t a a o b je t o s d e le g a d o s q u e s ó lo p u e d e a lm a ce n a r u n ú n ico m é t o d o . Po r t a n t o , t o d o s lo s o b je t o s
d e le g a d o q u e s e d e fin a n co n t a rá n co n lo s s ig u ie n t e s m ie m b ro s co m u n e s h e re d a d o s d e e s t a s cla s e s :

● o b je c t Ta rg e t : Pro p ie d a d d e s ó lo le ct u ra q u e a lm a ce n a e l o b je t o a l q u e p e rt e n e ce e l ú lt im o
m é t o d o a ñ a d id o a l o b je t o d e le g a d o . S i e s u n m é t o d o d e cla s e va le null.

● Me t h o d I n fo Me t h o d : Pro p ie d a d d e s ó lo le ct u ra q u e a lm a ce n a u n o b je t o
System.Reflection.MethodInfo co n in fo rm a ció n s o b re e l ú lt im o m é t o d o a ñ a d id o a l o b je t o
( n o m b re , m o d ifica d o re s , e t c. ) Pa ra s a b e r có m o a cce d e r a e s t o s d a t o s p u e d e co n s u lt a r la
d o cu m e n t a ció n in clu id a e n e l S DK s o b re la cla s e MethodInfo

● D e le g a t e [ ] g e t I n v o c a t io n Lis t ( ) : Pe rm it e a cce d e r a t o d o s lo s m é t o d o s a lm a ce n a d o s e n u n
d e le g a d o , ya q u e d e vu e lve u n a t a b la cu yo s e le m e n t o s s o n d e le g a d o s ca d a u n o d e lo s cu a le s
a lm a ce n a n u n o , y s ó lo u n o , d e lo s m é t o d o s d e l o rig in a l. Es t o s d e le g a d o s s e e n cu e n t ra n
o rd e n a d o s e n la t a b la e n e l m is m o o rd e n e n q u e s u s m é t o d o s fu e ro n fu e a lm a ce n a d o s e n e l
o b je t o d e le g a d o o rig in a l.

Es t e m é t o d o e s e s p e cia lm e n t e ú t il p o rq u e a t ra vé s d e la t a b la q u e re t o rn a s e p u e d e n h a ce r co s a s t a le s
co m o e je cu t a r lo s m é t o d o s d e l d e le g a d o e n u n o rd e n d ife re n t e a l d e s u a lm a ce n a m ie n t o , p ro ce s a r lo s
va lo re s d e re t o rn o d e t o d a s la s lla m a d a s a lo s m é t o d o s d e l d e le g a d o o rig in a l, e vit a r q u e u n a e xce p ció n
e n la e je cu ció n d e u n o d e lo s m é t o d o s im p id a la e je cu ció n d e lo s d e m á s , e t c.

Ap a rt e d e e s t o s m é t o d o s d e o b je t o , la cla s e System.MulticastDelegate t a m b ié n cu e n t a co n lo s s ig u ie n t e s
m é t o d o s d e t ip o d e u s o fre cu e n t e :

● s t a t ic D e le g a t e Co m b in e ( D e le g a t e fu e n t e , D e le g a t e d e s t in o ) : De vu e lve u n n u e vo
o b je t o d e le g a d o q u e a lm a ce n a la co n ca t e n a ció n d e lo s m é t o d o s d e fu e n t e co n lo s d e d e s t in o .
Po r t a n t o , n ó t e s e q u e e s t a s t re s in s t ru ccio n e s s o n e q u iva le n t e s :

objDelegado += new D(obj1.g);


objDelegado = objDelegado + new D(obj1.g);
objDelegado = (D) MulticastDelegate.Combine(objDelegado, new D(obj1.g);

Es m á s , e n re a lid a d e l co m p ila d o r d e C# lo q u e h a ce e s co n ve rt ir t o d a a p lica ció n d e l o p e ra d o r + e n t re


d e le g a d o s e n u n a lla m a d a a Combine() co m o la m o s t ra d a .

Ha y q u e t e n e r cu id a d o co n lo s t ip o s d e lo s d e le g a d o s a co m b in a r ya q u e h a n d e s e r e xá ct a m e n t e lo s
m is m o s o s i n o s e la n za u n a System.ArgumentException, y e llo o cu rre a ú n e n e l ca s o d e q u e d ich o s
s ó lo s e d ife re n cie n e n s u n o m b re y n o e n s u s t ip o s d e p a rá m e t ro s y va lo r d e re t o rn o .

● s t a t ic D e le g a t e Co m b in e ( D e le g a t e [ ] t a b la ) : De vu e lve u n n u e vo d e le g a d o cu yo s m é t o d o s
a lm a ce n a d o s s o n la co n ca t e n a ció n d e t o d o s lo s d e la lis t a q u e s e le p a s a co m o p a rá m e t ro y
e n e l o rd e n e n q u e a p a re cie s e n e n e lla . Es u n a b u e n a fo rm a d e cre a r d e le g a d o s co n m u ch o s
m é t o d o s s in t e n e r q u e a p lica r += va ria s ve ce s .

To d o s lo s o b je t o s d e le g a d o s d e la t a b la h a n d e s e r d e l m is m o t ip o , p u e s s i n o s e p ro d u ciría u n a

http://www.programacion.com/tutorial.csharp.13.html (6 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

System.ArgumentException.

● s t a t ic D e le g a t e Re m o v e ( D e le g a t e o rig in a l, D e le g a t e a Bo rra r) : De vu e lve u n n u e vo


d e le g a d o cu yo s m é t o d o s a lm a ce n a d o s s o n e l re s u lt a d o d e e lim in a r d e o rig in a l lo s q u e t u vie s e
aBorrar. Po r t a n t o , e s t a s in s t ru ccio n e s s o n e q u iva le n t e s :

objDelegado -= new D(obj1.g);


objDelegado - objDelegado - new D(obj1.g);
objDelegado = (D) MulticastDelegate.Remove(objDelegado, new D(obj1.g);

Nu e va m e n t e , lo q u e h a ce e l co m p ila d o r d e C# e s co n ve rt ir t o d a a p lica ció n d e l o p e ra d o r - e n t re


d e le g a d o s e n u n a lla m a d a a Remove() co m o la m o s t ra d a . Po r t a n t o , a l ig u a l q u e co n -=, p a ra b o rra r
m é t o d o s d e o b je t o s e h a d e e s p e cifica r e n aBorrar u n o b je t o d e le g a d o q u e co n t e n g a re fe re n cia s a
m é t o d o s a s o cia d o s a e xá ct a m e n t e lo s m is m o s o b je t o s q u e lo s a lm a ce n a d o s e n o rig in a l.

● s t a t ic D e le g a t e Cre a t e D e le g a t e ( Ty p e t ip o , Me h o d I n fo m é t o d o ) : Ya s e u s ó e s t e
m é t o d o e n e l e je m p lo d e co m p ro b a ció n d e t ip o s d e l e p íg ra fe "De fin ició n d e d e le g a d o s " d e
e s t e m is m o t e m a . Co m o re co rd a rá p e m rit e cre a r d in á m ica m e n t e o b je t o s d e le g a d o s , ya q u e
d e vu e lve u n o b je t o d e le g a d o d e l t ip o in d ica d o q u e a lm a ce n a u n a re fe re n cia a l m é t o d o
re p re s e n t a d o p o r s u s e g u n d o p a rá m e t ro .

Lla m a d a s a s ín c ro n a s

La fo rm a d e lla m a r a m é t o d o s q u e h a s t a a h o ra s e h a e xp lica d o re a liza la lla m a d a d e m a n e ra s ín c ro n a , lo q u e


s ig n ifica q u e la in s t ru cció n s ig u ie n t e a la lla m a d a n o s e e je cu t a h a s t a q u e n o fin a lice e l m é t o d o lla m a d o . S in
e m b a rg o , a t o d o m é t o d o a lm a ce n a d o e n u n o b je t o d e le g a d o t a m b ié n e s p o s ib le lla m a rd e m a n e ra a s ín c ro n a a
t ra vé s d e lo s m é t o d o s d e l m is m o , lo q u e co n s is t e e n q u e n o s e e s p e ra a q u e a ca b e d e e je cu t a rs e p a ra p a s a r a
la in s t ru cció n s ig u ie n t e a s u lla m a d a s in o q u e s u e je cu ció n s e d e ja e n m a n o s d e u n h ilo a p a rt e q u e s e irá
e je cu t á n d o lo e n p a ra le lo co n e l h ilo lla m a n t e .

Po r t a n t o lo s d e le g a d o s p ro p o rcio n a n u n có m o d o m e ca n is m o p a ra e je cu t a r cu a lq u ie r m é t o d o a s ín cro n a m e n t e ,
p u e s p a ra e llo b a s t a in t ro d u cirlo e n u n o b je t o d e le g a d o d e l t ip o a p ro p ia d o . S in e m b a rg o , e s t e m e ca n is m o d e
lla m a d a a s ín cro n a t ie n e u n a lim it a ció n , y e s q u e s ó lo e s vá lid o p a ra o b je t o s d e le g a d o s q u e a lm a ce n e n u n ú n ico
m é todo.

Pa ra h a ce r p o s ib le la lla m a d a s a s ín cro n a s , a p a rt e d e lo s m é t o d o s h e re d a d o s d e System.MulticastDelegate


t o d o o b je t o d e le g a d o cu e n t a co n e s t o s o t ro s d o s m é t o d o s q u e e l co m p ila d o r d e fin e a s u m e d id a e n a l cla s e e n
q u e t ra d u ce la d e fin ició n d e s u t ip o :

IAsyncResult BeginInvoke( <parámetros> , AsyncCallback cb, Object o)


<tipoRetorno> EndInvoke(<parámetrosRefOut>, IASyncResult ar)

BeginInvoke() cre a u n h ilo q u e e je cu t a rá lo s m é t o d o s a lm a ce n a d o s e n e l o b je t o d e le g a d o s o b re e l q u e s e


a p lica co n lo s p a rá m e t ro s in d ica d o s e n <parámetros> y d e vu e lve u n o b je t o IAsyncResult q u e a lm a ce n a rá
in fo rm a ció n re la t iva a e s e h ilo ( p o r e je m p lo , a t ra vé s d e s u p ro p ie d a d d e s ó lo le ct u ra bool IsComplete p u e d e
co n s u lt a rs e s i h a t e rm in a d o s u la b o r) S ó lo t ie n e s e n t id o lla m a rlo s i e l o b je t o d e le g a d o s o b re e l q u e s e a p lica
a lm a ce n a u n ú n ico m é t o d o , p u e s s i n o s e la n za u n a System.ArgumentException.

El p a rá m e t ro cb d e BeginInvoke() e s u n o b je t o d e t ip o d e le g a d o q u e p u e d e a lm a ce n a r m é t o d o s a e je cu t a r
cu a n d o e l h ilo a n t e s co m e n t a d o fin a lice s u t ra b a jo . A e s t o s m é t o d o s e l CLR le s p a s a rá a u t o m á t ica m e n t e co m o
p a rá m e t ro e l IAsyncResult d e vu e lt o p o r BeginInvoke(), e s t á n d o a s í d e fin id o e l d e le g a d o d e s t in a d o a
a lm a ce n a rlo s :

public delegate void ASyncCallback(IASyncResult obj);

Po r s u p a rt e , e l p a rá m e t ro o d e BeginInvoke p u e d e u s a rs e p a ra a lm a ce n a r cu a lq u ie r in fo rm a ció n a d icio n a l

http://www.programacion.com/tutorial.csharp.13.html (7 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

q u e s e co n s id e re o p o rt u n a . Es p o s ib le a cce d e r a é l a t ra vé s d e la p ro p ie d a d object AsyncState d e l o b je t o


IAsyncResult d e vu e lt o p o r BeginInvoke()

En ca s o d e q u e n o s e d e s e e e je cu t a r n in g ú n có d ig o e s p e cia l a l fin a liza r e l h ilo d e e je cu ció n a s ín cro n a o n o d e s e e


u s a r in fo rm a ció n a d icio n a l, p u e d e d a rs e s in n in g ú n t ip o d e p ro b le m a e l va lo r null a lo s ú lt im o s p a rá m e t ro s d e
BeginInvoke() s e g ú n co rre s p o n d a .

Fin a lm e n t e , EndInvoke() s e u s a p a ra re co g e r lo s re s u lt a d o s d e la e je cu ció n a s ín cro n a d e lo s m é t o d o s in icia d a


a t ra vé s BeginInvoke() Po r e llo , s u va lo r d e re t o rn o e s d e l m is m o t ip o q u e lo s m é t o d o s a lm a ce n a b le s e n e l
o b je t o d e le g a d o a l q u e p e rt e n e ce y e n <parámetrosRefOut> s e in d ica n lo s p a rá m e t ro s d e s a lid a y p o r
re fe re n cia d e d ich o s m é t o d o s . S u t e rce r p a rá m e t ro e s e l IAsyncResult d e vu e lt o p o r e l BeginInvoke() q u e
cre ó e l h ilo cu yo s s e s o licit a re co g e r y s e u s a p re cis a m e n t e p a ra id e n t ifica rlo . En ca s o d e q u e e s e h ilo n o h a ya
t e rm in a d o a ú n d e h a ce r la s lla m a d a s s e e s p e ra rá a q u e lo h a g a .

Pa ra ilu s t ra r m e jo r e l co n ce p t o d e lla m a d a s a s ín cro n a s , e l s ig u ie n t e e je m p lo m u e s t ra có m o e n ca p s u la r e n u n


o b je t o d e le g a d o u n m é t o d o F() p a ra e je cu t a rlo a s ín cro n a m e n t e :

D objDelegado = new D (F);


IAsyncResult hilo = objDelegado.BeginInvoke(3, new AsyncCallback(M),
"prueba");
// ... Hacer cosas
objDelegado.EndInvoke(hilo);

Do n d e e l m é t o d o M h a s id o d e fin id o e n la m is m a cla s e q u e e s t e có d ig o a s í:

public static void M(IAsyncResult obj)


{
Console.WriteLine("Llamado a M() con {0}", obj.AsyncState);
}

S i e n t re e l BeginInvoke() y e l EndInvoke() n o h u b ie s e h a b id o n in g u n a e s crit u ra e n p a n t a lla , la s a lid a d e l


fra g m e n t o d e có d ig o a n t e rio r s e ría :

Pasado valor 3 a F()


Llamado a M() con prueba

La lla m a d a a BeginInvoke() la n za rá u n h ilo q u e e je cu t a rá e l m é t o d o F( ) a lm a ce n a d o e n o b jDe le g a d o , p e ro


m ie n t ra s t a n t o t a m b ié n s e g u irá e je cu t á n d o s e e l có d ig o d e l h ilo d e s d e d o n d e s e lla m ó a BeginInvoke() S ó lo
t ra s lla m a r a EndInvoke() s e p u e d e a s e g u ra r q u e s e h a b rá e je cu t a d o e l có d ig o d e F(), p u e s m ie n t ra s t a n t o
la e vo lu ció n d e a m b o s h ilo s e s p rá ct ica m e n t e in d e t e rm in a b le ya q u e d e p e n d e d e l có m o a ct ú e e l p la n ifica d o r d e
h ilo s .

Aú n s i e l h ilo lla m a d o r m o d ifica e l va lo r d e a lg u n o d e lo s p a rá m e t ro s d e s a lid a o p o r re fe re n cia d e t ip o s va lo r, e l


va lo r a ct u a liza d o d e é s t o s n o s e rá vis ib le p a ra e l h ilo lla m a n t e h a s t a n o lla m a r a EndInvoke() S in e m b a rg o , e l
va lo r d e lo s p a rá m e t ro s d e t ip o s re fe re n cia s í q u e p o d ría s e rlo . Po r e je m p lo , d a d o u n có d ig o co m o :

int x=0;
Persona p = new Persona("Josan", "7361928-E", 22);

IAsyncResult res = objetoDelegado.BeginInvoke(ref x, p, null, null);


// Hacer cosas...
objetoDelegado.EndInvoke(ref x, res);

S i e n u n p u n t o d e l có d ig o co m e n t a d o co n // Hacer cosas... d o n d e e l h ilo a s ín cro n o ya h u b ie s e m o d ifica d o


lo s co n t e n id o s d e x y p s e in t e n t a s e le e r lo s va lo re s d e e s t a s va ria b le s s ó lo s e le e ría e l va lo r a ct u a liza d o d e p,
m ie n t ra s e l d e x n o s e ve ría h a s t a d e s p u é s d e la lla m a d a a En d I n v o k e ( )

http://www.programacion.com/tutorial.csharp.13.html (8 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

Po r o t ro la d o , h a y q u e s e ñ a la r q u e s i d u ra n t e la e je cu ció n a s ín cro n a d e u n m é t o d o s e p ro d u ce a lg u n a
e xce p ció n , é s t a n o s e ría n o t ifica d a p e ro p ro vo ca ría q u e e l h ilo a s ín cro n o a b o rt a s e . S i p o s t e rio rm e n t e s e lla m a s e
a En d I n v o k e ( ) co n e l I As y n c Re s u lt a s o cia d o a d ich o h ilo , s e re la n za ría la e xce p ció n q u e p ro d u jo e l a b o rt o y
e n t o n ce s p o d ría t ra t a rs e .

Pa ra o p t im iza r la s lla m a d a s a s ín cro n a s e s re co m e n d a b le m a rca r co n e l a t rib u t o OneWay d e fin id o e n


System.Runtime.Remoting.Messaging lo s m é t o d o s cu yo va lo r d e re t o rn o y va lo re s d e p a rá m e t ro s d e
s a lid a n o n o s im p o rt e n , p u e s e llo in d ica a la in fra e s t ru ct u ra e n ca rg a d a d e h a ce r la s lla m a d a s a s ín cro n a s q u e n o
h a d e co n s id e ra r. Po r e je m p lo :

[OneWay] public void Método()


{}

Ah o ra b ie n , h a y q u e t e n e r e n cu e n t a q u e h a ce r e s t o im p lica p e rd e r t o d a p o s ib ilid a d d e t ra t a r la s e xce p cio n e s


q u e p u d ie s e p ro d u cirs e a l e je cu t a r a s ín cro n a m e n t e e l m é t o d o a t rib u id o , p u e s co n e llo lla m a r a EndInvoke()
d e ja ría d e re la n za r la e xce p ció n p ro d u cid a .

Po r ú lt im o , a m o d o d e re s u m e n a co n t in u a ció n s e in d ica n cu á le s s o n lo s p a t ro n e s q u e p u e d e n s e g u irs e p a ra


re co g e r lo s re s u lt a d o s d e u n a lla m a d a a s ín cro n a :

● De t e ct a r s i la lla m a d a a s ín cro n a h a fin a liza d o m ira n d o e l va lo r d e la p ro p ie d a d IsComplete


d e l o b je t o IAsyncResult d e vu e lt o p o r BeginInvoke() Cu a n d o s e a a s í, co n EndInvoke()
p u e d e re co g e rs e s u s re s u lt a d o s .
● Pa s a r u n o b je t o d e le g a d o e n e l p e n ú lt im o p a rá m e t ro d e BeginInvoke() co n e l m é t o d o a
e je cu t a r cu a n d o fin a lice e l h ilo a s ín cro n o , lo q u e lib e ra ría a l h ilo lla m a n t e d e la t a re a d e t e n e r
q u e a n d a r m ira n d o s i h a fin a liza d o o n o .

S i d e s d e d ich o m é t o d o s e n e ce s it a s e a cce d e r a lo s re s u lt a d o s d e l m é t o d o lla m a d o p o d ría a cce d e rs e a


e llo s a t ra vé s d e la p ro p ie d a d AsyncDelegate d e l o b je t o IAsyncResult q u e re cib e . Es t a p ro p ie d a d
co n t ie n e e l o b je t o d e le g a d o a l q u e s e lla m ó , a u n q u e s e m u e s t ra a co n t in u a ció n a n t e s d e a cce d e r a e lla
h a y q u e co n ve rt ir e l p a rá m e t ro IAsyncResult d e e s e m é t o d o e n u n AsyncResult:

public static void M(IAsyncResult iar)


{
D objetoDelegado = (D) ((AsyncResult iar)).AsyncDelegate;

// A partir de aquí podría llamarse a EndInvoke() a


// través de objetoDelegado
}

I m p le m e n t a c ió n in t e rn a d e lo s d e le g a d o s

Cu a n d o h a ce m o s u n a d e fin ició n d e d e le g a d o d e la fo rm a :

<modificadores> delegate <tipoRetorno> <nombre>(<parámetros>);

El co m p ila d o r in t e rn a m e n t e la t ra n s fo rm a e n u n a d e fin ició n d e cla s e d e la fo rm a :

<modificadores> class <nombre>:System.MulticastDelegate


{
private object _target;
private int _methodPtr;
private MulticastDelegate _prev;

public <nombre>(object objetivo, int punteroMétodo)

http://www.programacion.com/tutorial.csharp.13.html (9 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

public virtual <tipoRetorno> Invoke(<parámetros>)

public virtual IAsyncResult BeginInvoke(<parámetros>, AsyncCallback cb,


Object o)

public virtual <tipoRetorno> EndInvoke(<parámetrosRefOut>,IASyncResult ar)

Lo p rim e ro q u e lla m a la a t e n ció n a l le e r la d e fin ició n d e e s t a cla s e e s q u e s u co n s t ru ct o r n o s e p a re ce e n


a b s o lu t o a l q u e h e m o s e s t a d o u s a n d o h a s t a a h o ra p a ra cre a r o b je t o s d e le g a d o . Es t o s e d e b e a q u e e n re a lid a d ,
a p a rt ir d e lo s d a t o s e s p e cifica d o s e n la fo rm a d e u s a r e l co n s t ru ct o r q u e e l p ro g ra m a d o r u t iliza , e l co m p ila d o r
e s ca p a z d e d e t e rm in a r lo s va lo re s a p ro p ia d o s p a ra lo s p a rá m e t ro s d e l ve rd a d e ro co n s t ru ct o r, q u e s o n :

● o b je c t o b je t iv o co n t ie n e e l o b je t o a l cu a l p e rt e n e ce e l m é t o d o e s p e cifica d o , y s u va lo r s e
g u a rd a e n e l ca m p o _target. S i e s u n m é t o d o e s t á t ico a lm a ce n a null.

● in t p u n t e ro Mé t o d o co n t ie n e u n e n t e ro q u e p e rm it e a l co m p ila d o r d e t e rm in a r cu á l e s e l
m é t o d o d e l o b je t o a l q u e s e d e s e a lla m a r, y s u va lo r s e g u a rd a e n e l ca m p o _methodPtr.
S e g ú n d o n d e s e h a ya d e fin id o d ich o m é t o d o , e l va lo r d e e s t e p a rá m e t ro p ro ce d e rá d e la s
t a b la s MethodDef o MethodRef d e lo s m e t a d a t o s .

El ca m p o p riva d o _prev d e u n d e le g a d o a lm a ce n a u n a re fe re n cia a l d e le g a d o p re vio a l m is m o e n la ca d e n a d e


m é t o d o s . En re a lid a d , e n u n o b je t o d e le g a d o co n m ú lt ip le s m é t o d o s lo q u e s e t ie n e e s u n a ca d e n a d e o b je t o s
d e le g a d o s ca d a u n o d e lo s cu a le s co n t ie n e u n o d e lo s m é t o d o s y u n a re fe re n cia ( e n _prev) a o t ro o b je t o
d e le g a d o q u e co n t e n d rá o t ro d e lo s m é t o d o s d e la ca d e n a .

Cu a n d o s e cre a u n o b je t o d e le g a d o co n new s e d a e l va lo r null a s u ca m p o _prev p a ra a s í in d ica r q u e n o


p e rt e n e ce a u n a ca d e n a s in o q u e s ó lo co n t ie n e u n m é t o d o . Cu a n d o s e co m b in e n d o s o b je t o s d e le g a d o s ( co n + o
Delegate.Combine()) e l ca m p o _prev d e l n u e vo o b je t o d e le g a d o cre a d o e n la za rá a lo s d o s o rig in a le s ; y
cu a n d o s e e lim in e n m é t o d o s d e la ca d e n a ( co n - o Delegate.Remove()) s e a ct u a liza rá n lo s ca m p o s _prev
d e la ca d e n a p a ra q u e s a lt e n a lo s o b je t o s d e le g a d o s q u e co n t e n ía n lo s m é t o d o s e lim in a d o s .

Cu a n d o s e s o licit a la e je cu ció n d e lo s m é t o d o s a lm a ce n a d o s e n u n d e le g a d o d e m a n e ra a s ín cro n a lo q u e s e


h a ce e s lla m a r a l m é t o d o Invoke() d e l m is m o . Po r e je m p lo , u n a lla m a d a co m o e s t a :

objDelegado(49);

Es co n ve rt id a p o r e l co m p ila d o r e n :

objDelegado.Invoke(49);

Au n q u e Invoke() e s u n m é t o d o p ú b lico , C# n o p e rm it e q u e e l p ro g ra m a d o r lo lla m e e xp lícit a m e n t e . S in


e m b a rg o , o t ro s le n g u a je s g e s t io n a d o s s í q u e p o d ría n p e rm it irlo .

El m é t o d o Invoke() s e s irve d e la in fo rm a ció n a lm a ce n a d a e n _target, _methodPtr y _prev, p a ra


d e t e rm in a r a cu á l m é t o d o s e h a d e lla m a r y e n q u é o rd e n s e le h a d e lla m a r. As í, la im p le m e n t a ció n d e
Invoke() s e rá d e la fo rm a :

public virtual <tipoRetorno> Invoke(<parámetros>)


{
if (_prev!=null)
_prev.Invoke(<parámetros>);

http://www.programacion.com/tutorial.csharp.13.html (10 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

return _target._methodPtr(<parámetros>);
}

Ob via m e n t e la s in t a xis _target.methodPtr n o e s vá lid a e n C# , ya q u e _methodPtr n o e s u n m é t o d o s in o


u n ca m p o . S in e m b a rg o , s e h a e s crit o a s í p a ra p o n e r d e m a n ifie s t o q u e lo q u e e l co m p ila d o r h a ce e s g e n e ra r e l
có d ig o a p ro p ia d o p a ra lla m a r a l m é t o d o p e rt e n e cie n t e a l o b je t o in d ica d o e n _target e id e n t ifica d o co n e l va lo r
d e _methodPtr

Nó t e s e q u e la in s t ru cció n if in clu id a s e u s a p a ra a s e g u ra r q u e la s lla m a d a s a lo s m é t o d o s d e la ca d e n a s e


h a g a n e n o rd e n : s i e l o b je t o d e le g a d o n o e s e l ú lt im o d e la ca d e n a . ( _prev!=null) s e lla m a rá a n t e s a l m é t o d o
Invoke() d e s u p re d e ce s o r.

Po r ú lt im o , s ó lo s e ñ a la r q u e , co m o e s ló g ico , e n ca s o d e q u e lo s m é t o d o s q u e e l o b je t o d e le g a d o p u e d a
a lm a ce n a r n o t e n g a n va lo r d e re t o rn o ( é s t e s e a void) , e l cu e rp o d e Invoke() s ó lo va ría e n q u e la p a la b ra
re s e rva d a return e s e lim in a d a d e l m is m o .

Ev e n t o s

Co n c e p t o d e e v e n t o

Un e v e n t o e s u n a va ria n t e d e la s p ro p ie d a d e s p a ra lo s ca m p o s cu yo s t ip o s s e a n d e le g a d o s . Es d e cir, p e rm it e n
co n t ro la r la fo rm a n e n q u e s e a cce d e a lo s ca m p o s d e le g a d o s y d a n la p o s ib ilid a d d e a s o cia r có d ig o a e je cu t a r
ca d a ve z q u e s e a ñ a d a o e lim in e u n m é t o d o d e u n ca m p o d e le g a d o .

S in t a x is b á s ic a d e d e fin ic ió n d e d e le g a d o s

La s in t a xis b á s ica d e d e fin ició n d e u n e ve n t o co n s is t e e n d e fin irlo co m o cu a lq u ie r o t ro ca m p o co n la ú n ica


p e cu lia rid a d d e q u e s e le h a d e a n t e p o n e r la p a la b ra re s e rva d a event a l n o m b re d e s u t ip o ( q u e s e rá u n
d e le g a d o ) O s e a , s e s ig u e la s in t a xis :

<modificadores> event <tipoDelegado> <nombreEvento>;

Po r e je m p lo , p a ra d e fin ir u n e ve n t o d e n o m b re Pru e b a y t ip o d e le g a d o D s e h a ría :

public event D Prueba;

Ta m b ié n p u e d e n d e fin irs e m ú lt ip le s e ve n t o s e n u n a m is m a lín e a s e p a ra n d o s u s n o m b re s m e d ia n t e co m a s . Po r


e je m p lo :

public event D Prueba1, Prueba2;

De s d e có d ig o u b ica d o d e n t ro d e l m is m o t ip o d e d a t o d o n d e s e h a ya d e fin id o e l e ve n t o s e p u e d e u s a r e l e ve n t o
t a l y co m o s i d e u n ca m p o d e le g a d o n o rm a l s e t ra t a s e . S in e m b a rg o , d e s d e có d ig o u b ica d o e xt e rn a m e n t e s e
im p o n e n u n a s e rie d e re s t riccio n e s q u e p e rm it e co n t ro la r la fo rm a e n q u e s e a cce d e a l m is m o . És t a s s o n :

● No s e le p u e d e a p lica r lo s m é t o d o s h e re d a d o s d e System.MulticastDelegate.

● S ó lo s e le p u e d e a p lica r d o s o p e ra cio n e s : a ñ a d id o d e m é t o d o s co n += y e lim in a ció n d e


m é t o d o s co n -=. De e s t e m o d o s e e vit a q u e s e u s e s in q u e re r = e n ve z d e += ó -= y s e
s u s t it u ya n t o d o s lo s m é t o d o s d e la lis t a d e m é t o d o s d e l ca m p o d e le g a d o p o r o t ro q u e e n
re a lid a d s e le q u e ría a ñ a d ir o q u it a r ( s i e s e o t ro va lie s e null, e llo in clu s o p o d ría p ro vo ca r u n a
System.NullReferenceException)

● No e s p o s ib le lla m a r a lo s m é t o d o s a lm a ce n a d o s e n u n ca m p o d e le g a d o a t ra vé s d e l m is m o .

http://www.programacion.com/tutorial.csharp.13.html (11 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

Es t o p e rm it e co n t ro la r la fo rm a e n q u e s e le s lla m a , ya q u e o b lig a a q u e la lla m a d a t e n g a q u e


h a ce rs e a t ra vé s d e a lg ú n m é t o d o p ú b lico d e fin id o e n la d e fin ició n d e l t ip o d e d a t o d o n d e e l
e ve n t o fu e d e fin id o .

S in t a x is c o m p le t a d e d e fin ic ió n d e d e le g a d o s

La ve rd a d e ra u t ilid a d d e u n e ve n t o e s q u e p e rm it e co n t ro la r la fo rm a e n q u e s e a s o cia n y q u it a n m é t o d o s d e lo s
o b je t o s d e le g a d o s co n += y -=. Pa ra e llo s e h a n d e d e fin ir co n la s ig u ie n t e s in t a xis a va n za d a :

<modificadores> event <tipoDelegado> <nombreEvento>


{
add
{
<códigoAdd>
}
remove
{
<códigoRemove>
}
}

Co n e s t a s in t a xis n o p u e d e n d e fin irs e va rio s e ve n t o s e n u n a m is m a lín e a co m o o cu rría co n la b á s ica . S u


s ig n ifica d o e s e l s ig u ie n t e : cu a n d o s e a s o cie u n m é t o d o co n += a l e ve n t o s e e je cu t a rá e l <códigoAdd>, y
cu a n d o s e le q u it e a lg u n o co n -= s e e je cu t a rá e l <códigoRemove>. Es t a s in t a xis e s s im ila r a la d e lo s b lo q u e s
set/ get d e la s p ro p ie d a d e s p e ro co n u n a im p o rt a n t e d ife re n cia : a u n q u e p u e d e n p e rm u t a rs e la s s e ccio n e s add
y remove, e s o b lig a t o rio in clu ir s ie m p re a a m b a s .

La s in t a xis b á s ica e s e n re a lid a d u n a fo rm a a b re via d a d e u s a r la a va n za d a . As í, la d e fin ició n public event D


Prueba(int valor); la in t e rp re t a ría e l co m p ila d o r co m o :

private D prueba

public event D Prueba


{
[MethodImpl(MethodImlOptions.Synchronized)]
add
{
prueba = (D) Delegate.Combine(prueba, value);
}

[MethodImpl(MethodImlOptions.Synchronized)]
remove
{
prueba = (D) Delegate.Remove(prueba, value);
}
}

Es d e cir, e l co m p ila d o r d e fin irá u n ca m p o d e le g a d o p riva d o y có d ig o s p a ra add y remove q u e h a g a n q u e e l u s o


d e += y -= s o b re e l e ve n t o t e n g a e l e fe ct o q u e n o rm a lm e n t e t e n d ría n s i s e a p lica s e n d ire ct a m e n t e s o b re e l
ca m p o p riva d o . Co m o s e ve , d e n t ro d e e s t o s m é t o d o s s e p u e d e u s a r value p a ra h a ce r re fe re n cia a l o p e ra n d o
d e re ch o d e lo s o p e ra d o re s += y -=. El a t rib u t o System.Runtime.InteropServices.MethodImpl q u e
p re ce d e a lo s b lo q u e s add y remove s ó lo s e in clu ye p a ra a s e g u ra r q u e u n ca m b io d e h ilo n o p u e d a in t e rru m p ir
la e je cu ció n d e s u s có d ig o s a s o cia d o s .

La s re s t riccio n e s d e u s o d e e ve n t o s d e s d e có d ig o s e xt e rn o s a l t ip o d o n d e s e h a n d e fin id o s e d e b e n a q u e e n
re a lid a d é s t o s n o s o n o b je t o s d e le g a d o s s in o q u e e l o b je t o d e le g a d o e s e l ca m p o p riva d o q u e in t e rn a m e n t e

http://www.programacion.com/tutorial.csharp.13.html (12 de 13) [20/10/2002 18:22:00]


Programación en castellano. El lenguaje de programación C#

d e fin e e l co m p ila d o r. El co m p ila d o r t ra d u ce t o d a lla m a d a a l e ve n t o e n u n a lla m a d a a l ca m p o d e le g a d o . Co m o


e s t e e s p riva d o , p o r e s o s ó lo p u e d a a cce d e rs e a é l d e s d e có d ig o d e s u p ro p io t ip o d e d a t o .

En re a lid a d , e l co m p ila d o r in t e rn a m e n t e t ra d u ce la s s e ccio n e s add y remove d e la d e fin ició n d e u n e ve n t o e n


m é t o d o s d e la fo rm a :

void add_<nombreEvento>(<tipoDelegado> value)


void remove_<nombreEvento>(<tipoDelegado> value)

To d a a p lica ció n d e += y -= a u n e ve n t o n o e s co n ve rt id a e n u n a lla m a d a a l ca m p o p riva d o s in o e n u n a lla m a d a


a l m é t o d o add/ remove a p ro p ia d o , co m o s e p u e d e o b s e rva r a n a liza n d o e l MS IL d e cu a lq u ie r fu e n t e d o n d e s e
u s e n += y -= s o b re e ve n t o s . Ad e m á s , co m o e s t o s m é t o d o s d e vu e lve n void é s e s e rá e l t ip o d e l va lo r d e vu e lt o
a l a p lica r += ó -= ( y n o e l o b je t o a s ig n a d o ) , lo q u e e vit a rá q u e có d ig o e xt e rn o a l t ip o d o n d e s e h a ya d e fin id o e l
e ve n t o p u e d a a cce d e r d ire ct a m e n t e a l ca m p o d e le g a d o p riva d o .

S i e n ve z d e la s in t a xis b á s ica u s a m o s la co m p le t a n o s e d e fin irá a u t o m á t ica m e n t e u n ca m p o d e le g a d o p o r ca d a


e ve n t o q u e s e d e fin a , p o r lo q u e t a m p o co s e rá p o s ib le h a ce r re fe re n cia a l m is m o d e s d e có d ig o u b ica d o e n la
m is m a cla s e d o n d e s e h a d e fin id o . S in e m b a rg o e llo p e rm it e q u e e l p ro g ra m a d o r p u e d a d e t e rm in a r, a t ra vé s d e
s e ccio n e s add y remove, có m o s e a lm a ce n a rá n lo s m é t o d o s . Po r e je m p lo , p a ra a h o rra r m e m o ria s e p u e d e
o p t a r p o r u s a r u n d iccio n a rio d o n d e a lm a ce n a r lo s m é t o d o s a s o cia d o s a va rio s e ve n t o s d e u n m is m o o b je t o e n
lu g a r d e u s a r u n o b je t o d e le g a d o p o r ca d a u n o .

Da d o q u e la s s e ccio n e s add y remove s e t ra d u ce n co m o m é t o d o s , lo s e ve n t o s t a m b ié n p o d rá n p a rt icip a r e n e l


m e ca n is m o d e h e re n cia y re d e fin icio n e s t íp ico d e lo s m é t o d o s . Es d e cir, e n < m o d ifica d o re s > a p a rt e d e
m o d ifica d o re s d e a cce s o y e l m o d ifica d o r static, t a m b ié n s e p o d rá n in clu ir lo s m o d ifica d o re s re la t ivo s a
h e re n cia . En e s t e s e n t id o h a y q u e p re cis a r a lg o : u n e ve n t o d e fin id o co m o abstract h a d e d e fin irs e s ie m p re
co n la s in t a xis b á s ica ( n o in clu irá s e ccio n e s add o remove)

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.13.html (13 de 13) [20/10/2002 18:22:01]


http://www.programacion.com/tutorial.csharp.14.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Te m a 1 3 : Es t ru ct u ra s
❍ Co n ce p t o d e e s t ru ct u ra
❍ Dife re n cia s e n t re cla s e s y e s t ru ct u ra s
❍ Bo xin g y u n b o xin g
❍ Co n s t ru ct o re s

Te m a 1 3 : Es t ru c t u ra s

Co n c e p t o d e e s t ru c t u ra

Un a e s t ru c t u ra e s u n t ip o e s p e cia l d e cla s e p e n s a d a p a ra re p re s e n t a r o b je t o s lig e ro s . Es d e cir, q u e


o cu p e n p o ca m e m o ria y d e b a n s e r m a n ip u la d o s co n ve lo cid a d , co m o o b je t o s q u e re p re s e n t e n
p u n t o s , fe ch a s , e t c. Eje m p lo s d e e s t ru ct u ra s in clu id a s e n la BCL s o n la m a yo ría d e lo s t ip o s b á s ico s
( e xce p t o string y object) , y d e h e ch o la s e s t ru ct u ra s ju n t o co n la re d e fin ició n d e o p e ra d o re s s o n
la fo rm a id e a l d e d e fin ir n u e vo s t ip o s b á s ico s a lo s q u e s e a p liq u e n la s m is m a o p t im iza cio n e s q u e a
lo s p re d e fin id o s .

D ife re n c ia s e n t re c la s e s y e s t ru c t u ra s

A d ife re n cia d e u n a cla s e y fie lm e n t e a s u e s p írit u d e "lig e re za ", u n a e s t ru ct u ra n o p u e d e d e riva r d e


n in g ú n t ip o y n in g ú n t ip o p u e d e d e riva r d e e lla Po r e s t a s ra zo n e s s u s m ie m b ro s n o p u e d e n in clu ir
m o d ifica d o re s re la t ivo s a h e re n cia , a u n q u e co n u n a e xce p ció n : p u e d e n in clu ir override p a ra
re d e fin ir lo s m ie m b ro s d e System.Object.

Ot ra d ife re n cia e n t re la s e s t ru ct u ra s y la s cla s e s e s q u e s u s va ria b le s n o a lm a ce n a n re fe re n cia s a


zo n a s d e m e m o ria d in á m ica d o n d e s e e n cu e n t ra n a lm a ce n a d o s o b je t o s s in o d ire ct a m e n t e re fe re n cia n
a o b je t o s . Po r e llo s e d ice q u e la s cla s e s s o n t ip o s re fe re n c ia y la s e s t ru ct u ra s s o n t ip o s v a lo r,
s ie n d o p o s ib le t a n t o e n co n t ra r o b je t o s d e e s t ru ct u ra s e n p ila ( n o s o n ca m p o s d e cla s e s ) co m o e n
m e m o ria d in á m ica ( s o n ca m p o s d e cla s e s )

Un a p rim e ra co n s e cu e n cia d e e s t o e s q u e lo s a cce s o s a m ie m b ro s d e o b je t o s d e t ip o s va lo r s o n

http://www.programacion.com/tutorial.csharp.14.html (1 de 6) [20/10/2002 18:22:06]


http://www.programacion.com/tutorial.csharp.14.html

m u ch o m á s rá p id o s q u e lo s a cce s o s a m ie m b ro s d e p ila s , ya q u e e s n e ce s a rio p a s a r p o r u n a


re fe re n cia m e n o s a la h o ra d e a cce d e r a e llo s . Ad e m á s , e l t ie m p o d e cre a ció n y d e s t ru cció n d e
e s t ru ct u ra s t a m b ié n e s in fe rio r. De h e ch o , la d e s t ru cció n d e lo s o b je t o s a lm a ce n a d o s e n p ila e s
p rá ct ica m e n t e in a p re cia b le ya q u e s e re a liza co n u n s im p le d e cre m e n t o d e l p u n t e ro d e p ila y n o
in t e rvie n e e n e lla e l re co le ct o r d e b a s u ra .

Ot ra co n s e cu e n cia d e lo a n t e rio r e s q u e cu a n d o s e re a lice n a s ig n a cio n e s e n t re va ria b le s d e t ip o s


va lo r, lo q u e s e va a co p ia r e n la va ria b le d e s t in o e s e l o b je t o a lm a ce n a d o p o r la va ria b le fu e n t e y n o
la d ire cció n d e m e m o ria d in á m ica a la q u e a p u n t a b a é s t a . Po r e je m p lo , d a d o e l s ig u ie n t e t ip o ( n ó t e s e
q u e la s e s t ru ct u ra s s e d e fin e n ig u a l q u e la s cla s e s p e ro u s a n d o la p a la b ra re s e rva d a struct e n ve z
d e class) :

struct Point
{
public int x, y;

public Point(int x, int y)


{
this.x = x;
this.y = y;
}
}

S i u s a m o s e s t e t ip o e n u n có d ig o co m o e l s ig u ie n t e :

Punto p = new Punto(10,10);


Punto p2 = p;
p2.x = 100;
Console.WriteLine(p.x);

Lo q u e s e m o s t ra rá p o r p a n t a lla s e rá 10. Es t o s e d e b e a q u e e l va lo r d e x m o d ifica d o e s e l d e p2,


q u e e s co m o e s u n a co p ia d e p lo s ca m b io s q u e s e le h a g a n n o a fe ct a rá n a p. S in e m b a rg o , s i Punto
h u b ie s e s id o d e fin id o co m o u n a cla s e e n t o n ce s s í q u e s e h u b ie s e m o s t ra d o p o r p a n t a lla 100, ya q u e
e n e s e ca s o lo q u e s e h a b ría co p ia d o e n p2 h a b ría s id o u n a re fe re n cia a la m is m a d ire cció n d e
m e m o ria d in á m ica re fe re n cia d a p o r p, p o r lo q u e cu a lq u ie r ca m b io q u e s e h a g a e n e s a zo n a a t ra vé s
d e p2 t a m b ié n a fe ct a rá a p.

De lo a n t e rio r s e d e d u ce q u e la a s ig n a ció n e n t re o b je t o s d e t ip o s e s t ru ct u ra s e s m u ch o m á s le n t a
q u e la a s ig n a ció n e n t re o b je t o s d e cla s e s , ya q u e s e h a d e co p ia r u n o b je t o co m p le t o y n o s o lo u n a
re fe re n cia . Pa ra a livia r e s t o a l p a s a r o b je t o s d e t ip o s e s t ru ct u ra co m o p a rá m e t ro s , s e d a la
p o s ib ilid a d d e p a s a rlo s co m o p a rá m e t ro s p o r re fe re n cia ( m o d ifica d o r ref) o p a rá m e t ro s d e s a lid a
( out) e n ve z d e co m o p a rá m e t ro s d e e n t ra d a .

To d a s la s e s t ru ct u ra s d e riva n im p lícit a m e n t e d e l t ip o System.ValueType, q u e a s u ve z d e riva d e la


cla s e p rim ig e n ia System.Object. ValueType t ie n e lo s m is m o s m ie m b ro s q u e s u p a d re , y la ú n ica
d ife re n cia s e ñ a la b le e n t re a m b o s e s q u e e n ValueType s e h a re d e fin id o Equals() d e m o d o q u e
d e vu e lva true s i lo s o b je t o s co m p a ra d o s t ie n e n e l m is m o va lo r e n t o d o s s u s ca m p o s y false s i n o .
Es d e cir, la co m p a ra ció n e n t re e s t ru ct u ra s co n Equals() s e re a liza p o r va lo r.

Re s p e ct o a la im p le m e n t a ció n d e la ig u a ld a d e n lo s t ip o s d e fin id o s co m o e s t ru ct u ra s , t a m b ié n e s
im p o rt a n t e t e n e r m u y e n cu e n t a q u e e l o p e ra d o r == n o e s e n p rin cip io a p lica b le a la s e s t ru ct u ra s q u e
d e fin a e l p ro g ra m a d o r. S i s e d e s e a q u e lo t e n g a h a d e d á rs e le e xp lícit a m e n t e u n a re d e fin ició n a l

http://www.programacion.com/tutorial.csharp.14.html (2 de 6) [20/10/2002 18:22:06]


http://www.programacion.com/tutorial.csharp.14.html

d e fin ir d ich a s e s t ru ct u ra s .

Bo x in g y u n b o x in g

Da d o q u e t o d a e s t ru ct u ra d e riva d e System.Object, h a d e s e r p o s ib le a t ra vé s d e l p o lim o rfis m o


a lm a ce n a r o b je t o s d e e s t o s t ip o s e n o b je t o s object. S in e m b a rg o , e s t o n o p u e d e h a ce rs e
d ire ct a m e n t e d e b id o a la s d ife re n cia s s e m á n t ica s y d e a lm a ce n a m ie n t o q u e e xis t e n e n t re cla s e s y
e s t ru ct u ra s : u n object s ie m p re h a d e a lm a ce n a r u n a re fe re n cia a u n o b je t o e n m e m o ria d in á m ica y
u n a e s t ru ct u ra n o t ie n e p o rq u é e s t a rlo . Po r e llo h a d e re a lizá rs e le a n t e s a l o b je t o d e t ip o va lo r u n a
co n ve rs ió n co n o cid a co m o b o x in g . Re cíp ro ca m e n t e , a l p ro ce s o d e co n ve rs ió n d e u n object q u e
co n t e n g a u n o b je t o d e u n t ip o va lo r a l t ip o va lo r o rig in a l s e le d e n o m in a u n b o x in g .

El p ro ce s o d e b o xin g e s m u y s e n cillo . Co n s is t e e n e n vo lve r e l o b je t o d e t ip o va lo r e n u n o b je t o d e u n


t ip o re fe re n cia cre a d o e s p e cífica m e n t e p a ra e llo . Po r e je m p lo , p a ra u n o b je t o d e u n t ip o va lo r T, e l
t ip o re fe re n cia cre a d o s e ría d e la fo rm a :

class T_Box
{
T value;
T_Box(T t)
{
value = t;
}
}

En re a lid a d t o d o e s t o o cu rre d e fo rm a t ra n s p a re n t e a l p ro g ra m a d o r, e l cu a l s im p le m e n t e a s ig n a e l
o b je t o d e t ip o va lo r a u n o b je t o d e t ip o re fe re n cia co m o s i d e cu a lq u ie r a s ig n a ció n p o lim ó rfica s e
t ra t a s e . Po r e je m p lo :

int p = new Punto(10,10);


object o = p; // boxing. Es equivalente a object o = new Punto_Box(p);

En re a lid a d la cla s e e n vo lt o rio a rrib a e s crit a n o s e cre a n u n ca , p e ro co n ce p t u a lm e n t e e s co m o s i s e


cre a s e . Es t o s e p u e d e co m p ro b a r vie n d o a t ra vé s d e l s ig u ie n t e có d ig o q u e e l ve rd a d e ro t ip o d e l
o b je t o o d e l e je m p lo a n t e rio r s ig u e s ie n d o Punto ( y n o Punto_Box) :

Console.WriteLine((p is Punto));

La s a lid a p o r p a n t a lla d e e s t e có d ig o e s Tru e , lo q u e co n firm a q u e s e s ig u e co n s id e ra n d o q u e e n


re a lid a d o a lm a ce n a u n Pu n t o ( re cu é rd e s e q u e e l o p e ra d o r is s ó lo d e vu e lve true s i e l o b je t o q u e s e
le p a s a co m o o p e ra n d o izq u ie rd o e s d e l t ip o q u e s e le in d ica co m o o p e ra n d o d e re ch o )

El p ro ce s o d e u n b o xin g e s t a m b ié n t ra n s p a re n t e a l p ro g ra m a d o r. Po r e je m p lo , p a ra re cu p e ra r co m o
Punto e l va lo r d e t ip o Punto a lm a ce n a d o e n e l o b je t o o a n t e rio r s e h a ría :

p = (Punto) o; // Es equivalente a ((Punto_Box) o).value

Ob via m e n t e d u ra n t e e l u n b o xin g s e h a rá u n a co m p ro b a ció n d e t ip o p a ra a s e g u ra r q u e e l o b je t o


a lm a ce n a d o e n o e s re a lm e n t e d e t ip o Punto. Es t a co m p ro b a ció n e s t a n e s t rict a q u e s e h a d e
cu m p lir q u e e l t ip o e s p e cifica d o s e a e xa ct a m e n t e e l m is m o q u e e l t ip o o rig in a l d e l o b je t o , n o va le q u e
s e a u n co m p a t ib le . Po r t a n t o , e s t e có d ig o e s in vá lid o :

http://www.programacion.com/tutorial.csharp.14.html (3 de 6) [20/10/2002 18:22:06]


http://www.programacion.com/tutorial.csharp.14.html

int i = 123;
object o = i;
long l = (long) o // Error: o contiene un int, no un long

S in e m b a rg o , lo q u e s i s e ría vá lid o e s h a ce r:

long l = (long) (int) o;

Co m o s e p u e d e a p re cia r e n e l co n s t ru ct o r d e l t ip o e n vo lt o rio cre a d o , d u ra n t e e l b o xin g e l e n vo lt o rio


q u e s e cre a re cib e u n a co p ia d e l va lo r d e l o b je t o a co n ve rt ir, p o r lo q u e lo s ca m b io s q u e s e le h a g a n
n o a fe ct a rá n a l o b je t o o rig in a l. Po r e llo , la s a lid a d e l s ig u ie n t e có d ig o s e rá 1 0 :

Punto p = new Punto(10,10);


object o = p; // boxing
p.X = 100;
Console.WriteLine( ((Punto) o).X); // unboxing

S in e m b a rg o , s i Punto s e h u b ie s e d e fin id o co m o u n a cla s e e n t o n ce s s í q u e s e m o s t ra ría p o r p a n t a lla


u n 1 0 0 ya q u e e n t o n ce s n o s e h a ría b o xin g e n la a s ig n a ció n d e p a o s in o q u e s e a p lica ría e l
m e ca n is m o d e p o lim o rfis m o n o rm a l, q u e co n s is t e e n t ra t a r p a t ra vé s d e o co m o s i fu e s e d e t ip o
object p e ro s in re a liza rs e n in g u n a co n ve rs ió n .

El p ro b le m a d e l b o xin g y e l u n b o xin g e s q u e s o n p ro ce s o s le n t o s , ya q u e im p lica n la cre a ció n y


d e s t ru cció n d e o b je t o s e n vo lt o rio . Po r e llo p u e d e in t e re s a r e vit a rlo s e n a q u e lla s s it u a cio n e s d o n d e la
ve lo cid a d d e e je cu ció n d e la a p lica ció n s e a crít ica , y p a ra e llo s e p ro p o n e n va ria s t é cn ica s :

● S i e l p ro b le m a s e d e b e a l p a s o d e e s t ru ct u ra s co m o p a rá m e t ro s d e m é t o d o s
g e n é rico s q u e t o m e n p a rá m e t ro s d e t ip o object, p u e d e co n ve n ir d e fin ir
s o b re ca rg a s d e e s o s m é t o d o s q u e e n lu g a r d e t o m a r objects t o m e n o b je t o s d e lo s
t ip o s e s t ru ct u ra q u e e n co n cre t o la a p lica ció n u t iliza

● S ig u ie n d o e n la lín e a d e lo a n t e rio r, p u e d e q u e in t e re s e u s a r p la n t illa s e n lu g a r d e


t ip o s g e n é rico s . És t a s n o s o n m á s q u e d e fin icio n e s d e t ip o s d e d a t o s e n la s q u e n o
s e in d ica cu á l e s e l t ip o e xa ct o d e cie rt a s va ria b le s s in o q u e s e d e ja e n fu n ció n d e
p a rá m e t ro s a lo s q u e p u e d e d á rs e le s d is t in t o s va lo re s a l cre a r ca d a o b je t o d e e s e
t ip o . As í, e n ve z d e cre a rs e s ie m p re o b je t o s co n m é t o d o s q u e t o m e n p a rá m e t ro s
object, s e p o d ría n ir cre a n d o d ife re n t e s ve rs io n e s d e l t ip o s e g ú n e l t ip o d e
e s t ru ct u ra co n la q u e s e va ya a t ra b a ja r.

Act u á lm e n t e e l CLR p u e d e t ra b a ja r co n p la n t illa s , p e ro s e e s p e ra q u e e n ve rs io n e s fu t u ra s d e l . NET


Fra m e wo rk lo h a g a y e l le n g u a je C# la s in clu ya .

● Mu ch a s ve ce s co n vie n e h a ce r u n b o xin g p a ra p o d e r a cce d e r a m ie m b ro s e s p e cífico s


d e cie rt a s e s t ru ct u ra s a lm a ce n a d a s e n objects , a u n q u e a co n t in u a ció n vu e lva a
n e ce s it a rs e re a lm a ce n a r la e s t ru ct u ra e n u n object. Pa ra e vit a r e s t o u n a p o s ib ilid a d
s e ría a lm a ce n a r e n e l o b je ct o n o d ire ct a m e n t e la e s t ru ct u ra s in o u n o b je t o d e u n a
cla s e e n vo lve n t e cre a d a a m e d id a p o r e l p ro g ra m a d o r y q u e in clu ya lo s m ie m b ro s
n e ce s a rio s p a ra h a ce r la s o p e ra cio n e s a n t e rio re s . As í s e e vit a ría t e n e r q u e h a ce r
u n b o xin g , p u e s s e co n ve rt iría d e object a e s a cla s e , q u e n o e s u n t ip o va lo r y p o r

http://www.programacion.com/tutorial.csharp.14.html (4 de 6) [20/10/2002 18:22:06]


http://www.programacion.com/tutorial.csharp.14.html

t a n t o n o im p lica u n b o xin g .

● Co n la m is m a id e a , o t ra p o s ib ilid a d s e ría q u e e l t ip o e s t ru ct u ra im p le m e n t a s e
cie rt a s in t e rfa ce s m e d ia n t e la s q u e s e p u d ie s e h a ce r la s o p e ra cio n e s a n t e s
co m e n t a d a s . Au n q u e la s in t e rfa ce s n o s e t ra t a rá n h a s t a e l Te m a 1 5 : In t e rfa ce s , p o r
a h o ra b a s t a s a b e r q u e la s in t e rfa ce s s o n t a m b ié n t ip o s re fe re n cia y p o r t a n t o
co n ve rt ir d e object a u n t ip o in t e rfa z n o im p lica u n b o xin g .

Co n s t ru c t o re s

Lo s co n s t ru ct o re s d e la s e s t ru ct u ra s s e co m p o rt a n d e u n a fo rm a d is t in t a a lo s d e la s cla s e s . Po r u n
la d o , n o p u e d e n in clu ir n in g ú n in icia liza d o r b a s e d e b id o a q u e co m o n o p u e d e h a b e r h e re n cia e l
co m p ila d o r s ie m p re s a b e q u e h a d e lla m a r a l co n s t ru ct o r s in p a rá m e t ro s d e System.ValueType.
Po r o t ro , d e n t ro d e s u cu e rp o n o s e p u e d e a cce d e r a s u s m ie m b ro s h a s t a in icia liza rlo s , p u e s p a ra
a h o rra r t ie m p o n o s e le s d a n in g ú n va lo r in icia l a n t e s d e lla m a r a l co n s t ru ct o r.

S in e m b a rg o , la d ife re n cia m á s im p o rt a n t e e n t re lo s co n s t ru ct o re s d e a m b o s t ip o s s e e n cu e n t ra e n la
im p le m e n t a ció n d e l co n s t ru ct o r s in p a rá m e t ro s : co m o lo s o b je t o s e s t ru ct u ra n o p u e d e a lm a ce n a r e l
va lo r p o r d e fe ct o null cu a n d o s e d e cla ra n s in u s a r co n s t ru ct o r ya q u e e s e va lo r in d ica re fe re n cia a
p o s ició n d e m e m o ria d in á m ica in d e t e rm in a d a y lo s o b je t o s e s t ru ct u ra n o a lm a ce n a n re fe re n cia s , t o d a
e s t ru ct u ra s ie m p re t ie n e d e fin id o u n co n s t ru ct o r s in p a rá m e t ro s q u e lo q u e h a ce e s d a rle e n e s o s
ca s o s u n va lo r p o r d e fe ct o a lo s o b je t o s d e cla ra d o s . Es e va lo r co n s is t e e n p o n e r a ce ro t o d a la
m e m o ria o cu p a d a p o r e l o b je t o , lo q u e t ie n e e l e fe ct o d e d a r co m o va lo r a ca d a ca m p o e l ce ro d e s u
t ip o . Po r e je m p lo , e l s ig u ie n t e có d ig o im p rim e u n 0 e n p a n t a lla :

Punto p = new Punto();


Console.WriteLine(p.X);

Y e l s ig u ie n t e t a m b ié n :

using System;

struct Punto
{
public int X,Y;
}

class EjemploConstructorDefecto
{
Punto p;

public static void Main()


{
Console.WriteLine(p.X);
}
}

S in e m b a rg o , e l h e ch o d e q u e e s t e co n s t ru ct o r p o r d e fe ct o s e a p liq u e n o im p lica q u e s e p u e d a
a cce d e r a la s va ria b le s lo ca le s s in a n t e s in icia liza rla s co n o t ro va lo r. Po r e je m p lo , e l s ig u ie n t e
fra g m e n t e d e có d ig o d e u n m é t o d o s e ría in co rre ct o :

Punto p;

http://www.programacion.com/tutorial.csharp.14.html (5 de 6) [20/10/2002 18:22:06]


http://www.programacion.com/tutorial.csharp.14.html

Console.WriteLine(p.X); // X no inicializada

S in e m b ra g o , co m o a la s e s t ru ct u ra s d e cla ra d a s s in co n s t ru ct o r n o s e le s d a e l va lo r p o r d e fe ct o
null, s í q u e s e ría vá lid o :

Punto p;
p.X = 2;
Console.WriteLine(p.X);

Pa ra a s e g u ra r u n va lo r p o r d e fe ct o co m ú n a t o d o s lo s o b je t o s e s t ru ct u ra , s e p ro h íb e a l p ro g ra m a d o r
d a r u n a d e fin ició n p ro p ia d e s u co n s t ru ct o r s in p a rá m e t ro s . Mie n t ra s q u e e n la s cla s e s e s o p cio n a l
im p le m e n t a rlo y s i n o s e h a ce e l co m p ila d o r in t ro d u ce u n o p o r d e fe ct o , e n la s e s t ru ct u ra s n o e s
vá lid o h a ce rlo . Ad e m á s , a ú n e n e l ca s o d e q u e s e d e fin a n o t ro s co n s t ru ct o re s , e l co n s t ru ct o r s in
p a rá m e t ro s s e g u irá s ie n d o in t ro d u cid o a u t o m á t ica m e n t e p o r e l co m p ila d o r a d ife re n cia d e có m o
o cu rría co n la s cla s e s d o n d e e n e s e ca s o e l co m p ila d o r n o lo in t ro d u cía .

Po r o t ro la d o , p a ra co n s e g u ir q u e e l va lo r p o r d e fe ct o d e t o d o s lo s o b je t o s e s t ru ct u ra s s e a e l m is m o ,
s e p ro h íb e d a rle s u n a va lo r in icia l a s u s ca m p o s e n e l m o m e n t o d e d e cla ra rlo s , p u e s s i n o e l
co n s t ru ct o r p o r d e fe ct o h a b ría d e t e n e rlo s e n cu e n t a y s u e je cu ció n s e ría m á s in e ficie n t e . Po r e s t a
ra zó n , lo s co n s t ru ct o re s d e fin id o s p o r e l p ro g ra m a d o r p a ra u n a e s t ru ct u ra h a n d e in icia liza r t o d o s s u s
m ie m b ro s n o e s t á t ico s e n t a n t o q u e a n t e s d e lla m a rlo s n o s e le s d a n in g ú n va lo r in icia l.

Nó t e s e q u e d e b id o a la e xis t e n cia d e u n co n s t ru ct o r p o r d e fe ct o cu ya im p le m e n t a ció n e s ca p a d e


m a n o s d e l p ro g ra m a d o r, e l có d ig o d e lo s m é t o d o s d e u n a e s t ru ct u ra p u e d e t e n e r q u e co n s id e ra r la
p o s ib ilid a d d e q u e s e a cce d a a e llo s co n lo s va lo re s re s u lt a n t e s d e u n a in icia liza ció n co n e s e
co n s t ru ct o r. Po r e je m p lo , d a d o :

struct A
{
public readonly string S;

public A(string s)
{
if (s==null)
throw (new ArgumentNullException());
this.s = S;
}
}

Na d a a s e g u ra q u e e n e s t e có d ig o lo s o b je t o s d e cla s e A s ie m p re s e in icia lice n co n u n va lo r d is t in t o d e


null e n s u ca m p o S, p u e s a u n q u e e l co n s t ru ct o r d e fin id o p a ra A co m p ru e b a q u e e s o n o o cu rra
la n za n d o u n a e xce p ció n e n ca s o d e q u e s e le p a s e u n a ca d e n a q u e va lg a null, s i e l p ro g ra m a d o r
u s a e l co n s t ru ct o r p o r d e fe ct o cre a rá u n o b je t o e n e l q u e S va lg a null. Ad e m á s , n i s iq u ie ra e s vá lid o
e s p e cifica r u n va lo r in icia l a S e n s u d e fin ició n , ya q u e p a ra in icia liza r rá p id a m e n t e la s e s t ru ct u ra s
s u s ca m p o s n o e s t á t ico s n o p u e d e n t e n e r va lo re s in icia le s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.14.html (6 de 6) [20/10/2002 18:22:06]


http://www.programacion.com/tutorial.csharp.15.html

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 1 4 : En u m e ra cio n e s
❍ Co n ce p t o d e e n u m e ra ció n
❍ De fin ició n d e e n u m e ra cio n e s
❍ Us o d e e n u m e ra cio n e s
❍ La cla s e S ys t e m . En u m
❍ En u m e ra cio n e s d e fla g s

Te m a 1 4 : En u m e ra c io n e s

Co n c e p t o d e e n u m e ra c ió n

Un a e n u m e ra c ió n o t ip o e n u m e ra d o e s u n t ip o e s p e cia l d e e s t ru ct u ra e n la q u e lo s lit e ra le s d e lo s va lo re s q u e
p u e d e n t o m a r s u s o b je t o s s e in d ica n e xp lícit a m e n t e a l d e fin irla . Po r e je m p lo , u n a e n u m e ra ció n d e n o m b re Ta m a ñ o
cu yo s o b je t o s p u d ie s e n t o m a r lo s va lo re s lit e ra le s Pe q u e ñ o , Me d ia n o o Gra n d e s e d e fin iría a s í:

enum Tamaño
{
Pequeño,
Mediano,
Grande
}

Pa ra e n t e n d e r b ie n la p rin cip a l u t ilid a d d e la s e n u m e ra cio n e s va m o s a ve r a n t e s u n p ro b le m a m u y t íp ico e n


p ro g ra m a ció n : s i q u e re m o s d e fin ir u n m é t o d o q u e p u e d a im p rim ir p o r p a n t a lla u n cie rt o t e xt o co n d ife re n t e s
t a m a ñ o s , u n a p rim e ra p o s ib ilid a d s e ría d o t a rlo d e u n p a rá m e t ro d e a lg ú n t ip o e n t e ro q u e in d iq u e e l t a m a ñ o co n e l
q u e s e d e s e a m o s t ra r e l t e xt o . A e s t o s n ú m e ro s q u e lo s m é t o d o s in t e rp re t a n co n s ig n ifica d o s e s p e cífico s s e le s
s u e le d e n o m in a r n ú m e ro s m á g ic o s , y s u u t iliza ció n t ie n e lo s in co n ve n ie n t e s d e q u e d ificu lt a la le g ib ilid a d d e l
có d ig o ( h a y q u e re co rd a r q u e s ig n ifica p a ra e l m é t o d o ca d a va lo r d e l n ú m e ro ) y s u e s crit u ra ( h a y q u e re co rd a r q u é
n ú m e ro h a p a s á rs e le a l m é t o d o p a ra q u e q u e fu n cio n e d e u n a cie rt a fo rm a )

Un a a lt e rn a t iva m e jo r p a ra e l m é t o d o a n t e rio r co n s is t e e n d e fin irlo d e m o d o q u e t o m e u n p a rá m e t ro d e t ip o


Ta m a ñ o p a ra q u e a s í e l p ro g ra m a d o r u s u a rio n o t e n g a q u e re co rd a r la co rre s p o n d e n cia e n t re t a m a ñ o s y n ú m e ro s .
Vé a s e a s í co m o la lla m a d a (2) d e l e je m p lo q u e s ig u e e s m u ch o m á s le g ib le q u e la (1):

obj.MuestraTexto(2); // (1)
obj.MuestraTexto(Tamaño.Mediano); // (2)

Ad e m á s , e s t o s lit e ra le s n o s ó lo fa cilit a n la e s crit u ra y le ct u ra d e l có d ig o s in o q u e t a m b ié n p u e d e n s e r u s a d o s p o r

http://www.programacion.com/tutorial.csharp.15.html (1 de 7) [20/10/2002 18:22:13]


http://www.programacion.com/tutorial.csharp.15.html

h e rra m ie n t a s d e d o cu m e n t a ció n , d e p u ra d o re s u o t ra s a p lica cio n e s p a ra s u s t it u ir n ú m e ro s m á g ico s y m o s t ra r


t e xt o s m u ch o s m á s le g ib le s .

Po r o t ro la d o , u s a r e n u m e ra cio n e s t a m b ié n fa cilit a e l m a n t e n im ie n t o d e l có d ig o . Po r e je m p lo , s i e l m é t o d o (1)


a n t e rio r s e h u b ie s e d e fin id o d e fo rm a q u e 1 s ig n ifica s e t a m a ñ o p e q u e ñ o , 2 m e d ia n o y 3 g ra n d e , cu a n d o s e
q u is ie s e in clu ir u n n u e vo t a m a ñ o in t e rm e d io e n t re p e q u e ñ o y m e d ia n o h a b ría q u e d a rle u n va lo r s u p e rio r a 3 o
in fe rio r a 1 ya q u e lo s d e m á s e s t a ría n co g id o s , lo q u e ro m p e ría e l o rd e n d e m e n o r a m a yo r e n t re n ú m e ro s y
t a m a ñ o s a s o cia d o s . S in e m b a rg o , u s a n d o u n a e n u m e ra ció n n o im p o rt a ría m a n t e n e r e l o rd e n re la t ivo y b a s t a ría
a ñ a d irle u n n u e vo lit e ra l.

Ot ra ve n t a ja d e u s a r e n u m e ra cio n e s fre n t e a n ú m e ro s m á g ico s e s q u e é s t a s p a rt icip a n e n e l m e ca n is m o d e


co m p ro b a ció n d e t ip o s d e C# y e l CLR. As í, s i u n m é t o d o e s p e ra u n o b je t o Ta m a ñ o y s e le p a s a u n o d e o t ro t ip o
e n u m e ra d o s e p ro d u cirá , s e g ú n cu a n d o s e d e t e ct e la in co h e re n cia , u n e rro r e n co m p ila ció n o u n a e xce p ció n e n
e je cu ció n . S in e m b a rg o , s i s e h u b ie s e n u s a d o n ú m e ro s m á g ico s d e l m is m o t ip o e n ve z d e e n u m e ra cio n e s n o s e
h a b ría d e t e ct a d o n a d a , p u e s e n a m b o s ca s o s p a ra e l co m p ila d o r y e l CLR s e ría n s im p le s n ú m e ro s s in n in g ú n
s ig n ifica d o e s p e cia l a s o cia d o .

D e fin ic ió n d e e n u m e ra c io n e s

Ya h e m o s vis t o u n e je m p lo d e có m o d e fin ir u n a e n u m e ra ció n . S in e m b a rg o , la s in t a xis co m p le t a q u e s e p u e d e


u s a r p a ra d e fin irla s e s :

enum <nombreEnumeración> : <tipoBase>


{
<literales>
}

En re a lid a d u n a e n u m e ra ció n e s u n t ip o e s p e cia l d e e s t ru ct u ra ( lu e g o System.ValueType s e rá t ip o p a d re d e


e lla ) q u e s ó lo p u e d e t e n e r co m o m ie m b ro s ca m p o s p ú b lico s co n s t a n t e s y e s t á t ico s . Es o s ca m p o s s e in d ica n e n
<literales>, y co m o s u s m o d ifica d o re s s o n s ie m p re lo s m is m o s n o h a y q u e e s p e cifica rlo s ( d e h e ch o , e s e rró n e o
h a ce rlo )

El t ip o p o r d e fe ct o d e la s co n s t a n t e s q u e fo rm a n u n a e n u m e ra ció n e s int, a u n q u e p u e d e d á rs e le s cu a lq u ie r o t ro
t ip o b á s ico e n t e ro ( byte, sbyte, short, ushort, uint, int, long o ulong) in d icá n d o lo e n <tipoBase>
Cu a n d o s e h a g a e s t o h a y q u e t e n e r m u y p re s e n t e q u e e l co m p ila d o r d e C# s ó lo a d m it e q u e s e in d iq u e n a s í lo s
a lia s d e e s t o s t ip o s b á s ico s , p e ro n o s u s n o m b re s re a le s ( System.Byte, System.SByte, e t c. )

S i n o s e e s p e cifica va lo r in icia l p a ra ca d a co n s t a n t e , e l co m p ila d o r le s d a rá p o r d e fe ct o va lo re s q u e e m p ie ce n


d e s d e 0 y s e in cre m e n t e n e n u n a u n id a d p a ra ca d a co n s t a n t e s e g ú n s u o rd e n d e a p a rició n e n la d e fin ició n d e la
e n u m e ra ció n . As í, e l e je m p lo d e l p rin cip io d e l t e m a e s e q u iva le n t e h a :

enum Tamaño:int
{
Pequeño = 0,
Mediano = 1,
Grande = 2
}

Es p o s ib le a lt e ra r lo s va lo re s in icia le s d e ca d a co n s t a n t e in d icá n d o lo s e xp lícit a m e n t e co m o e n e l có d ig o re cié n


m o s t ra d o . Ot ra p o s ib ilid a d e s a lt e ra r e l va lo r b a s e a p a rt ir d e l cu a l s e va ca lcu la n d o e l va lo r d e la s s ig u ie n t e s
co n s t a n t e s co m o e n e s t e o t ro e je m p lo :

enum Tamaño
{
Pequeño,
Mediano = 5,
Grande
}

http://www.programacion.com/tutorial.csharp.15.html (2 de 7) [20/10/2002 18:22:13]


http://www.programacion.com/tutorial.csharp.15.html

En e s t e ú lt im o e je m p lo e l va lo r a s o cia d o a Pequeño s e rá 0 , e l a s o cia d o a Mediano s e rá 5 , y e l a s o cia d o a


Grande s e rá 6 ya q u e co m o n o s e le in d ica e xp lícit a m e n t e n in g ú n o t ro s e co n s id e ra q u e e s t e va lo r e s e l d e la
co n s t a n t e a n t e rio r m á s 1 .

Ob via m e n t e , e l n o m b re q u e s e d e a ca d a co n s t a n t e h a d e s e r d ife re n t e a l d e la s d e m á s d e s u m is m a e n u m e ra ció n


y e l va lo r q u e s e d e a ca d a u n a h a d e e s t a r in clu id o e n e l ra n g o d e va lo re s a d m it id o s p o r s u t ip o b a s e . S in
e m b a rg o , n a d a o b lig a a q u e e l va lo r q u e s e d e a ca d a co n s t a n t e t e n g a q u e s e r d ife re n t e a l d e la s d e m á s , y d e
h e ch o p u e d e e s p e cifica rs e e l va lo r d e u n a co n s t a n t e e n fu n ció n d e l va lo r d e o t ra co m o m u e s t ra e s t e e je m p lo :

enum Tamaño
{
Pequeño,
Mediano = Pequeño,
Grande = Pequeño + Mediano
}

En re a lid a d , lo ú n ico q u e im p o rt a e s q u e e l va lo r q u e s e d é a ca d a lit e ra l, s i e s q u e s e le d a a lg u n o e xp lícit a m e n t e ,


s e a u n a e xp re s ió n co n s t a n t e cu yo re s u lt a d o s e e n cu e n t re e n e l ra n g o a d m it id o p o r e l t ip o b a s e d e la e n u m e ra ció n
y n o p ro vo q u e d e fin icio n e s circu la re s . Po r e je m p lo , la s ig u ie n t e d e fin ició n d e e n u m e ra ció n e s in co rre ct a ya q u e e n
e lla lo s lit e ra le s Pequeño y Mediano s e h a n d e fin id o circu la rm e n t e :

enum TamañoMal
{
Pequeño = Mediano,
Mediano = Pequeño,
Grande
}

Nó t e s e q u e la s ig u ie n t e d e fin ició n d e e n u m e ra ció n t a m b ié n s e ría in co rre ct a ya q u e e n e lla e l va lo r d e B d e p e n d e


d e l d e A im p lícit a m e n t e ( s e ría e l d e A m á s 1 ) :

enum EnumMal
{
A = B,
B
}

Us o d e e n u m e ra c io n e s

La s va ria b le s d e t ip o s e n u m e ra d o s s e d e fin e n co m o cu a lq u ie r o t ra va ria b le ( s in t a xis <nombreTipo>


<nombreVariable>) Po r e je m p lo :

Tamaño t;

El va lo r p o r d e fe ct o p a ra u n o b je t o d e u n a e n u m e ra ció n e s 0 , q u e p u e d e o n o co rre s p o n d e rs e co n a lg u n o d e lo s
lit e ra le s d e fin id o s p a ra é s t a . As í, s i la t d e l e je m p lo fu e s e u n ca m p o s u va lo r s e ría Tamaño.Pequeño. Ta m b ié n
p u e d e d á rs e le o t ro va lo r a l d e fin irla , co m o m u e s t ra e l s ig u ie n t e e je m p lo d o n d e s e le d a e l va lo r Tamaño.Grande:

Tamaño t = Tamaño.Grande; // Ahora t vale Tamaño.Grande

Nó t e s e q u e a la h o ra d e h a ce r re fe re n cia a lo s lit e ra le s d e u n a e n u m e ra ció n s e u s a la s in t a xis


<nombreEnumeración>.<nombreLiteral>, co m o e s ló g ico s i t e n e m o s e n cu e n t a q u e e n re a lid a d lo s lit e ra le s
d e u n a e n u m e ra ció n s o n co n s t a n t e s p u b lica s y e s t á t ica s , p u e s e s la s in t a xis q u e s e u s a p a ra a cce d e r a e s e t ip o d e
m ie m b ro s . El ú n ico s it io d o n d e n o e s n e ce s a rio p re ce d e r e l n o m b re d e l lit e ra l d e <nombreEnumeración>. e s e n
la p ro p ia d e fin ició n d e la e n u m e ra ció n , co m o t a m b ié n o cu rre co n cu a lq u ie r co n s t a n t e e s t á t ica .

En re a lid a d lo s lit e ra le s d e u n a e n u m e ra ció n s o n co n s t a n t e s d e t ip o s e n t e ro s y la s va ria b le s d e t ip o e n u m e ra d o

http://www.programacion.com/tutorial.csharp.15.html (3 de 7) [20/10/2002 18:22:13]


http://www.programacion.com/tutorial.csharp.15.html

s o n va ria b le s d e l t ip o e n t e ro b a s e d e la e n u m e ra ció n . Po r e s o e s p o s ib le a lm a ce n a r va lo re s d e e n u m e ra cio n e s e n


va ria b le s d e t ip o s e n t e ro s y va lo re s d e t ip o s e n t e ro s e n va ria b le s d e e n u m e ra cio n e s . Po r e je m p lo :

int i = Tamaño.Pequeño; // Ahora i vale 0


Tamaño t = (Tamaño) 0; // Ahora t vale Tamaño.Pequeño (=0)
t = (Tamaño)100; // Ahora t vale 100, que no se
// corresponde con ningún literal

Co m o s e ve e n e l ú lt im o e je m p lo , t a m b ié n e s p o s ib le d a rle a u n a e n u m e ra ció n va lo re s e n t e ro s q u e n o s e
co rre s p o n d a n co n n in g u n o d e s u s lit e ra le s .

Da d o q u e lo s va lo re s d e u n a e n u m e ra ció n s o n e n t e ro s , e s p o s ib le a p lica rle s m u ch o s d e la s o p e ra cio n e s q u e s e


p u e d e n a p lica r a lo s m is m o s : ==, !=, <, >, <=, >=, +, •, ^, &, |, ~, ++, -- y sizeof. S in e m b a rg o , h a y q u e
co n cre t a r q u e lo s o p e ra d o re s b in a rio s + y - n o p u e d e n a p lica rs e e n t re d o s o p e ra n d o s d e e n u m e ra cio n e s , s in o q u e
a l m e n o s u n o d e e llo s h a d e s e r u n t ip o e n t e ro ; y q u e |, & y ^ s ó lo p u e d e n a p lica rs e e n t re e n u m e ra cio n e s .

La c la s e S y s t e m . En u m

To d o s lo s t ip o s e n u m e ra d o s d e riva n d e System.Enum, q u e d e riva d e System.ValueType y é s t a a s u ve z d e riva


d e la cla s e p rim ig e n ia System.Object. Ap a rt e d e lo s m é t o d o s h e re d a d o s d e e s t a s cla s e s p a d re s y ya e s t u d ia d o s ,
t o d a e n u m e ra ció n t a m b ié n d is p o n e d e o t ro s m é t o d o s h e re d a d o s d e System.Enum, lo s p rin cip a le s d e lo s cu a le s
son:

● s t a t ic Ty p e g e t Un d e rly in g Ty p e ( Ty p e e n u m ) : De vu e lve u n o b je t o System.Type co n


in fo rm a ció n s o b re e l t ip o b a s e d e la e n u m e ra ció n re p re s e n t a d a p o r e l o b je t o System.Type q u e
s e le p a s a co m o p a rá m e t ro .

● s t rin g To S t rin g ( s t rin g fo rm a t o ) : Cu a n d o a u n o b je t o d e u n t ip o e n u m e ra d o s e le a p lica e l


m é t o d o To S t rin g ( ) h e re d a d o d e o b je ct lo q u e s e m u e s t ra e s u n a ca d e n a co n e l n o m b re d e l
lit e ra l a lm a ce n a d o e n e s e o b je t o . Po r e je m p lo :

Tamaño t = Color.Pequeño;
Console.WriteLine(t); // Muestra por pantalla la cadena "Pequeño"

Co m o t a m b ié n p u e d e re s u lt a r in t e ra s a n t e o b t e n e r e l va lo r n u m é rico d e l lit e ra l, s e h a s o b re ca rg a d o
System.Enum e l m é t o d o a n t e rio r p a ra q u e t o m e co m o p a rá m e t ro u n a ca d e n a q u e in d ica có m o s e d e s e a
m o s t ra r e l lit e ra l a lm a ce n a d o e n e l o b je t o . S i e s t a ca d e n a e s n u la , va cía o va le "G" m u e s t ra e l lit e ra l co m o
s i d e l m é t o d o ToString() e s t á n d a r s e t ra t a s e , p e ro s i va le "D" o "X" lo q u e m u e s t ra e s s u va lo r
n u m é rico ( e n d e cim a l s i va le "D" y e n h e xa d e cim a l s i va le "X") Po r e je m p lo :

Console.WriteLine(t.ToString("X")); // Muestra 0
Console.WriteLine(t.ToString("G")); // Muestra Pequeño

En re a lid a d , lo s va lo re s d e fo rm a t o s o n in s e n s ib le s a la ca p it a liza ció n y d a ig u a l s i e n ve z d e "G" s e u s a "g"


o s i e n ve z d e "X" s e u s a "x".

● s t a t ic s t rin g Fo rm a t ( Ty p e e n u m , o b je c t v a lo rLit e ra l, s t rin g fo rm a t o ) : Fu n cio n a d e fo rm a


p a re cid a a la s o b re ca rg a d e ToString() re cie n vis t a , s ó lo q u e a h o ra n o e s n e ce s a rio d is p o n e r
d e n in g ú n o b je t o d e l t ip o e n u m e ra d o cu ya re p re s e n t a ció n d e lit e ra l s e d e s e a o b t e n e r s in o q u e
b a s t a in d ica r e l o b je t o Type q u e lo re p re s e n t a y e l n ú m e ro d e l lit e ra l a o b t e n e r. Po r e je m p lo :

Console.Write(Enum.Format(typeof(Tamaño), 0, "G"); // Muestra Pequeño

S i e l valorLiteral in d ica d o n o e s t u vie s e a s o cia d o a n in g ú n lit e ra l d e l t ip o e n u m e ra d o r re p re s e n t a d o p o r


e n u m , s e d e vo lve ría u n a ca d e n a co n d ich o n ú m e ro . Po r e l co n t ra rio , s i h u b ie s e n va rio s lit e ra le s e n la
e n u m e ra ció n co n e l m is m o va lo r n u m é rico a s o cia d o , lo q u e s e d e vo lve ría s e ría e l n o m b re d e l d e cla ra d o e n

http://www.programacion.com/tutorial.csharp.15.html (4 de 7) [20/10/2002 18:22:13]


http://www.programacion.com/tutorial.csharp.15.html

ú lt im o lu g a r a l d e fin ir la e n u m e ra ció n .

s t a t ic o b je c t P a rs e ( Ty p e e n u m , s t rin g n o m b re , b o o l m a y u s c u la s ? ) : Cre a u n o b je t o d e u n t ip o
e n u m e ra d o cu yo va lo r e s e l co rre s p o n d ie n t e a l lit e ra l d e n o m b re a s o cia d o n o m b re . S i la e n u m e ra ció n n o
t u vie s e n in g ú n lit e ra l co n e s e n o m b re s e la n za ría u n a ArgumentException, y p a ra d e t e rm in a r có m o s e h a
d e b u s ca r e l n o m b re e n t re lo s lit e ra le s d e la e n u m e ra ció n s e u t iliza e l t e rce r p a rá m e t ro ( e s o p cio n a l y p o r
d e fe ct o va le false) q u e in d ica s i s e h a d e ig n o ra r la ca p it a liza ció n a l b u s ca rlo . Un e je m p lo d e l u s o d e e s t e
m é todo e s:

Tamaño t = (Tamaño) Enum.Parse(typeof(Tamaño), "Pequeño");


Console.WriteLine(t) // Muestra Pequeño

Ap a rt e d e cre a r o b je t o s a p a rt ir d e l n o m b re d e l lit e ra l q u e a lm a ce n a rá n , Parse() t a m b ié n p e rm it e cre a rlo s


a p a rt ir d e l va lo r n u m é rico d e l m is m o . Po r e je m p lo :

Tamaño t = (Tamaño) Enum.Parse(typeof(Tamaño), "0");


Console.WriteLine(t) // Muestra Pequeño

En e s t e ca s o , s i e l va lo r in d ica d o n o s e co rre s p o n d ie s e co n e l d e n in g u n o d e lo s lit e ra le s d e la e n u m e ra ció n


n o s a lt a ría n in g u n a e xce p ció n , p e ro e l o b je t o cre a d o n o a lm a ce n a ría n in g ú n lit e ra l vá lid o . Po r e je m p lo :

Tamaño t = (Tamaño) Enum.Parse(typeof(Tamaño), "255");


Console.WriteLine(t) // Muestra 255

● s t a t ic o b je c t [ ] Ge t Va lu e s ( Ty p e e n u m ) : De vu e lve u n a t a b la co n lo s va lo re s d e t o d o s lo s
lit e ra le s d e la e n u m e ra ció n re p re s e n t a d a p o r e l o b je t o S y s t e m . Ty p e q u e s e le p a s a co m o
p a rá m e t ro . Po r e je m p lo :

object[] tabla = Enum.GetValues(typeof(Tamaño));


Console.WriteLine(tabla[0]); // Muestra 0, pues Pequeño = 0
Console.WriteLine(tabla[1]); // Muestra 1, pues Mediano = 1
Console.WriteLine(tabla[2]); // Muestra 1, pues Grande = Pequeño+Mediano

● s t a t ic s t rin g Ge t N a m e ( Ty p e e n u m , o b je c t v a lo r) : De vu e lve u n a ca d e n a co n e l n o m b re d e l
lit e ra l d e la e n u m e ra ció n re p re s e n t a d a p o r e n u m q u e t e n g a e l va lo r e s p e cifica d o e n va lo r. Po r
e je m p lo , e s t e có d ig o m u e s t ra Pe q u e ñ o p o r p a n t a lla :

Console.WriteLine(Enum.GetName(typeof(Tamaño), 0)); //Imprime Pequeño

S i la e n u m e ra ció n n o co n t ie n e n in g ú n lit e ra l co n e s e va lo r d e vu e lve null, y s i t u vie s e va rio s co n e s e m is m o


va lo r d e vo lve ría s ó lo e l n o m b re d e l ú lt im o . S i s e q u ie re o b t e n e r e l d e t o d o s e s m e jo r u s a r GetNames(),
q u e s e u s a co m o GetName() p e ro d e vu e lve u n string[] co n lo s n o m b re s d e t o d o s lo s lit e ra le s q u e
t e n g a n e l va lo r in d ica d o o rd e n a d o s s e g ú n s u o rd e n d e d e fin ició n e n la e n u m e ra ció n .

● s t a t ic b o o l is D e fin e d ( Ty p e e n u m , o b je c t v a lo r) : De vu e lve u n b o o le a n o q u e in d ica s i a lg ú n


lit e ra l d e la e n u m e ra ció n in d ica d a t ie n e e l va lo r in d ica d o .

En u m e ra c io n e s d e fla g s

Mu ch a s ve ce s in t e re s a d a r co m o va lo re s d e lo s lit e ra le s d e u n a e n u m e ra ció n ú n ica m e n t e va lo re s q u e s e a n


p o t e n cia s d e d o s , p u e s e llo p e rm it e q u e m e d ia n t e o p e ra cio n e s d e b it s & y | s e p u e d e t ra t a r lo s o b je t o s d e l t ip o
e n u m e ra d o co m o s i a lm a ce n a s e n s im u lt á n e a m e n t e va rio s lit e ra le s d e s u t ip o . A e s t e t ip o d e e n u m e ra cio n e s la s
lla m a re m o s e n u m e ra c io n e s d e fla g s , y u n e je m p lo d e e lla s e s e l s ig u ie n t e :

enum ModificadorArchivo
{
Lectura = 1,

http://www.programacion.com/tutorial.csharp.15.html (5 de 7) [20/10/2002 18:22:13]


http://www.programacion.com/tutorial.csharp.15.html

Escritura = 2,
Oculto = 4,
Sistema = 8
}

S i q u e re m o s cre a r u n o b je t o d e e s t e t ip o q u e re p re s e n t e lo s m o d ifica d o re s d e u n a rch ivo d e le ct u ra - e s crit u ra


p o d ría m o s h a ce r:

ModificadorArchivo obj = ModificadorArchivo.Lectura |


ModificadorArchivo.Escritura

El va lo r d e l t ip o b a s e d e la e n u m e ra ció n q u e s e h a b rá a lm a ce n a d o e n o b j e s 3 , q u e e s e l re s u lt a d o d e h a ce r la
o p e ra ció n OR e n t re lo s b it s d e lo s va lo re s d e lo s lit e ra le s Lectura y Escritura. Al s e r lo s lit e ra le s d e
ModificadorArchivo p o t e n cia s d e d o s s ó lo t e n d rá n u n ú n ico b it a 1 y d ich o b it s e rá d ife re n t e e n ca d a u n o d e
e llo s , p o r lo q u e la ú n ica fo rm a d e g e n e ra r u n 3 ( ú lt im o s d o s b it s a 1 ) co m b in a n d o lit e ra le s d e
ModificadorArchivo e s co m b in a n d o lo s lit e ra le s Lectura ( ú lt im o b it a 1 ) y Escritura ( p e n ú lt im o b it a 1 )
Po r t a n t o , e l va lo r d e obj id e n t ifica rá u n ívo ca m e n t e la co m b in a ció n d e d ich o s lit e ra le s .

De b id o a e s t a co m b in a b ilid a d n o s e d e b e d e t e rm in a r e l va lo r lit e ra l d e lo s o b je t o s ModificadorArchivo t a l y


co m o s i s ó lo p u d ie s e n a lm a ce n a r u n ú n ico lit e ra l, p u e s s u va lo r n u m é rico n o t e n d ría p o rq u é co rre s p o n d e rs e co n e l
d e n in g ú n lit e ra l d e la e n u m e ra ció n Po r e je m p lo :

bool permisoLectura = (obj == ModificadorArchivo.Lectura); // Almacena false

Au n q u e lo s p e rm is o s re p re s e n t a d o s p o r o b j in clu ía n p e rm is o d e le ct u ra , s e d e vu e lve false p o rq u e e l va lo r


n u m é rico d e obj e s 3 y e l d e l ModificadorArchivo.Lectura e s 1 . S i lo q u e q u e re m o s e s co m p ro b a r s i obj
co n t ie n e p e rm is o d e le ct u ra , e n t o n ce s h a b rá q u e u s a r e l o p e ra d o r d e b it s & p a ra a is la rlo d e l re s t o d e lit e ra le s
co m b in a d o s q u e co n t ie n e :

bool permisoLectura = (ModificadorArchivo.Lectura ==


(obj & ModificadorArchivo.Lectura)); // Almacena true

O lo q u e e s lo m is m o :

bool permisoLectura = ( (obj & ModificadorArchivo.Lectura) != 0);


// Almacena true

De l m is m o , s i d ire ct a m e n t e s e in t e n t a m o s t ra r p o r p a n t a lla e l va lo r d e u n o b je t o d e u n a e n u m e ra ció n q u e


a lm a ce n e u n va lo r q u e s e a co m b in a ció n d e lit e ra le s , n o s e o b t e n d rá n e l re s u lt a d o e s p e ra d o ( n o m b re d e l lit e ra l
co rre s p o n d ie n t e a s u va lo r) Po r e je m p lo , d a d o :

Console.Write(obj); // Muestra 3

S e m o s t ra rá u n 3 p o r p a n t a lla ya q u e e n re a lid a d n in g ú n lit e ra l d e Mo d ifica d o rArch ivo t ie n e a s o cia d o d ich o va lo r.


Co m o lo n a t u ra l s e ría q u e s e d e s e a s e o b t e n e r u n m e n s a je d e la fo rm a Le ct u ra , Es crit u ra , lo s m é t o d o s
ToString() y Format() d e la s e n u m e ra cio n e s ya vis t o s a d m it e n u n cu a rt o va lo r "F" p a ra s u p a rá m e t ro
fo rm a t o ( s u n o m b re vie n e d e fla g s ) co n e l q u e s e co n s ig u e lo a n t e rio r. Po r t a n t o :

Console.Write(obj.ToString("F")); // Muestra Lectura, Escritura

Es t o s e d e b e a q u e cu a n d o Format() d e t e ct a e s t e in d ica d o r ( ToString() t a m b ié n , p u e s p a ra g e n e ra r la ca d e n a


lla m a in t e rn a m e n t e a Format()) y e l lit e ra l a lm a ce n a d o e n e l o b je t o n o s e co rre s p o n d e co n n in g u n o d e lo s d e s u
t ip o e n u m e ra d o , e n t o n ce s lo q u e h a ce e s m ira r u n o p o r u n o lo s b it s a u n o d e l va lo r n u m é rico a s o cia d o d e d ich o
lit e ra l y a ñ a d irle a la ca d e n a a d e vo lve r e l n o m b re d e ca d a lit e ra l d e la e n u m e ra ció n cu yo va lo r a s o cia d o s ó lo
t e n g a e s e b it a u n o , u s á n d o co m o s e p a ra d o r e n t re n o m b re s u n ca rá ct e r d e co m a .

Nó t e s e q u e n a d a o b lig a a q u e lo s lit e ra le s d e l t ip o e n u m e ra d o t e n g a n p o rq u é h a b e rs e d e fin id o co m o p o t e n cia s d e


d o s , a u n q u e e s lo m á s co n ve n ie n t e p a ra q u e "F" s e a ú t il, p u e s s i la e n u m e ra ció n t u vie s e a lg ú n lit e ra l co n e l va lo r

http://www.programacion.com/tutorial.csharp.15.html (6 de 7) [20/10/2002 18:22:13]


http://www.programacion.com/tutorial.csharp.15.html

d e l o b je t o d e t ip o e n u m e ra d o n o s e re a liza ría e l p ro ce s o a n t e rio r y s e d e vo lve ría s ó lo e l n o m b re d e e s e lit e ra l.

Po r o t ro la d o , s i a lg u n o d e lo s b it s a 1 d e l va lo r n u m é rico d e l o b je t o n o t u vie s e e l co rre s p o n d ie n t e lit e ra l co n s ó lo


e s e b it a 1 e n la e n u m e ra ció n n o s e re a liza ría t a m p o co e l p ro ce s o a n t e rio r y s e d e vo lve ría u n a ca d e n a co n d ich o
va lo r n u m é rico .

Un a p o s ib ilid a d m á s có m o d a p a ra o b t e n e r e l m is m o e fe ct o q u e co n "F" e s m a rca r la d e fin ició n d e la e n u m e ra ció n


co n e l a t rib u t o Flags, co n lo q u e n i s iq u ie ra s e ría n e ce s a rio in d ica r fo rm a t o a l lla m a r a ToString() O s e a , s i s e
d e fin e ModificadorArchivo a s í:

[Flags]
enum ModificadorArchivo
{
Lectura = 1,
Escritura = 2,
Oculto = 4,
Sistema = 8
}

En t o n ce s la s ig u ie n t e lla m a d a p ro d u cirá co m o s a lid a Lectura, Escritura:

Console.Write(obj); // Muestra Lectura, Escritura

Es t o s e d e b e a q u e e n a u s e n cia d e l m o d ifica d o r "F", Format() m ira d e n t ro d e lo s m e t a d a t o s d e l t ip o e n u m e ra d o


a l q u e p e rt e n e ce e l va lo r n u m é rico a m o s t ra r s i é s t e d is p o n e d e l a t rib u t o Flags. S i e s a s í fu n cio n a co m o s i s e le
h u b ie s e p a s a d o "F".

Ta m b ié n ca b e d e s t a ca r q u e , p a ra cre a r o b je t o s d e e n u m e ra cio n e s cu yo va lo r s e a u n a co m b in a ció n d e va lo re s d e


lit e ra le s d e s u t ip o e n u m e ra d o , e l m é t o d o m é t o d o Parse() d e Enum p e rm it e q u e la ca d e n a q u e s e le e s p e cifica
co m o s e g u n d o p a rá m e t ro cu e n t e co n m ú lt ip le s lit e ra le s s e p a ra d o s p o r co m a s . Po r e je m p lo , u n o b je t o
ModificadorArchivo q u e re p re s e n t e m o d ifica d o re s d e le ct u ra y o cu lt a ció n p u e d e cre a rs e co n :

ModificadorArchivo obj = (ModificadorArchivo)


Enum.Parse(typeof(ModificadorArchivo),"Lectura,Oculto"));

Ha y q u e s e ñ a la r q u e e s t a ca p a cid a d d e cre a r o b je t o s d e e n u m e ra cio n e s cu yo va lo r a lm a ce n a d o s e a u n a


co m b in a ció n d e lo s lit e ra le s d e fin id o s e n d ich a e n u m e ra ció n e s t o t a lm e n t e in d e p e n d ie n t e d e s i a l d e fin irla s e u t ilizó
e l a t rib u t o Flags o n o .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.15.html (7 de 7) [20/10/2002 18:22:13]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n
C#

En e s t a p á g in a :

● Te m a 1 5 : In t e rfa ce s
❍ Co n ce p t o d e in t e rfa z
❍ De fin ició n d e in t e rfa ce s
❍ Im p le m e n t a ció n d e in t e rfa ce s
❍ Acce s o a m ie m b ro s d e u n a in t e rfa z

Te m a 1 5 : I n t e rfa c e s

Co n c e p t o d e in t e rfa z

Un a in t e rfa z e s la d e fin ició n d e u n co n ju n t o d e m é t o d o s p a ra lo s q u e n o s e d a im p le m e n t a ció n , s in o q u e s e le s


d e fin e d e m a n e ra s im ila r a co m o s e d e fin e n lo s m é t o d o s a b s t ra ct o s . Es m á s , u n a in t e rfa z p u e d e ve rs e co m o u n a
fo rm a e s p e cia l d e d e fin ir cla s e s q u e s ó lo cu e n t e n co n m ie m b ro s a b s t ra ct o s .

Co m o la s cla s e s a b s t ra ct a s , la s in t e rfa ce s s o n t ip o s re fe re n cia , n o p u e d e cre a rs e o b je t o s d e e lla s s in o s ó lo d e


t ip o s q u e d e rive n d e e lla s , y p a rt icip a n d e l p o lim o rfis m o . S in e m b a rg o , t a m b ié n t ie n e m u ch a s d ife re n cia s co n
é sta s:

● Es p o s ib le d e fin ir t ip o s q u e d e riv e n d e m á s d e u n a in t e rfa z . Es t o s e d e b e a q u e lo s


p ro b le m a s q u e s e p u e d e n p re s e n t a r a la h o ra d e cre a r t ip o s q u e h e re d e n d e va rio s t ip o s s o n
d e b id o s a q u e p u e d e n h a b e r co n flict o s d ifícile s d e re s o lve r y s i u n t ip o h e re d a m á s d e u n a
ve rs ió n d e u n m is m o m é t o d o p ro ce d e n t e s d e p a d re s d ife re n t e s y co n có d ig o s d is t in t o s . S in
e m b a rg o , co n la s in t e rfa ce s la s in t e rfa ce s s e p e rm it e la h e re n cia m ú lt ip le p o rq u e e s t o n u n ca
p u e d e o cu rrir d e b id o a q u e la s in t e rfa ce s n o in clu ye n có d ig o .

● Au n q u e la s e s t ru ct u ra s n o p u e d e n h e re d a r cla s e s , s í p u e d e n h a ce rlo d e in t e rfa ce s

● To d o t ip o q u e d e rive d e u n a in t e rfa z h a d e d a r u n a im p le m e n t a ció n d e t o d o s lo s m ie m b ro s q u e


h e re d a d e e s t a , y n o co m o o cu rre co n la s cla s e s a b s t ra ct a s d o n d e e s p o s ib le n o d a rla s i s e
d e fin e co m o a b s t ra ct a t a m b ié n la cla s e h ija . De e s t a m a n e ra q u e d a d e fin id o u n co n t ra t o e n la
cla s e q u e la h e re d a q u e va a p e rm it ir p o d e r u s a rla co n s e g u rid a d e n s it u a cio n e s p o lim ó rfica s :
t o d a cla s e q u e h e re d e u n a in t e rfa z im p le m e n t a rá t o d o s lo s m é t o d o s d e la m is m a . Po r e s t a
ra zó n s e s u e le d e n o m in a r im p le m e n t a r u n a in t e rfa z a l h e ch o d e h e re d a r d e e lla .

● La s in t e rfa ce s s ó lo p u e d e n t e n e r co m o m ie m b ro s m é t o d o s n o rm a le s , e ve n t o s , p ro p ie d a d e s e

http://www.programacion.com/tutorial.csharp.16.html (1 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

in d iza d o re s ; p e ro n o p u e d e n in clu ir d e fin icio n e s d e ca m p o s , o p e ra d o re s , co n s t ru ct o re s o


d e s t ru ct o re s .

D e fin ic ió n d e in t e rfa c e s

La s in t a xis g e n e ra l q u e s e s ig u e a la h o ra d e d e fin ir u n a in t e rfa z e s :

<modificadores> interface <nombre>:<interfacesBase>


{
<miembros>
}

Lo s <modificadores> a d m it id o s p o r la s in t e rfa ce s s o n lo s m is m o s q u e lo s d e la s cla s e s Es d e cir, public,


internal, private, protected, protected internal o new ( e ig u a lm e n t e , lo s cu a t ro ú lt im o s ó lo s o n
a p lica b le s a in t e rfa ce s d e fin id a s d e n t ro d e o t ro s t ip o s )

El <nombre> d e u n a in t e rfa z p u e d e s e r cu a lq u ie r id e n t ifica d o r vá lid o , a u n q u e p o r co n ve n io s e s u e le u s a r I co m o


p rim e r ca rá ct e r d e l m is m o ( IComparable, IA, e t c)

Lo s <miembros> d e la s in t e rfa ce s p u e d e n s e r d e fin icio n e s d e m é t o d o s , p ro p ie d a d e s , in d iza d o re s o e ve n t o s , p e ro


n o ca m p o s , o p e ra d o re s , co n s t ru ct o re s o d e s t ru ct o re s . La s in t a xis q u e s e s ig u e p a ra d e fin ir ca d a t ip o d e m ie m b ro
e s la m is m a q u e p a ra d e fin irlo s co m o a b s t ra ct o s e n u n a cla s e p e ro s in in clu ir abstract p o r s u p o n e rs e
im p ícit a m e n t e :

● Mé t o d o s : <tipoRetorno> <nombreMétodo>(<parámetros> );

● P ro p ie d a d e s : <tipo> <nombrePropiedad> {set; get;}

Lo s b lo q u e s get y set p u e d e n in t e rca m b ia rs e y p u e d e n o in clu irs e u n o d e e llo s ( p ro p ie d a d d e s ó lo le ct u ra


o d e s ó lo e s crit u ra s e g ú n e l ca s o ) , p e ro n o lo s d o s .

● I n d iz a d o re s : <tipo> this[<índices>] {set; get;}

Al ig u a l q u e la s p ro p ie d a d e s , lo s b lo q u e s s e t y g e t p u e d e n in t e rca m b ia rs e y o b via rs e u n o d e e llo s a l


d e fin irlo s .

● Ev e n t o s : event <delegado> <nombreEvento>;

Nó t e s e q u e a d ife re n cia d e la s p ro p ie d a d e s e in d iza d o re s , n o e s n e ce s a rio in d ica r n a d a s o b re s u s b lo q u e s


add y remove. Es t o s e d e b e a q u e s ie m p re s e h a n d e im p le m e n t a r a m b o s , a u n q u e s i s e u s a la s in t a xis
b á s ica e l co m p ila d o r le s d a u n a im p le m e n t a ció n p o r d e fe ct o a u t o m á t ica m e n t e .

Cu a lq u ie r d e fin ició n d e u n m ie m b ro d e u n a in t e rfa z p u e d e in clu ir e l m o d ifica d o r new p a ra in d ica r q u e p re t e n d e


o cu lt a r o t ra h e re d a d a d e a lg u n a in t e rfa z p a d re . S in e m b a rg o , e l re s t o d e m o d ifica d o re s n o s o n vá lid o s ya q u e
im p lícit a m e n t e s ie m p re s e co n s id e ra q u e s o n public y abstract. Ad e m á s , u n a in t e rfa z t a m p o co p u e d e in clu ir
m ie m b ro s d e t ip o , p o r lo q u e e s in co rre ct o in clu ir e l m o d ifica d o r static a l d e fin ir s u s m ie m b ro s .

Ca d a in t e rfa z p u e d e h e re d a r d e va ria s in t e rfa ce s , q u e s e in d ica ría n e n <interfacesBase> s e p a ra d a s p o r


co m a s . Es t a lis t a s ó lo p u e d e in clu ir in t e rfa ce s , p e ro n o cla s e s o e s t ru ct u ra s ; y a co n t in u a ció n s e m u e s t ra u n
e je m p lo d e có m o d e fin ir u n a in t e rfa z IC q u e h e re d a d e o t ra s d o s in t e rfa ce s IA y IB:

public delegate void D (int x);

interface IA
{
int PropiedadA

http://www.programacion.com/tutorial.csharp.16.html (2 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

void Común(int x);


}

interface IB
{
int this [int índice] {get; set;}
void Común(int x);
}

interface IC: IA, IB


{
event D EventoC;
}

Nó t e s e q u e a u n q u e la s in t e rfa ce s p a d re s d e IC co n t ie n e n u n m é t o d o co m ú n n o h a y p ro b le m a a lg u n o a la h o ra d e
d e fin irla s . En e l s ig u ie n t e e p íg ra fe ve re m o s có m o s e re s u e lve n la s a m b ig ü e d a d e s q u e p o r e s t o p u d ie s e n d a rs e a l
im p le m e n t a r IC.

I m p le m e n t a c ió n d e in t e rfa c e s

Pa ra d e fin ir u n a cla s e o e s t ru ct u ra q u e im p le m e n t e u n a o m á s in t e rfa ce s b a s t a in clu ir lo s n o m b re s d e la s m is m a s


co m o s i d e u n a cla s e b a s e s e t ra t a s e - s e p a rá n d o la s co n co m a s s i s o n va ria s o s i la cla s e d e fin id a h e re d a d e o t ra
cla s e - y a s e g u ra r q u e la cla s e cu e n t e co n d e fin icio n e s p a ra t o d o s lo s m ie m b ro s d e la s in t e rfa ce s d e la s q u e
h e re d a - lo q u e s e p u e d e co n s e g u ir d e fin ié n d o lo s e n e lla o h e re d á n d o lo s d e s u cla s e p a d re .

La s d e fin icio n e s q u e s e d e n d e m ie m b ro s d e in t e rfa ce s h a n d e s e r s ie m p re p ú b lica s y n o p u e d e n in clu ir


override, p u e s co m o s u s m ie m b ro s s o n im p lícit a m e n t e abstract s e s o b re e n t ie n d e . S in e m b a rg o , s í p u e d e n
d á rs e le lo s m o d ifica d o re s co m o virtual ó abstract y u s a r override e n re d e fin icio n e s q u e s e le s d e n e n
cla s e s h ija s d e la cla s e q u e im p le m e n t e la in t e rfa z.

Cu a n d o u n a cla s e d e riva d e m á s d e u n a in t e rfa z q u e in clu ye u n m is m o m ie m b ro , la im p le m e n t a ció n q u e s e le d é


s e rvirá p a ra t o d a s la s in t e rfa ce s q u e cu e n t e n co n e s e m ie m b ro . S in e m b a rg o , t a m b ié n e s p o s ib le d a r u n a
im p le m e n t a ció n d ife re n t e p a ra ca d a u n a u s a n d o u n a im p le m e n t a c ió n e x p líc it a , lo q u e co n s is t e e n
im p le m e n t a r e l m ie m b ro s in e l m o d ifica d o r public y a n t e p o n ie n d o a s u n o m b re e l n o m b re d e la in t e rfa z a la
q u e p e rt e n e ce s e g u id o d e u n p u n t o ( ca rá ct e r .)

Cu a n d o u n m ie m b ro s e im p le m e n t a e xp lícit a m e n t e n o p u e d e d á rs e le m o d ifica d o re s co m o e n la s
im p le m e n t a cio n e s im p lícit a s , n i s iq u ie ra virtual o abstract. Un a fo rm a d e s im u la r lo s m o d ifica d o re s q u e s e
n e ce s it e n co n s is t e e n d a rle s u n cu e rp o q u e lo q u e h a g a s e a lla m a r a o t ra fu n ció n q u e s í cu e n t e co n e s o s
m o d ifica d o re s .

El s ig u ie n t e e je m p lo m u e s t ra có m o d e fin ir u n a cla s e CL q u e im p le m e n t e la in t e rfa z IC:

class CL:IC
{
public int PropiedadA
{
get {return 5;}
set {Console.WriteLine("Asignado {0} a PropiedadA", value);}
}

void IA.Común(int x)
{
Console.WriteLine("Ejecutado Común() de IA");
}

public int this[int índice]


{

http://www.programacion.com/tutorial.csharp.16.html (3 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

get { return 1;}


set { Console.WriteLine("Asignado {0} a indizador", value); }
}

void IB.Común(int x)
{
Console.WriteLine("Ejecutado Común() de IB");
}

public event D EventoC;


}

Co m o s e ve , p a ra im p le m e n t a r la in t e rfa z IC h a s id o n e ce s a rio im p le m e n t a r t o d o s s u s m ie m b ro s , in clu s o lo s


h e re d a d o s d e IA y IB, d e la s ig u ie n t e m a n e ra :

● Al EventoC s e le h a d a d o la im p le m e n t a ció n p o r d e fe ct o , a u n q u e s i s e q u is ie s e s e p o d ría h a b e r


d a d o u n a im p le m e n t a ció n e s p e cífica a s u s b lo q u e s add y remove.

● Al m é t o d o Común() s e le h a d a d o u n a im p le m e n t a ció n p a ra ca d a ve rs ió n h e re d a d a d e u n a d e
la s cla s e s p a d re d e IC, u s á n d o s e p a ra e llo la s in t a xis d e im p le m e n t a ció n e xp lícit a a n t e s
co m e n t a d a . Nó t e s e q u e n o s e h a in clu id o e l m o d ifica d o r public e n la im p le m e n t a ció n d e e s t o s
m ie m b ro s .

● A la PropiedadA s e le h a d a d o u n a im p le m e n t a ció n co n u n b lo q u e set q u e n o a p a re cía e n la


d e fin ició n d e PropiedadA e n la in t e rfa z IA. Es t o e s vá lid o h a ce rlo s ie m p re y cu a n d o la
p ro p ie d a d n o s e h a ya im p le m e n t a d o e xp lícit a m e n t e , y lo m is m o o cu rre co n lo s in d iza d o re s y
e n lo s ca s o s e n q u e e n ve z d e set s e a get e l b lo q u e e xt ra im p le m e n t a d o .

Ot ra u t ilid a d d e la s im p le m e n t a cio n e s e xp lícit a s e s q u e s o n la ú n ica m a n e ra d e co n s e g u ir p o d e r d a r


im p le m e n t a ció n a m é t o d o s o cu lt a d o s e n la s d e fin icio n e s d e in t e rfa ce s . Po r e je m p lo , s i t e n e m o s :

interface IPadre
{
int P
}

interface IHija:Padre
{
new int P();
}

La ú n ica fo rm a d e p o d e r d e fin ir u n a cla s e d o n d e s e d é u n a im p le m e n t a ció n t a n t o p a ra e l m é t o d o P() co m o p a ra


la p ro p ie d a d P, e s u s a n d o im p le m e n t a ció n e xp lícit a a s í:

class C: IHija
{
void IPadre.P {}
public int P()
}

O a s í:

class C: IHija
{
public void P () {}
int IHija.P() {}

http://www.programacion.com/tutorial.csharp.16.html (4 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

O a s í:

class C: IHija
{
void IPadre.P() {}
int IHija.P() {}
}

Pe ro co m o n o s e p u e d e im p le m e n t a r e s s in n in g u n a im p le m e n t a ció n e xp lícit a , p u e s s e p ro d u ciría u n e rro r a l


t e n e r a m b o s m ie m b ro s la s m is m a s ig n a t u ra . Es d e cir, la s ig u ie n t e d e fin ició n n o e s co rre ct a :

class C: IHija
{
public int P() {} // ERROR: Ambos miembros tienen la misma signatura
public void P() {}
}

Es p o s ib le re im p le m e n t a r e n u n a cla s e h ija la s d e fin icio n e s q u e s u cla s e p a d re d ie s e p a ra lo s m é t o d o s q u e h e re d ó


d e u n a in t e rfa z. Pa ra h a ce r e s o b a s t a h a ce r q u e la cla s e h ija t a m b ié n h e re d e d e e s a in t e rfa z y d a r e n e lla la s
d e fin icio n e s e xp lícit a s d e m ie m b ro s d e la in t e rfa z q u e s e e s t im e n co n ve n ie n t e s , co n s id e rá n d o s e q u e la s
im p le m e n t a cio n e s p a ra lo s d e m á s s e rá n la s h e re d a d a s d e s u cla s e p a d re . Po r e je m p lo :

using System;

interface IA
{
void F();
}

class C1: IA
{
public void F()
{
Console.WriteLine("El F() de C1");
}
}

class C2: C1, IA


{
void IA.F() // Sin implementación explícita no redefiniría, sino ocultaría
{
Console.WriteLine("El F() de C2");
}

public static void Main()


{
IA obj = new C1();
IA obj2 = new C2();

obj.F();
obj2.F();
}
}

Re im p le m e n t a r u n m ie m b ro d e u n a in t e rfa z d e e s t a m a n e ra e s p a re cid o a re d e fin ir lo s m ie m b ro s


re im p le m e n t a d o s , s ó lo q u e a h o ra la re d e fin ició n s e ría s ó la m e n t e a cce s ib le a t ra vé s d e va ria b le s d e l t ip o d e la

http://www.programacion.com/tutorial.csharp.16.html (5 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

in t e rfa z As í, la s a lid a d e l e je m p lo a n t e rio r s e ría :

El F() de C1
El F() de C2

Ha y q u e t e n e r e n cu e n t a q u e d e e s t a m a n e ra s ó lo p u e d e n h a ce rs e re im p le m e n t a cio n e s d e m ie m b ro s s i la cla s e
d o n d e s e re im p le m e n t a h e re d a d ire ct a m e n t e d e la in t e rfa z im p le m e n t a d a e xp lícit a m e n t e o d e a lg u n a in t e rfa z
d e riva d a d e é s t a . As í, e n e l e je m p lo a n t e rio r s e ría in co rre ct o h a b e r h e ch o :

class C2:C1 // La lista de herencias e interfaces implementadas por C2


// sólo incluye a C1
{
void IA.f(); // ERROR: Aunque C1 herede de IA, IA no se incluye directamente
// en la lista de interfaces implementadas por C2
}

Es im p o rt a n t e s e ñ a la r q u e e l n o m b re d e in t e rfa z e s p e cifica d o e n u n a im p le m e n t a ció n e xp lícit a h a d e s e r


e xa ct a m e n t e e l n o m b re d e la in t e rfa z d o n d e s e d e fin ió e l m ie m b ro im p le m e n t a d o , n o e l d e a lg u n a s u b cla s e d e la
m is m a . Po r e je m p lo :

interface I1
{
void F()
}

interface I2
{}

class C1:I2
{
public void I2.F(); //ERROR: habría que usar I1.F()
}

En e l e je m p lo a n t e rio r, la lín e a co m e n t a d a co n t ie n e u n e rro r d e b id o a q u e F() s e d e fin ió d e n t ro d e la in t e rfa z


I1, y a u n q u e t a m b ié n p e rt e n e zca a I2 p o rq u e é s t a lo h e re d a d e I1, a la h o ra d e im p le m e n t a rlo e xp lícit a m e n t e
h a y q u e p re fija r s u n o m b re d e I1, n o d e I2.

Ac c e s o a m ie m b ro s d e u n a in t e rfa z

S e p u e d e a cce d e r a lo s m ie m b ro s d e u n a in t e rfa z im p le m e n t a d o s e n u n a cla s e d e m a n e ra n o e xp lícit a a t ra vé s


d e va ria b le s d e e s a cla s e co m o s i d e m ie m b ro s n o rm a le s d e la m is m a s e t ra t a s e . Po r e je m p lo , e s t e có d ig o
m o s t ra ría u n cin co p o r p a n t a lla :

CL c = new CL();
Console.WriteLine(c.PropiedadA);

S in e m b a rg o , t a m b ié n e s p o s ib le d e fin ir va ria b le s cu yo t ip o s e a u n a in t e rfa z. Au n q u e n o e xis t e n co n s t ru ct o re s d e


in t e rfa ce s , e s t a s va ria b le s p u e d e n in icia liza rs e g ra cia s a l p o lim o rfis m o a s ig n á n d o le s o b je t o s d e cla s e s q u e
im p le m e n t e n e s a in t e rfa z. As í, e l s ig u ie n t e có d ig o t a m b ié n m o s t ra ría u n cin co p o r p a n t a lla :

IA a = new CL();
Console.WriteLine(a.PropiedadA);

Nó t e s e q u e a t ra vé s d e u n a va ria b le d e u n t ip o in t e rfa z s ó lo s e p u e d e a cce d e r a m ie m b ro s d e l o b je t o a lm a ce n a d o


e n e lla q u e e s t é n d e fin id o s e n e s a in t e rfa z. Es d e cir, lo s ú n ico s m ie m b ro s vá lid o s p a ra e l o b je t o a a n t e rio r s e ría n
PropiedadA y Común()

http://www.programacion.com/tutorial.csharp.16.html (6 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

En ca s o d e q u e e l m ie m b ro a l q u e s e p re t e n d a a cce d e r h a ya s id o im p le m e n t a d o e xp lícit a m e n t e , s ó lo p u e d e
a cce d e rs e a é l a t ra vé s d e va ria b le s d e l t ip o in t e rfa z a l q u e p e rt e n e ce y n o a t ra vé s d e va ria b le s d e t ip o s q u e
h e re d e n d e e lla , ya q u e la d e fin ició n d e e s t o s m ie m b ro s e s p riva d a a l n o lle va r m o d ifica d o r d e a cce s o . Po r
e je m p lo :

CL cl = new CL();
IA a = cl;
IB b = cl;
// Console.WriteLine(cl.Común()); // Error: Común() fue
// implementado explícitamente
Console.WriteLine(a.Común());
Console.WriteLine(b.Común());
Console.WriteLine(((IA) cl).Común());
Console.WriteLine(((IB) cl).Común());

Ca d a ve z q u e s e lla m e a u n m é t o d o im p le m e n t a d o e xp lícit a m e n t e s e lla m a rá a la ve rs ió n d e l m is m o d e fin id a


p a ra la in t e rfa z a t ra vé s d e la q u e s e a cce d e . Po r e llo , la s a lid a d e l có d ig o a n t e rio r s e rá :

Ejecutado Común() de IA
Ejecutado Común() de IB
Ejecutado Común() de IA
Ejecutado Común() de IB

S e p u e d e d a r t a n t o u n a im p le m e n t a ció n im p lícit a co m o u n a e xp lícit a d e ca d a m ie m b ro d e u n a in t e rfa z. La


e xp lícit a s e u s a rá cu a n d o s e a cce d a a u n o b je t o q u e im p le m e n t e e s a in t e rfa z a t ra vé s d e u n a re fe re n cia a la
in t e rfa z, m ie n t ra s q u e la im p lícit a s e u s a rá cu a n d o e l a cce s o s e h a g a a t ra vé s d e u n a re fe re n cia d e l t ip o q u e
im p le m e n t a la in t e rfa z. Po r e je m p lo , d a d o e l s ig u ie n t e có d ig o :

interface I
{
object Clone();
}

class Clase:I
{
public object Clone()
{
Console.WriteLine("Implementación implícita");
}

public object IClonable.Clone()


{
Console.WriteLine("Implementación explícita");
}

public static void Main()


{
Clase obj = new Clase();
((I) obj).Clone();
obj.Clone();
}
}

El re s u lt a d o q u e p o r p a n t a lla s e m o s t ra rá t ra s e je cu t a rlo e s :

Implementación explícita
Implementación implícita

http://www.programacion.com/tutorial.csharp.16.html (7 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.16.html (8 de 8) [20/10/2002 18:22:20]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n
C#

En e s t a p á g in a :

● Te m a 1 6 : In s t ru ccio n e s
❍ Co n ce p t o d e in s t ru cció n
❍ In s t ru ccio n e s b á s ica s
❍ In s t ru ccio n e s co n d icio n a le s
❍ In s t ru ccio n e s it e ra t iva s
❍ In s t ru ccio n e s d e e xce p cio n e s
❍ In s t ru ccio n e s d e s a lt o
❍ Ot ra s in s t ru ccio n e s

Te m a 1 6 : I n s t ru c c io n e s

Co n c e p t o d e in s t ru c c ió n

To d a a cció n q u e s e p u e d a re a liza r e n e l cu e rp o d e u n m é t o d o , co m o d e fin ir va ria b le s lo ca le s , lla m a r a m é t o d o s ,


a s ig n a cio n e s y m u ch a s co s a s m á s q u e ve re m o s a lo la rg o d e e s t e t e m a , s o n in s t ru c c io n e s .

La s in s t ru ccio n e s s e a g ru p a n fo rm a n d o b lo q u e s d e in s t ru c c io n e s , q u e s o n lis t a s d e in s t ru ccio n e s e n ce rra d a s


e n t re lla ve s q u e s e e je cu t a n u n a t ra s o t ra . Es d e cir, la s in t a xis q u e s e s ig u e p a ra d e fin ir u n b lo q u e d e
in s t ru ccio n e s e s :

{ <listaInstrucciones> }

To d a va ria b le q u e s e d e fin a d e n t ro d e u n b lo q u e d e in s t ru ccio n e s s ó lo e xis t irá d e n t ro d e d ich o b lo q u e . Tra s é l


s e rá in a cce s ib le y p o d rá s e r d e s t ru id a p o r e l re co le ct o r d e b a s u ra . Po r e je m p lo , e s t e có d ig o n o e s vá lid o :

public void f();


{
{ int b; }
b = 1; // ERROR: b no existe fuera del bloque donde se declaró.
}

Lo s b lo q u e s d e in s t ru ccio n e s p u e d e n a n id a rs e , a u n q u e s i d e n t ro d e u n b lo q u e in t e rn o d e fin im o s u n a va ria b le co n


e l m is m o n o m b re q u e o t ra d e fin id a e n u n b lo q u e e xt e rn o s e co n s id e ra rá q u e s e h a p ro d u cid o u n e rro r, ya q u e n o
s e p o d rá d e t e rm in a r a cu á l d e la s d o s s e e s t a rá h a cie n d o re fe re n cia ca d a ve z q u e s e u t ilice s u n o m b re e n e l
b lo q u e in t e rn o .

http://www.programacion.com/tutorial.csharp.17.html (1 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

I n s t ru c c io n e s b á s ic a s

D e fin ic io n e s d e v a ria b le s lo c a le s

En e l Te m a 7 : Va ria b le s y t ip o s d e d a t o s ya s e vió q u e la s v a ria b le s lo c a le s s o n va ria b le s q u e s e d e fin e n e n e l


cu e rp o d e lo s m é t o d o s y s ó lo s o n a cce s ib le s d e s d e d ich o s cu e rp o s . Re cu é rd e s e q u e la s in t a xis e xp lica d a p a ra
d e fin irla s e ra la s ig u ie n t e :

<modificadores> <tipoVariable> <nombreVariable> = <valor>;

Ta m b ié n s e vió q u e p o d ía n d e fin irs e va ria s va ria b le s e n u n a m is m a in s t ru cció n s e p a ra n d o s u s p a re s n o m b re -


va lo r m e d ia n t e co m a s . Po r e je m p lo :

int a=5, b, c=-1;

As ig n a c io n e s

Un a a s ig n a c ió n e s s im p le m e n t e u n a in s t ru cció n m e d ia n t e la q u e s e in d ica u n va lo r a a lm a ce n a r e n u n d a t o . La
s in t a xis u s a d a p a ra e llo e s :

<destino> = <origen>;

En t e m a s p re vio s ya s e h a n d a d o n u m e ro s o s e je m p lo s d e có m o h a ce r e s t o , p o r lo q u e n o e s n e ce s a rio h a ce r
a h o ra m a yo r h in ca p ié e n e llo .

Lla m a d a s a m é t o d o s

En e l Te m a 8 : Mé t o d o s ya s e e xp licó q u e u n a lla m a d a a u n m é t o d o co n s is t e e n s o licit a r la e je cu ció n d e s u s


in s t ru ccio n e s a s o cia d a s d a n d o a s u s p a rá m e t ro s cie rt o s va lo re s . S i e l m é t o d o a lla m a r e s u n a m é t o d o d e o b je t o ,
la s in t a xis u s a d a p a ra e llo e s :

<objeto>.<nombreMétodo>(<valoresParámetros>);

Y s i e l m é t o d o a lla m a r e s u n m é t o d o d e t ip o , e n t o n ce s la lla m a d a s e re a liza co n :

<nombreTipo>.<nombreMétodo>(<valoresParámetros>);

Re cu é rd e s e q u e s i la lla m a d a a l m é t o d o d e t ip o s e h a ce d e n t ro d e la m is m a d e fin ició n d e t ip o d o n d e e l m é t o d o


fu e d e fin id o , la s e cció n < n o m b re Tip o > . d e la s in t a xis e s o p cio n a l.

I n s t ru c c ió n n u la

La in s t ru c c ió n n u la e s u n a in s t ru cció n q u e n o re a liza n a d a e n a b s o lu t o . S u s in t a xis co n s is t e e n e s crib ir u n


s im p le p u n t o y co m a p a ra re p re s e n t a rla . O s e a , e s :

S u e le u s a rs e cu a n d o s e d e s e a in d ica r e xp lícit a m e n t e q u e n o s e d e s e a e je cu t a r n a d a . Us a rla e s ú t il p a ra fa cilit a r


la le g ib ilid a d d e l có d ig o o , co m o ve re m o s m á s a d e la n t e e n e l t e m a , p o rq u e o t ra s in s t ru ccio n e s la n e ce s it a n p a ra
in d ica r cu á n d o e n a lg u n o s d e s u s b lo q u e s d e in s t ru ccio n e s co m p o n e n t e s n o s e h a d e re a liza r n in g u n a a cció n .

I n s t ru c c io n e s c o n d ic io n a le s

La s in s t ru c c io n e s c o n d ic io n a le s s o n in s t ru ccio n e s q u e p e rm it e n e je cu t a r b lo q u e s d e in s t ru ccio n e s s ó lo s i s e d a

http://www.programacion.com/tutorial.csharp.17.html (2 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

u n a d e t e rm in a d a co n d ició n . En lo s s ig u ie n t e s s u b a p a rt a d o s d e e s t e e p íg ra fe s e d e s crib e n cu á le s s o n la s
in s t ru ccio n e s co n d icio n a le s d is p o n ib le s e n C#

I n s t ru c c ió n if

La in s t ru c c ió n if p e rm it e e je cu t a r cie rt a s in s t ru ccio n e s s ó lo s i d e d a u n a d e t e rm in a d a co n d ició n . S u s in t a xis d e


u s o e s la s in t a xis :

if (<condición>)
<instruccionesIf>
else
<instruccionesElse>

El s ig n ifica d o d e e s t a in s t ru cció n e s e l s ig u ie n t e : s e e va lú a la e xp re s ió n <condición>, q u e h a d e d e vo lve r u n


va lo r ló g ico . S i e s cie rt a ( d e vu e lve true) s e e je cu t a n la s <instruccionesIf>, y s i e s fa ls a ( false) s e
e je cu t a n la s <instruccionesElse> La ra m a else e s o p cio n a l, y s i s e o m it e y la co n d ició n e s fa ls a s e s e g u iría
e je cu t a n d o a p a rt ir d e la in s t ru cció n s ig u ie n t e a l if. En re a lid a d , t a n t o <instruccionesIf> co m o
<instruccionesElse> p u e d e n s e r u n a ú n ica in s t ru cció n o u n b lo q u e d e in s t ru ccio n e s .

Un e je m p lo d e a p lica ció n d e e s t a in s t ru cció n e s e s t a va ria n t e d e l Ho la Mu n d o :

using System;

class HolaMundoIf
{
public static void Main(String[] args)
{
if (args.Length > 0)
Console.WriteLine("¡Hola {0}!", args[0]);
else
Console.WriteLine("¡Hola mundo!");
}
}

S i e je cu t a m o s e s t e p ro g ra m a s in n in g ú n a rg u m e n t o ve re m o s q u e e l m e n s a je q u e s e m u e s t ra e s ¡Hola Mundo!,
m ie n t ra s q u e s i lo e je cu t a m o s co n a lg ú n a rg u m e n t o s e m o s t ra rá u n m e n s a je d e b ie n ve n id a p e rs o n a liza d o co n e l
p rim e r a rg u m e n t o in d ica d o .

I n s t ru c c ió n s w it c h

La in s t ru c c ió n switch p e rm it e e je cu t a r u n o s u o t ro s b lo q u e s d e in s t ru ccio n e s s e g ú n e l va lo r d e u n a cie rt a


e xp re s ió n . S u e s t ru ct u ra e s :

switch (<expresión>)
{
case <valor1>: <bloque1>
<siguienteAcción>
case <valor2>: <bloque2>
<siguienteAcción>
...
default: <bloqueDefault>
<siguienteAcción>
}

El s ig n ifica d o d e e s t a in s t ru cció n e s e l s ig u ie n t e : s e e va lú a <expresión>. S i s u va lo r e s <valor1> s e e je cu t a e l


<bloque1>, s i e s <valor2> s e e je cu t a <bloque2>, y a s í p a ra e l re s t o d e va lo re s e s p e cifica d o s . S i n o e s ig u a l a

http://www.programacion.com/tutorial.csharp.17.html (3 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

n in g u n o d e e s o s va lo re s y s e in clu ye la ra m a default, s e e je cu t a e l <bloqueDefault>; p e ro s i n o s e in clu ye


s e p a s a d ire ct a m e n t e a e je cu t a r la in s t ru cció n s ig u ie n t e a l switch .

Lo s va lo re s in d ica d o s e n ca d a ra m a d e l switch h a n d e s e r e xp re s io n e s co n s t a n t e s q u e p ro d u zca n va lo re s d e


a lg ú n t ip o b á s ico e n t e ro , d e u n a e n u m e ra ció n , d e t ip o char o d e t ip o string. Ad e m á s , n o p u e d e h a b e r m á s d e
u n a ra m a co n e l m is m o va lo r.

En re a lid a d , a u n q u e t o d a s la s ra m a s d e u n switch s o n o p cio n a le s s ie m p re s e h a d e in clu ir a l m e n o s u n a .


Ad e m á s , la ra m a default n o t ie n e p o rq u é a p a re ce r la ú lt im a s i s e u s a , a u n q u e e s re co m e n d a b le q u e lo h a g a
p a ra fa cilit a r la le g ib ilid a d d e l có d ig o .

El e le m e n t o m a rca d o co m o <siguienteAcción> co lo ca d o t ra s ca d a b lo q u e d e in s t ru ccio n e s in d ica q u é e s lo


q u e h a d e h a ce rs e t ra s e je cu t a r la s in s t ru ccio n e s d e l b lo q u e q u e lo p re ce d e n . Pu e d e s e r u n o d e e s t o s t re s t ip o s
d e in s t ru ccio n e s :

goto case <valori>;


goto default;
break;

S i e s u n goto case in d ica q u e s e h a d e s e g u ir e je cu t a n d o e l b lo q u e d e in s t ru ccio n e s a s o cia d o e n e l switch a la


ra m a d e l < va lo ri> in d ica d o , s i e s u n goto default in d ica q u e s e h a d e s e g u ir e je cu t a n d o e l b lo q u e d e
in s t ru ccio n e s d e la ra m a default, y s i e s u n break in d ica q u e s e h a d e s e g u ir e je cu t a n d o la in s t ru cció n
s ig u ie n t e a l s wit ch .

El s ig u ie n t e e je m p lo m u e s t ra có m o s e u t iliza switch:

using System;

class HolaMundoSwitch
{
public static void Main(String[] args)
{
if (args.Length > 0)
switch(args[0])
{
case "José": Console.WriteLine("Hola José. Buenos días");
break;
case "Paco": Console.WriteLine("Hola Paco. Me alegro de verte");
break;
default: Console.WriteLine("Hola {0}", args[0]);
break;
}
else
Console.WriteLine("Hola Mundo");
}
}

Es t e p ro g ra m a re co n o ce cie rt o s n o m b re s d e p e rs o n a s q u e s e le p u e d e n p a s a r co m o a rg u m e n t o s a l la n za rlo y le s
s a lu d a d e fo rm a e s p e cia l. La ra m a default s e in clu ye p a ra d a r u n s a lu d o p o r d e fe ct o a la s p e rs o n a s n o
re co n o cid a s .

Pa ra lo s p ro g ra m a d o re s h a b it u a d o s a le n g u a je s co m o C+ + e s im p o rt a n t e re s a lt a rle s e l h e ch o d e q u e , a
d ife re n cia d e d ich o s le n g u a je s , C# o b lig a a in clu ir u n a s e n t e n cia break o u n a s e n t e n cia goto case a l fin a l d e
ca d a ra m a d e l switch p a ra e vit a r e rro re s co m u n e s y d ifícile s d e d e t e ct a r ca u s a d o s p o r o lvid a r in clu ir break; a l
fin a l d e a lg u n o d e e s t o s b lo q u e s y e llo p ro vo ca r q u e t ra s e je cu t a rs e e s e b lo q u e s e e je cu t e t a m b ié n e l s ig u ie n t e .

http://www.programacion.com/tutorial.csharp.17.html (4 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

I n s t ru c c io n e s it e ra t iv a s

La s in s t ru c c io n e s it e ra t iv a s s o n in s t ru ccio n e s q u e p e rm it e n e je cu t a r re p e t id a s ve ce s u n a in s t ru cció n o u n
b lo q u e d e in s t ru ccio n e s m ie n t ra s s e cu m p la u n a co n d ició n . Es d e cir, p e rm it e n d e fin ir b u cle s d o n d e cie rt a s
in s t ru ccio n e s s e e je cu t e n va ria s ve ce s . A co n t in u a ció n s e d e s crib e n cu á le s s o n la s in s t ru ccio n e s d e e s t e t ip o
in clu id a s e n C# .

I n s t ru c c ió n w h ile

La in s t ru c c ió n while p e rm it e e je cu t a r u n b lo q u e d e in s t ru ccio n e s m ie n t ra s s e d e u n a cie rt a in s t ru cció n . S u


s in t a xis d e u s o e s :

while (<condición>)
<instrucciones>

S u s ig n ifica d o e s e l s ig u ie n t e : S e e va lú a la <condición> in d ica d a , q u e h a d e p ro d u cir u n va lo r ló g ico . S i e s


cie rt a ( va lo r ló g ico true) s e e je cu t a n la s <instrucciones> y s e re p it e e l p ro ce s o d e e va lu a ció n d e
<condición> y e je cu ció n d e <instrucciones> h a s t a q u e d e je d e s e rlo . Cu a n d o s e a fa ls a ( false) s e p a s a rá
a e je cu t a r la in s t ru cció n s ig u ie n t e a l while. En re a lid a d <instrucciones> p u e d e s e r u n a ú n ica in s t ru cció n o
u n b lo q u e d e in s t ru ccio n e s .

Un e je m p lo có m o u t iliza r e s t a in s t ru cció n e s e l s ig u ie n t e :

using System;

class HolaMundoWhile
{
public static void Main(String[] args)
{
int actual = 0;

if (args.Length > 0)
while (actual < args.Length)
{
Console.WriteLine("¡Hola {0}!", args[actual]);
actual = actual + 1;
}
else
Console.WriteLine("¡Hola mundo!");
}
}

En e s t e ca s o , s i s e in d ica m á s d e u n a rg u m e n t o a l lla m a r a l p ro g ra m a s e m o s t ra rá p o r p a n t a lla u n m e n s a je d e


s a lu d o p a ra ca d a u n o d e e llo s . Pa ra e llo s e u s a u n a va ria b le a ct u a l q u e a lm a ce n a cu á l e s e l n ú m e ro d e
a rg u m e n t o a m o s t ra r e n ca d a e je cu ció n d e l while. Pa ra m a n t e n e rla s ie m p re a ct u a liza d a lo q u e s e h a ce e s
a u m e n t a r e n u n a u n id a d s u va lo r t ra s ca d a e je cu ció n d e la s <instrucciones> d e l b u cle .

Po r o t ro la d o , d e n t ro d e la s <instrucciones> d e u n while p u e d e n u s a rs e d o s in s t ru ccio n e s e s p e cia le s :

● b re a k ;: In d ica q u e s e h a d e a b o rt a r la e je cu ció n d e l b u cle y co n t in u a rs e e je cu t a n d o p o r la


in s t ru cció n s ig u ie n t e a l w h ile .

● c o n t in u e ;: In d ica q u e s e h a d e a b o rt a r la e je cu ció n d e la s < in s t ru ccio n e s > y re e va lu a rs e la


< co n d ició n > d e l b u cle , vo lvié n d o s e a e je cu t a r la < in s t ru ccio n e s > s i e s cie rt a o p a s á n d o s e a
e je cu t a r la in s t ru cció n s ig u ie n t e a lw h ile s i e s fa ls a .

http://www.programacion.com/tutorial.csharp.17.html (5 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

I n s t ru c c ió n d o . . . w h ile

La in s t ru cció n do...while e s u n a va ria n t e d e l while q u e s e u s a a s í:

do
<instrucciones>
while(<condición>);

La ú n ica d ife re n cia d e l s ig n ifica d o d e do...while re s p e ct o a l d e while e s q u e e n ve z d e e va lu a r p rim e ro la


co n d ició n y e je cu t a r <instrucciones> s ó lo s i e s cie rt a , do...while p rim e ro e je cu t a la s <instrucciones>
y lu e g o m ira la <condición> p a ra ve r s i s e h a d e re p e t ir la e je cu ció n d e la s m is m a s . Po r lo d e m á s a m b a s
in s t ru ccio n e s s o n ig u a le s , e in clu s o t a m b ié n p u e d e in clu irs e break; y continue; e n t re la s <instrucciones>
d e l do...while.

do ... while e s t á e s p e cia lm e n t e d e s t in a d o p a ra lo s ca s o s e n lo s q u e h a ya q u e e je cu t a r la s


<instrucciones> a l m e n o s u n a ve z a ú n cu a n d o la co n d ició n s e a fa ls a d e s d e e l p rin cip io . , co m o o cu rre e n e l
s ig u ie n t e e je m p lo :

using System;

class HolaMundoDoWhile
{
public static void Main()
{
String leído;

do
{
Console.WriteLine("Clave: ");
leído = Console.ReadLine();
}
while (leído != "José");
Console.WriteLine("Hola José");
}
}

Es t e p ro g ra m a p re g u n t a a l u s u a rio u n a cla ve y m ie n t ra s n o in t ro d u zca la co rre ct a ( Jo s é ) n o co n t in u a rá


e je cu t á n d o s e . Un a ve z q u e in t ro d u cid a co rre ct a m e n t e d a rá u n m e n s a je d e b ie n ve n id a a l u s u a rio .

I n s t ru c c ió n fo r

La in s t ru c c ió n for e s u n a va ria n t e d e while q u e p e rm it e re d u cir e l có d ig o n e ce s a rio p a ra e s crib ir lo s t ip o s d e


b u cle s m á s co m ú n m e n t e u s a d o s e n p ro g ra m a ció n . S u s in t a xis e s :

for (<inicialización>; <condición>; <modificación>)


<instrucciones>

El s ig n ifica d o d e e s t a in s t ru cció n e s e l s ig u ie n t e : s e e je cu t a n la s in s t ru ccio n e s d e <inicialización>, q u e


s u e le n u s a rs e p a ra d e fin ir e in icia liza r va ria b le s q u e lu e g o s e u s a rá n e n <instrucciones>. Lu e g o s e e va lú a
<condición>, y s i e s fa ls a s e co n t in ú a e je cu t a n d o p o r la in s t ru cció n s ig u ie n t e a l for; m ie n t ra s q u e s i e s cie rt a
s e e je cu t a n la s <instrucciones> in d ica d a s , lu e g o s e e je cu t a n la s in s t ru ccio n e s d e <modificación> - q u e
co m o s u n o m b re in d ica s u e le n u s a rs e p a ra m o d ifica r lo s va lo re s d e va ria b le s q u e s e u s e n e n <instrucciones>-
y lu e g o s e re e va lú a <condición> re p it ié n d o s e e l p ro ce s o h a s t a q u e é s t a ú lt im a d e je d e s e r cie rt a .

En <inicialización> p u e d e e n re a lid a d in clu irs e cu a lq u ie r n ú m e ro d e in s t ru ccio n e s q u e n o t ie n e n p o rq u é s e r

http://www.programacion.com/tutorial.csharp.17.html (6 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

re la t iva s a in icia liza r va ria b le s o m o d ifica rla s , a u n q u e lo a n t e riro s e a s u u s o m á s h a b it u a l. En ca s o d e s e r va ria s


s e h a n d e s e p a ra r m e d ia n t e co m a s ( ,) , ya q u e e l ca rá ct e r d e p u n t o y co m a ( ;) h a b it u a lm e n t e u s a d o p a ra e s t o s
m e n e s t e re s s e u s a e n e l for p a ra s e p a ra r lo s b lo q u e s d e <inicialización>, <condición> y
<modificación>. Ad e m á s , la in s t ru cció n n u la n o s e p u e d e u s a r e n e s t e ca s o y t a m p o co p u e d e n co m b in a rs e
d e fin icio n e s d e va ria b le s co n in s t ru ccio n e s d e o t ro s t ip o s .

Co n <modificación> p a s a a lg o s im ila r, ya q u e p u e d e in clu irs e có d ig o q u e n a d a t e n g a q u e ve r co n


m o d ifica cio n e s p e ro e n e s t e ca s o n o s e p u e d e n in clu ir d e fin icio n e s d e va ria b le s .

Co m o e n e l re s t o d e in s t ru ccio n e s h a s t a a h o ra vis t a s , e n <instrucciones> p u e d e s e r t a n t o u n a ú n ica


in s t ru cció n co m o u n b lo q u e d e in s t ru ccio n e s . Ad e m á s , la s va ria b le s q u e s e d e fin a n e n <inicialización>
s e rá n vis ib le s s ó lo d e n t ro d e e s a s <instrucciones>

La s ig u ie n t e cla s e e s e q u iva le n t e a la cla s e Ho la Mu n d o Wh ile ya vis t a s o lo q u e h a ce u s o d e l for p a ra co m p a ct a r


m á s s u có d ig o :

using System;

class HolaMundoFor
{
public static void Main(String[] args)
{
if (args.Length > 0)
for (int actual = 0; actual < args.Length; actual++)
Console.WriteLine("¡Hola {0}!", args[actual]);
else
Console.WriteLine("¡Hola mundo!");
}
}

Al ig u a l q u e co n while, d e n t ro d e la s <instrucciones> d e l for t a m b ié n p u e d e n in clu irs e in s t ru ccio n e s


continue; y break; q u e p u e d a n a lt e ra r e l fu n cio n a m ie n t o n o rm a l d e l b u cle .

I n s t ru c c ió n fo re a c h

La in s t ru c c ió n foreach e s u n a va ria n t e d e l for p e n s a d a e s p e cia lm e n t e p a ra co m p a ct a r la e s crit u ra d e có d ig o s


d o n d e s e re a lice a lg ú n t ra t a m ie n t o a t o d o s lo s e le m e n t o s d e u n a co le cció n , q u e s u e le u n u s o m u y h a b it u a l d e
for e n lo s le n g u a je s d e p ro g ra m a ció n q u e lo in clu ye n . La s in t a xis q u e s e s ig u e a la h o ra d e e s crib ir e s t a
in s t ru cció n foreach e s :

foreach (<tipoElemento> <elemento> in <colección>)


<instrucciones>

El s ig n ifica d o d e e s t a in s t ru cció n e s m u y s e n cillo : s e e je cu t a n <instrucciones> p a ra ca d a u n o d e lo s


e le m e n t o s d e la <colección> in d ica d a . <elemento> e s u n a va ria b le d e s ó lo le ct u ra d e t ip o <tipoElemento>
q u e a lm a ce n a rá e n ca d a m o m e n t o e l e le m e n t o d e la co le cció n q u e s e e s t é p ro ce s a n d o y q u e p o d rá s e r a cce d id a
d e s d e <instrucciones>.

Es im p o rt a n t e s e ñ a la r q u e <colección> n o p u e d e va le r null p o rq u e e n t o n ce s s a lt a ría u n a e xce p ció n d e t ip o


System.NullReferenceException, y q u e <tipoElemento> h a d e s e r u n t ip o cu yo s o b je t o s p u e d a n
a lm a ce n a r lo s va lo re s d e lo s e le m e n t o s d e <colección>

En t a n t o q u e u n a t a b la s e co n s id e ra q u e e s u n a co le cció n , e l s ig u ie n t e có d ig o m u e s t ra có m o u s a r for p a ra
co m p a ct a r a ú n m á s e l có d ig o d e la cla s e Ho la Mu n d o Fo r a n t e rio r:

using System;

http://www.programacion.com/tutorial.csharp.17.html (7 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

class HolaMundoFoeach
{
public static void Main(String[] args)
{
if (args.Length > 0)
foreach(String arg in args)
Console.WriteLine("¡Hola {0}!", arg);
else
Console.WriteLine("¡Hola mundo!");
}
}

En g e n e ra l, s e co n s id e ra q u e u n a co le cció n e s t o d o a q u e l o b je t o q u e im p le m e n t e la in t e rfa z
System.Collections.IEnumerable. Es t a in t e rfa z e s t á d e fin id a e n la BCL a s í:

interface IEnumerable
{
IEnumerator GetEnumerator();
}

El o b je t o d e in t e rfa z System.Collections.IEnumerator d e vu e lt o h a d e s e r u n e n u m e ra d o r q u e p e rm it a
re co rre r lo s e le m e n t o s d e la <colección>. Dich a in t e rfa z e s t á a s í p re d e fin id a :

interface IEnumerator
{
object Current
bool MoveNext();
void Reset();
}

El m é t o d o Reset() h a d e im p le m e n t a rs e d e m o d o q u e d e vu e lva e l e n u m e ra d o r re in icia d o a u n e s t a d o in icia l


d o n d e a ú n n o re fe re n cie n i s iq u ie ra a l p rim e r e le m e n t o d e la co le cció n s in o q u e s e a n e ce s a rio lla m a r a
MoveNext() p a ra q u e lo h a g a .

El m é t o d o MoveNext() s e h a d e im p le m e n t a r d e m o d o q u e h a g a q u e e l e n u m e ra d o r p a s e a a p u n t a r a l s ig u ie n t e
e le m e n t o d e la co le cció n y d e vu e lva u n b o o le a n o q u e in d iq u e s i t ra s a va n za r s e h a a lca n za d o e l fin a l d e la
co le cció n .

La p ro p ie d a d Current s e h a d e im p le m e n t a r d e m o d o q u e d e vu e lva s ie m p re e l e le m e n t o d e la co le cció n a l q u e


e l e n u m e ra d o r e s t é re fe re n cia n d o . S i s e in t e n t a le e r Current h a b ié n d o s e ya re co rrid o t o d a la co le cció n o
h a b ié n d o s e re in icia d o la co le cció n y n o h a b ié n d o s e co lo ca d o e n s u p rim e r e le m e n t o co n MoveNext(), s e h a d e
p ro d u cir u n a e xce p ció n d e t ip o System.Exception.SystemException.InvalidOperationException

Ot ra fo rm a d e co n s e g u ir q u e foreach co n s id e re q u e u n o b je t o e s u n a co le cció n vá lid a co n s is t e e n h a ce r q u e


d ich o o b je t o s ig a e l p a t ró n d e c o le c c ió n . Es t e p a t ró n co n s is t e e n d e fin ir e l t ip o d e l o b je t o d e m o d o q u e s u s
o b je t o s cu e n t e n co n u n m é t o d o p ú b lico GetEnumerator() q u e d e vu e lva u n o b je t o n o n u lo q u e cu e n t e co n u n a
p ro p ie d a d p ú b lica lla m a d a Current q u e p e rm it a le e r e l e le m e n t o a ct u a l y co n u n m é t o d o p ú b lico bool
MoveNext() q u e p e rm it a ca m b ia r e l e le m e n t o a ct u a l p o r e l s ig u ie n t e y d e vu e lva false s ó lo cu a n d o s e h a ya
lle g a d o a l fin a l d e la co le cció n .

El s ig u ie n t e e je m p lo m u e s t ra a m b o s t ip o s d e im p le m e n t a cio n e s :

using System;
using System.Collections;

class Patron

http://www.programacion.com/tutorial.csharp.17.html (8 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

{
private int actual = -1;

public Patron GetEnumerator()


{
return this;
}

public int Current


{
get {return actual;}
}

public bool MoveNext()


{
bool resultado = true;

actual++;
if (actual==10)
resultado = false;
return resultado;
}
}

class Interfaz:IEnumerable,IEnumerator
{
private int actual = -1;

public object Current


{
get {return actual;}
}

public bool MoveNext()


{
bool resultado = true;

actual++;
if (actual==10)
resultado = false;
return resultado;
}

public IEnumerator GetEnumerator()


{
return this;
}

public void Reset()


{
actual = -1;
}
}

class Principal
{
public static void Main()
{
Patron obj = new Patron();

http://www.programacion.com/tutorial.csharp.17.html (9 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

Interfaz obj2 = new Interfaz();

foreach (int elem in obj)


Console.WriteLine(elem);
foreach (int elem in obj2)
Console.WriteLine(elem);
}
}

El t ip o System.Array im p le m e n t a la in t e rfa z System.Collectiones.IEnumerator, p o r lo q u e t o d a s la s


t a b la s p o d rá n s e r u s a d a s re co rrid a s co n foreach. S i la t a b la a re co rre r e s m u lt id im e n s io n a l, s u s e le m e n t o s s e
re co rre rá n e n o rd e n co m o m u e s t ra e s t e e je m p lo :

int[,] tabla = { , };

foreach (int elemento in tabla)


Console.WriteLine(elemento);

La s a lid a p o r p a n t a lla d e l fra g m e n t o d e có d ig o a n t e rio r s e rá :

1
2
3
4

La u t ilid a d d e im p le m e n t a r e l p a t ró n co le cció n e n lu g a r d e la in t e rfa z IEnumerable e s q u e a s í n o e s n e ce s a rio


q u e Current d e vu e lva s ie m p re u n object, s in o q u e p u e d e d e vo lve r o b je t o s d e t ip o s m á s co n cre t o s y g ra cia s a
e llo p u e d e d e t e ct a rs e a l co m p ila r s i e l <tipoElemento> in d ica d o p u e d e o n o a lm a ce n a r lo s o b je t o s d e la
co le cció n .

Po r e je m p lo , s i e n e l e je m p lo a n t e rio r s u s t it u im o s e n e l ú lt im o foreach e l <tipoElemento> in d ica d o p o r


Pa t ró n , e l có d ig o s e g u irá co m p ila n d o p e ro a l e je cu t a rlo s a lt a rá u n a e xce p ció n
System.InvalidCastException. S in e m b a rg o , s i la s u s t it u ció n s e h u b ie s e h e ch o e n e l p e n ú lt im o foreach,
e n t o n ce s e l có d ig o d ire ct a m e n t e n o co m p ila ría y s e n o s in fo rm a ría d e u n e rro r d e b id o a q u e lo s o b je t o s int n o
s o n co n ve rt ib le s e n o b je t o s Pa t ró n .

Ta m b ié n h a y q u e t e n e r e n cu e n t a q u e la co m p ro b a ció n d e t ip o s q u e s e re a liza e n t ie m p o d e e je cu ció n s i e l o b je t o


s ó lo im p le m e n t ó la in t e rfa z IEnumerable e s m u y e s t rict a , e n e l s e n t id o d e q u e s i e n e l e je m p lo a n t e rio r
s u s t it u im o s e l <tipoElemento> d e l ú lt im o foreach p o r byte t a m b ié n s e la n za rá la e xce p ció n a l n o s e r lo s
o b je t o s d e t ip o int im p lícit a m e n t e co n ve rt ib le s e n bytes s in o s ó lo a t ra vé s d e l o p e ra d o r () S in e m b a rg o ,
cu a n d o s e s ig u e e l p a t ró n d e co le cció n la s co m p ro b a cio n e s d e t ip o n o s o n t a n e s t rict a s y e n t o n ce s s í q u e s e ría
vá lid o s u s t it u ir int p o r byte e n <tipoElemento>.

El p ro b le m a d e s ó lo im p le m e n t a r e l p a t ró n co le cció n e s q u e e s t e e s u n a ca ra ct e rís t ica p ro p ia d e C# y co n la s


in s t ru ccio n e s foreach ( o e q u iva le n t e s ) d e le n g u a je s q u e n o lo s o p o rt e n n o s e p o d ría re co rre r co le ccio n e s q u e
s ó lo s ig u ie s e n e s t e p a t ró n . Un a s o lu ció n e n e s t o s ca s o s p u e d e s e r h a ce r q u e e l t ip o d e l o b je t o co le cció n
im p le m e n t e t a n t o la in t e rfa z IEnumerable co m o e l p a t ró n co le cció n . Ob via m e n t e e s t a in t e rfa z d e b e ría
im p le m e n t a rs e e xp lícit a m e n t e p a ra e vit a rs e co n flict o s d e riva d o s d e q u e s u s m ie m b ro s t e n g a n s ig n a t u ra s
co in cid e n t e s co n la s d e lo s m ie m b ro s p ro p io s d e l p a t ró n co le cció n .

S i u n o b je t o d e u n t ip o co le cció n im p le m e n t a t a n t o la in t e rfa z IEnumerable co m o e l p a t ró n d e co le cció n ,


e n t o n ce s e n C# foreach u s a rá e l p a t ró n co le cció n p a ra re co rre rlo .

I n s t ru c c io n e s d e e x c e p c io n e s

Co n c e p t o d e e x c e p c ió n .

http://www.programacion.com/tutorial.csharp.17.html (10 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

La s e x c e p c io n e s s o n e l m e ca n is m o re co m e n d a d o e n la p la t a fo rm a . NET p a ra la p ro p a g a ció n d e e rro re s q u e s e


p ro d u zca n d u ra n t e la e je cu ció n d e la s a p lica cio n e s ( d ivis io n e s p o r ce ro , in t e n t o s d e le ct u ra d e a rch ivo s d a ñ a d o s ,
e t c. ) Bá s ica m e n t e u n a e xce p ció n e s u n o b je t o d e riva d o d e System.Exception q u e s e g e n e ra cu a n d o e n
t ie m p o d e e je cu ció n s e p ro d u ce a lg ú n e rro r y q u e co n t ie n e in fo rm a ció n s o b re e l m is m o .

Tra d icio n a lm e n t e , e l s is t e m a q u e e n o t ro s le n g u a je s y p la t a fo rm a s s e h a ve n id o u s a n d o p a ra in fo rm a r e s t o s
e rro re s co n s is t ía s im p le m e n t e e n h a ce r q u e lo s m é t o d o s e n cu ya e je cu ció n p u d ie s e n p ro d u cirs e d e vo lvie ra n
có d ig o s q u e in fo rm a s e n s o b re s i s e h a n e je cu t a d o co rre ct a m e n t e o , e n ca s o co n t ra rio , s o b re cu á l fu e e l e rro r
p ro d u cid o . S in e m b a rg o , la s e xce p cio n e s p ro p o rcio n a n la s s ig u ie n t e s ve n t a ja s fre n t e a d ich o s is t e m a :

● Cla rid a d : El u s o d e có d ig o s e s p e cia le s p a ra in fo rm a r d e e rro r s u e le d ificu lt a r la le g ib ilid a d d e l


fu e n t e e n t a n t o q u e s e m e zcla n la s in s t ru ccio n e s p ro p ia s d e la ló g ica d e l m is m o co n la s
in s t ru ccio n e s p ro p ia s d e l t ra t a m ie n t o d e lo s e rro re s q u e p u d ie s e n p ro d u cirs e d u ra n t e s u
e je cu ció n . Po r e je m p lo :

int resultado = obj.Método();


if (resultado == 0) // Sin errores al ejecutar obj.Método();

else if (resultado == 1) // Tratamiento de error de código 1

else if (resultado == 2) // Tratamiento de error de código 2


...

Co m o s e ve rá , u t iliza n d o e xce p cio n e s e s p o s ib le e s crib ir e l có d ig o co m o s i n u n ca s e fu e s e n a p ro d u cir


e rro re s y d e ja r e n u n a zo n a a p a rt e t o d o e l có d ig o d e t ra t a m ie n t o d e e rro re s , lo q u e co n t rib u ye a fa cilit a r la
le g ib ilid a d d e lo s fu e n t e s .

● Má s in fo rm a c ió n : A p a rt ir d e l va lo r d e u n có d ig o d e e rro r p u e d e s e r d ifícil d e d u cir la s ca u s a s


d e l m is m o y co n s e g u irlo m u ch a s ve ce s im p lica t e n e rs e q u e co n s u lt a r la d o cu m e n t a ció n q u e
p ro p o rcio n a d a s o b re e l m é t o d o q u e lo p ro vo có , q u e p u e d e in clu s o q u e n o e s p e cifiq u e
cla ra m e n t e s u ca u s a .

Po r e l co n t ra rio , u n a e xce p ció n e s u n o b je t o q u e cu e n t a co n ca m p o s q u e d e s crib e n la s ca u s a s d e l e rro r y a


cu yo t ip o s u e le d á rs e le u n n o m b re q u e re s u m a cla ra m e n t e s u ca u s a . Po r e je m p lo , p a ra in fo rm a r e rro re s
d e d ivis ió n p o r ce ro s e s u e le u t iliza r u n a e xce p ció n p re d e fin id a d e t ip o DivideByZeroException e n
cu yo ca m p o Message s e d e t a lla n la s ca u s a s d e l e rro r p ro d u cid o

● Tra t a m ie n t o a s e g u ra d o : Cu a n d o s e u t iliza n có d ig o s d e e rro r n a d a o b lig a a t ra t a rlo s e n ca d a


lla m a d a a l m é t o d o q u e lo s p u e d a p ro d u cir, e ig n o ra rlo s p u e d e p ro vo ca r m á s a d e la n t e e n e l
có d ig o co m p o rt a m ie n t o s in e s p e ra d o s d e ca u s a s d ifícile s d e d e s cu b rir.

Cu a n d o s e u s a n e xce p cio n e s s ie m p re s e a s e g u ra q u e e l p ro g ra m a d o r t ra t e t o d a e xce p ció n q u e p u e d a


p ro d u cirs e o q u e , s i n o lo h a ce , s e a b o rt e la e je cu ció n d e la a p lica ció n m o s t rá n d o s e u n m e n s a je in d ica n d o
d ó n d e s e h a p ro d u cid o e l e rro r.

Ah o ra b ie n , t ra d icio n a lm e n t e e n le n g u a je s co m o C+ + e l u s o d e e xce p cio n e s s ie m p re h a t e n id o la s d e s ve n t a ja s


re s p e ct o a l u s o d e có d ig o s d e e rro r d e co m p lica r e l co m p ila d o r y d a r lu g a r a có d ig o s m á s le n t o s y d ifícile s d e
o p t im iza r e n lo s q u e t ra s ca d a in s t ru cció n q u e p u d ie s e p ro d u cir e xce p cio n e s e l co m p ila d o r d e b e in t ro d u cir la s
co m p ro b a cio n e s n e ce s a ria s p a ra d e t e ct a rla s y t ra t a rla s a s í co m o p a ra co m p ro b a r q u e lo s o b je t o s cre a d o s s e a n
co rre ct a m e n t e d e s t ru id o s s i s e p ro d u ce n .

S in e m b a rg o , e n la p la t a fo rm a . NET d e s a p a ra ce n lo s p ro b le m a s d e co m p lica r e l co m p ila d o r y d ificu lt a r la s


o p t im iza cio n e s ya q u e q u e e s e l CLR q u ie n s e e n ca rg a d e d e t e ct a r y t ra t a r la s e xce p cio n e s y e s s u re co le ct o r d e
b a s u ra q u ie n s e e n ca rg a a s e g u ra r la co rre ct a d e s t ru cció n d e lo s o b je t o s . Ob via m e n t e e l có d ig o s e g u irá s ie n d o
a lg o m á s le n t o , p e ro e s u n p e q u e ñ o s a crificio q u e m e re ce la p e n a h a ce r e n t a n t o q u e e llo a s e g u ra q u e n u n ca s e
p ro d u cirá n p ro b le m a s d ifícile s d e d e t e ct a r d e riva d o s d e e rro re s ig n o ra d o s .

La c la s e S y s t e m . Ex c e p t io n

http://www.programacion.com/tutorial.csharp.17.html (11 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

Co m o ya s e h a d ich o , t o d a s la s e xce p cio n e s d e riva n d e u n t ip o p re d e fin id o e n la BCL lla m a d o


System.Exception. Lo s p rin cip a le s m ie m b ro s q u e h e re d a n d e é s t e s o n :

● s t rin g Me s s a g e { v irt u a l g e t ;} : Co n t ie n e u n m e n s a je d e s crip t ivo d e la s ca u s a s d e la


e xce p ció n . Po r d e fe ct o e s t e m e n s a je e s u n a ca d e n a va cía ( "")

● Ex c e p t io n I n n e rEx c e p t io n { v irt u a l g e t ;} : S i u n a e xce p ció n fu e ca u s a d a co m o


co n s e cu e n cia d e o t ra , e s t a p ro p ie d a d co n t ie n e e l o b je t o System.Exception q u e re p re s e n t a a
la e xce p ció n q u e la ca u s ó . As í s e p u e d e n fo rm a r ca d e n a s d e e xce p cio n e s d e cu a lq u ie r lo n g it u d .
S i s e d e s e a o b t e n e r la ú lt im a e xce p ció n d e la ca d e n a e s m e jo r u s a r e l m é t o d o virtual
Exception GetBaseException()

● s t rin g S t a c k Tra c e { v irt u a l g e t ;} : Co n t ie n e la p ila d e lla m a d a s a m é t o d o s q u e s e t e n ía e n e l


m o m e n t o e n q u e s e p ro d u jo la e xce p ció n . Es t a p ila e s u n a ca d e n a co n in fo rm a ció n s o b re cu á l
e s e l m é t o d o e n q u e s e p ro d u jo la e xce p ció n , cu á l e s e l m é t o d o q u e lla m ó a e s t e , cu á l e s e l
q u e lla m ó a e s e o t ro , e t c.

● s t rin g S o u rc e { v irt u a l g e t ; v irt u a l s e t ;} : Alm a ce n a in fo rm a ció n s o b re cu á l fu e la a p lica ció n


u o b je t o q u e ca u s ó la e xce p ció n .

● Me t h o d Ba s e Ta rg e t S it e { v irt u a l g e t ;} : Alm a ce n a cu á l fu e e l m é t o d o d o n d e s e p ro d u jo la
e xce p ció n e n fo rm a d e o b je t o System.Reflection.MethodBase. Pu e d e co n s u lt a r la
d o cu m e n t a ció n d e l S DK s i d e s e a có m o o b t e n e r in fo rm a ció n s o b re la s ca ra ct e rís t ica s d e l
m é t o d o a t ra vé s d e l o b je t o MethodBase.

● s t rin g He lp Lin k { v irt u a l g e t ;} : Co n t ie n e u n a ca d e n a co n in fo rm a ció n s o b re cu á l e s la URI


d o n d e s e p u e d e e n co n t ra r in fo rm a ció n s o b re la e xce p ció n . El va lo r d e e s t a ca d e n a p u e d e
e s t a b le ce rs e co n virtual Exception SetHelpLink (string URI), q u e d e vu e lve la e xce p ció n
s o b re la q u e s e a p lica p e ro co n la URI ya a ct u a liza d a .

Pa ra cre a r o b je t o s d e cla s e System.Exception s e p u e d e u s a r lo s co n s t ru ct o re s :

Exception()
Exception(string msg)
Exception(string msg, Exception causante)

El p rim e r co n s t ru ct o r cre a u n a e xce p ció n cu yo va lo r p a ra Me s s a g e s e rá "" y n o ca u s a d a p o r n in g u n a o t ra


e xce p ció n ( InnerException va ld rá null) El s e g u n d o la cre a co n e l va lo r in d ica d o p a ra Message, y e l ú lt im o la
cre a co n a d e m á s la e xce p ció n ca u s a n t e in d ica d a .

En la p rá ct ica , cu a n d o s e cre a n n u e vo s t ip o s d e riva d o s d e System.Exception n o s e s u e le re d e fin ir s u s


m ie m b ro s n i a ñ a d irle s n u e vo s , s in o q u e s ó lo s e h a ce la d e riva ció n p a ra d is t in g u ir u n a e xce p cio n e s d e o t ra p o r e l
n o m b re d e l t ip o a l q u e p e rt e n e ce n . Ah o ra b ie n , e s co n ve n ie n t e re s p e t a r e l co n ve n io d e d a rle s u n n o m b re
a ca b a d o e n Exception y re d e fin ir lo s t re s co n s t ru ct o re s a n t e s co m e n t a d o s .

Ex c e p c io n e s p re d e fin id a s c o m u n e s

En e l e s p a cio d e n o m b re s S y s t e m d e la BCL h a y p re d e fin id a s m ú lt ip le s e xce p cio n e s d e riva d a s d e


S y s t e m . Ex c e p t io n q u e s e co rre s p o n d e n co n lo s e rro re s m á s co m u n e s q u e p u e d e n s u rg ir d u ra n t e la e je cu ció n
d e u n a a p lica ció n . En la Ta b la 8 s e re co g e n a lg u n a s :

Tip o d e la e x c e p c ió n Ca u s a d e q u e s e p ro d u z c a la e x c e p c ió n
Arg u m e n t Ex c e p t io n Pa s a d o a rg u m e n t o n o vá lid o ( b a s e d e e xce p cio n e s d e a rg u m e n t o s )

http://www.programacion.com/tutorial.csharp.17.html (12 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

Arg u m e n t N u llEx c e p t io n Pa s a d o a rg u m e n t o n u lo
Arg u m e n t Ou t OfRa n g e Ex c e p t io n Pa s a d o a rg u m e n t o fu e ra d e ra n g o
Arra y Ty p e Mis t m a t c h Ex c e p t io n As ig n a ció n a t a b la d e e le m e n t o q u e n o e s d e s u t ip o
COMEx c e p t io n Exce p ció n d e o b je t o COM
D iv id e By Ze ro Ex c e p t io n Divis ió n p o r ce ro
Ín d ice d e a cce s o a e le m e n t o d e t a b la fu e ra d e l ra n g o vá lid o ( m e n o r q u e
I n d e x Ou t OfRa n g e Ex c e p t io n
ce ro o m a yo r q u e e l t a m a ñ o d e la t a b la )
I n v a lid Ca s t Ex c e p t io n Co n ve rs ió n e xp lícit a e n t re t ip o s n o vá lid a
I n v a lid Op e ra t io n Ex c e p t io n Op e ra ció n in vá lid a e n e s t a d o a ct u a l d e l o b je t o
I n t e ro p Ex c e p t io n Ba s e d e e xce p cio n e s p ro d u cid a s e n co m u n ica ció n co n có d ig o in s e g u ro
N u llRe fe re n c e Ex c e p t io n Acce s o a m ie m b ro d e o b je t o q u e va le null
De s b o rd a m ie n t o d e n t ro d e co n t e xt o d o n d e s e h a d e co m p ro b a r lo s
Ov e rflo w Ex c e p t io n d e s b o rd a m ie n t o s ( e xp re s ió n co n s t a n t e , in s t ru cció n ch e cke d , o p e ra n ció n
ch e cke d u o p ció n d e l co m p ila d o r / ch e cke d )
Ou t OfMe m o ry Ex c e p t io n Fa lt a d e m e m o ria p a ra cre a r u n o b je t o co n n e w
S EHEx c e p t io n Exce p ció n S HE d e l API Win 3 2
De s b o rd a m ie n t o d e la p ila , g e n e ra lm e n t e d e b id o a u n e xce s ivo n ú m e ro d e
S t a c k Ov e rflo w Ex c e p t io n
lla m a d a s re cu rre n t e s .
Ha o cu rrid o a lg u n a e xce p ció n a l in icia liza r lo s ca m p o s e s t á t ico s o e l
Ty p e I n iz ia liz a t io n Ex c e p t io n
co n s t ru ct o r e s t á t ico d e u n t ip o . En In n e rExce p t io n s e in d ica cu á l e s .

Ta b la 8 : Exce p cio n e s p re d e fin id a s d e u s o fre cu e n t e

Ob via m e n t e , e s co n ve n ie n t e q u e s i la s a p lica cio n e s q u e e s crib a m o s n e ce s it e n la n za r e xce p cio n e s re la t iva s a


e rro re s d e lo s t ip o s e s p e cifica d o s e n la Ta b la 8 , la n ce n p re cis a m e n t e la s e xce p cio n e s in d ica d a s e n e s a t a b la y n o
cu a lq u ie r o t ra - ya s e a d e fin id a p o r n o s o t ro s m is m o s o p re d e fin id a e n la BCL co n o t ro s ig n ifica d o .

La n z a m ie n t o d e e x c e p c io n e s . I n s t ru c c ió n t h ro w

Pa ra in fo rm a r d e u n e rro r n o b a s t a co n cre a r u n o b je t o d e l t ip o d e e xce p ció n a p ro p ia d o , s in o q u e t a m b ié n h a y


p a s á rs e lo a l m e ca n is m o d e p ro p a g a ció n d e e xce p cio n e s d e l CLR. A e s t o s e le lla m a la n z a r la e x c e p c ió n , y p a ra
h a ce rlo s e u s a la s ig u ie n t e in s t ru cció n :

throw <objetoExcepciónALanzar>;

Po r e je m p lo , p a ra la n za r u n a e xce p ció n d e t ip o DivideByZeroException s e p o d ría h a ce r:

throw new DivideByZeroException();

S i e l o b je t o a la n za r va le null, e n t o n ce s s e p ro d u cirá u n a NullReferenceException q u e s e rá la n za d a e n ve z


d e la e xce p ció n in d ica d a e n la in s t ru cció n throw.

Ca p t u ra d e e x c e p c io n e s . I n s t ru c c ió n t ry

Un a ve z la n za d a u n a e xce p ció n e s p o s ib le e s crib ir có d ig o q u e e s e n ca rg e d e t ra t a rla . Po r d e fe ct o , s i e s t e có d ig o


n o s e e s crib e la e xce p ció n p ro vo ca q u e la a p lica ció n a b o rt e m o s t ra n d o u n m e n s a je d e e rro r e n e l q u e s e d e s crib e
la e xce p ció n p ro d u cid a ( in fo rm a ció n d e s u p ro p ie d a d Message) y d ó n d e s e h a p ro d u cid o ( in fo rm a ció n d e s u
p ro p ie d a d StackTrace) As í, d a d o e l s ig u ie n t e có d ig o fu e n t e d e e je m p lo :

using System;

http://www.programacion.com/tutorial.csharp.17.html (13 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

class PruebaExcepciones
{
static void Main()
{
A obj1 = new A();
obj1.F();
}
}

class A
{
public void F()
{
G();
}

static public void G()


{
int c = 0;
int d = 2/c;
}
}

Al co m p ila rlo n o s e d e t e ct a rá n in g ú n e rro r ya q u e a l co m p ila d o r n o le m e re ce la p e n a ca lcu la r e l va lo r d e c e n


t a n t o q u e e s u n a va ria b le , p o r lo q u e n o d e t e ct a rá q u e d ivid ir 2/c n o e s vá lid o . S in e m b a rg o , a l e je cu t a rlo s e
in t e n t a rá d ivid ir p o r ce ro e n e s a in s t ru cció n y e llo p ro vo ca rá q u e a b o rt e la a p lica ció n m o s t ra n d o e l s ig u ie n t e
m e n s a je :

Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero.


at PruebaExcepciones.Main()

Co m o s e ve , e n e s t e m e n s a je s e in d ica q u e n o s e h a t ra t a d o u n a e xce p ció n d e d ivis ió n p o r ce ro ( t ip o


DivideByZeroException) d e n t ro d e l có d ig o d e l m é t o d o Main() d e l t ip o PruebaExcepciones. S i a l
co m p ila r e l fu e n t e h u b ié s e m o s u t iliza d o la o p ció n /debug, e l co m p ila d o r h a b ría cre a d o u n fich e ro .pdb co n
in fo rm a ció n e xt ra s o b re la s in s t ru ccio n e s d e l e je cu t a b le g e n e ra d o q u e p e rm it iría q u e a l e je cu t a rlo s e m o s t ra s e u n
m e n s a je m u ch o m á s d e t a lla d o co n in fo rm a ció n s o b re la in s t ru cció n e xa ct a q u e p ro vo có la e xce p ció n , la ca d e n a
d e lla m a d a s a m é t o d o s q u e lle va ro n a s u e je cu ció n y e l n ú m e ro d e lín e a q u e ca d a u n a o cu p a e n e l fu e n t e :

Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero.


at A.G() in E:\c#\Ej\ej.cs:line 22
at A.F() in E:\c#\Ej\ej.cs:line 16
at PruebaExcepciones.Main() in E:\c#\Ej\ej.cs:line 8

S i s e d e s e a t ra t a r la e xce p ció n h a y q u e e n ce rra r la d ivis ió n d e n t ro d e u n a in s t ru c c ió n try co n la s ig u ie n t e


s in t a xis :

try
<instrucciones>
catch (<excepción1>)
<tratamiento1>
catch (<excepción2>)
<tratamiento2>
...
finally
<instruccionesFinally>

El s ig n ifica d o d e try e s e l s ig u ie n t e : s i d u ra n t e la e je cu ció n d e la s <instrucciones> s e la n za u n a e xce p ció n

http://www.programacion.com/tutorial.csharp.17.html (14 de 24) [20/10/2002 18:22:37]


Programación en castellano. El lenguaje de programación C#

d e t ip o <excepción1> ( o a lg u n a s u b cla s e s u ya ) s e e je cu t a n la s in s t ru ccio n e s <tratamiento1>, s i fu e s e d e


t ip o <excepción2> s e e je cu t a ría <tratamiento2>, y a s í h a s t a q u e s e e n cu e n t re u n a clá u s u la catch q u e
p u e d a t ra t a r la e xce p ció n p ro d u cid a . S i n o s e e n co n t ra s e n in g u n a y la in s t ru cció n try e s t u vie s e a n id a d a d e n t ro
d e o t ra , s e m ira ría e n lo s catch d e s u try p a d re y s e re p e t iría e l p ro ce s o . S i a l fin a l s e re co rre n t o d o s lo s trys
p a d re s y n o s e e n cu e n t ra n in g ú n catch co m p a t ib le , e n t o n ce s s e b u s ca ría e n e l có d ig o d e s d e e l q u e s e lla m ó a l
m é t o d o q u e p ro d u jo la e xce p ció n . S i a s í s e t e rm in a lle g a n d o a l m é t o d o q u e in ició e l h ilo d o n d e s e p ro d u jo la
e xce p ció n y t a m p o co a llí s e e n cu e n t ra u n t ra t a m ie n t o a p ro p ia d o s e a b o rt a d ich o h ilo ; y s i e s e h ilo e s e l p rin cip a l
( e l q u e co n t ie n e e l p u n t o d e e n t ra d a ) s e a b o rt a e l p ro g ra m a y s e m u e s t ra e l m e n s a je d e e rro r co n in fo rm a ció n
s o b re la e xce p ció n la n za d a ya vis t o .

As í, p a ra t ra t a r la e xce p ció n d e l e je m p lo a n t e rio r d e m o d o q u e u n a d ivis ió n p o r ce ro p ro vo q u e q u e a d s e le


a s ig n e e l va lo r 0 , s e p o d ría re e s crib ir G() d e e s t a o t ra fo rm a :

static public void G()


{
try
{
int c = 0;
int d = 2/c;
}
catch (DivideByZeroException)
{ d=0; }
}

Pa ra s im p lifica r t a n t o e l co m p ila d o r co m o e l có d ig o g e n e ra d o y fa vo re ce r la le g ib ilid a d d e l fu e n t e , e n lo s catchs


s e b u s ca s ie m p re o rd e n d e a p a ra ció n t e xt u a l, p o r lo q u e p a ra e vit a r catchs a b s u rd o s n o s e p e rm it e d e fin ir
catchs q u e p u e d a n ca p t u ra r e xce p cio n e s ca p t u ra b le s p o r catchs p o s t e rio re s a e llo s e n s u m is m a in s t ru cció n
try.

Ta m b ié n h a y q u e s e ñ a la r q u e cu a n d o e n <instrucciones> s e la n ce u n a e xce p ció n q u e s e a t ra t a d a p o r u n


catch d e a lg ú n try - ya s e a d e la q u e co n t ie n e la s <instrucciones>, d e a lg ú n try p a d re s u yo o d e a lg u n o
d e lo s m é t o d o s q u e p ro vo ca ro n la lla m a d a a l q u e p ro d u jo la e xce p ció n - s e s e g u irá e je cu t a n d o a p a rt ir d e la s
in s t ru ccio n e s s ig u ie n t e s a e s e try.

El b lo q u e finally e s o p cio n a l, y s i s e in clu ye h a d e h a ce rlo t ra s t o d a s lo s b lo q u e s catch. La s


<instruccionesFinally> d e e s t e b lo q u e s e e je cu t a rá n t a n t o s i s e p ro d u ce n e xce p cio n e s e n
<instrucciones> co m o s i n o . En e l s e g u n d o ca s o s u s in s t ru ccio n e s s e e je cu t a rá n t ra s la s <instrucciones>,
m ie n t ra s q u e e n e l p rim e ro lo h a rá n d e s p u é s d e t ra t a r la e xce p ció n p e ro a n t e s d e s e g u irs e e je cu t a n d o p o r la
in s t ru cció n s ig u ie n t e a l try q u e la t ra t ó . S i e n u n try n o s e e n cu e n t ra u n catch co m p a t ib le , a n t e s d e p a s a r a
b u s ca r e n s u try p a d re o e n s u m é t o d o lla m a n t e p a d re s e e je cu t a rá n la s <instruccionesFinally>.

S ó lo s i d e n t ro d e u n b lo q u e finally s e la n za s e u n a e xce p ció n s e a b o rt a la e je cu ció n d e l m is m o . Dich a


e xce p ció n s e ría p ro p a g a d a a l try p a d re o a l m é t o d o lla m a n t e p a d re d e l try q u e co n t u vie s e e l finally.

Au n q u e lo s b lo q u e s catch y finally s o n o p cio n a le s , t o d a in s t ru cció n try h a d e in clu ir a l m e n o s u n b lo q u e


catch o u n b lo q u e finally.

El s ig u ie n t e e je m p lo re s u m e có m o fu n cio n a la p ro p a g a ció n d e e xce p cio n e s :

using System;

class MiException:Exception {}

class Excepciones
{
public static void Main()
{

http://www.programacion.com/tutorial.csharp.17.html (15 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

try
{
Console.WriteLine("En el try de Main()");
Método();
Console.WriteLine("Al final del try de Main()");
}
catch (MiException)
{
Console.WriteLine("En el catch de Main()");
}
finally
{
Console.WriteLine("finally de Main()");
}
}

public static void Método()


{
try
{
Console.WriteLine("En el try de Método()");
Método2();
Console.WriteLine("Al final del try de Método()");
}
catch (OverflowException)
{
Console.WriteLine("En el catch de Método()");
}
finally
{
Console.WriteLine("finally de Método()");
}
}

public static void Método2()


{
try
{
Console.WriteLine("En el try de Método2()");
throw new MiException();
Console.WriteLine("Al final del try de Método2()");
}
catch (DivideByZeroException)
{ Console.WriteLine("En el catch de Método2()"); }
finally
{ Console.WriteLine("finally de Método2()"); }
}
}

Nó t e s e q u e e n e s t e có d ig o lo ú n ico q u e s e h a ce e s d e fin ir u n t ip o n u e vo d e e xce p ció n lla m a d o MiException y


lla m a rs e e n e l Main() a u n m é t o d o lla m a d o Método() q u e lla m a a o t ro d e n o m b re Método2() q u e la n za u n a
e xce p ció n d e e s e t ip o . Vie n d o la s a lid a d e e s t e có d ig o e s fá cil ve r e l re co rrid o s e g u id o d u ra n t e la p ro p a g a ció n d e
la e xce p ció n :

En try de Main()
En try de Método()
En try de Método2()
finally de Método2

http://www.programacion.com/tutorial.csharp.17.html (16 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

finally de Método
En catch de Main()
finally de Main()

Co m o s e p u e d e o b s e rva r, h a y m u ch o s WriteLine() q u e n u n ca s e e je cu t a n ya q u e e n cu e n t o s e la n za u n a
e xce p ció n s e s ig u e e je cu t a n d o t ra s la in s t ru cció n s ig u ie n t e a l try q u e la t ra t ó ( a u n q u e e je cu t a n d o a n t e s lo s
finally p e n d ie n t e s , co m o s e d e d u ce d e la s a lid a d e l e je m p lo ) De h e ch o , e l co m p ila d o r s e d a rá cu e n t a q u e la
in s t ru cció n s ig u ie n t e a l throw n u n ca s e e je cu t a rá e in fo rm a rá d e e llo co n u n m e n s a je d e a vis o .

La id e a d e t o d o e s t e m e ca n is m o d e e xce p cio n e s e s e vit a r m e zcla r e l có d ig o n o rm a l co n e l có d ig o d e t ra t a m ie n t o


d e e rro re s . As í, e n <instrucciones> s e e s cib iría e l có d ig o co m o s i n o s e p u d ie s e n p ro d u cir e rro re s , e n la s
clá u s u la s catch s e t ra t a ría n lo s p o s ib le s e rro re s , y e n la clá u s u la finally s e in clu iría có d ig o a e je cu t a r t a n t o s i
p ro d u je s e n e rro re s co m o s i n o ( s u e le u s a rs e p a ra lib e ra r re cu rs o s o cu p a d o s , co m o fich e ro o co n e xio n e s d e re d
a b ie rt a s )

En re a lid a d , t a m b ié n e s p o s ib le e s crib ir ca d a clá u s u la catch d e fin ie n d o u n a va ria b le q u e s e p o d rá u s a r d e n t ro


d e l có d ig o d e t ra t a m ie n t o d e la m is m a p a ra h a ce r re fe re n cia a la e xce p ció n ca p t u ra d a . Es t o s e h a ce co n la
s in t a xis :

catch (<tipoExcepción> <nombreVariable>)


{
<tratamiento>
}

Nó t e s e q u e e n t a n t o q u e t o d a s la s e xce p cio n e s d e riva n d e System.Exception, p a ra d e fin ir u n a clá u s u la catch


q u e p u e d a ca p t u ra r cu a lq u ie r t ip o d e e xce p ció n b a s t a u s a r:

catch(System.Exception <nombreObjecto>)
{
<tratamiento>
}

En re a lid a d la s in t a xis a n t e rio r s ó lo p e rm it e ca p t u ra r la s e xce p cio n e s p ro p ia s d e la p la t a fo rm a . NET, q u e d e riva n


d e System.Exception. S in e m b a rg o , h a y le n g u a je s co m o C+ + q u e p e rm it e n la n za r e xce p cio n e s n o d e riva d a s
d e d ich a cla s e , y p a ra e s o s ca s o s s e h a in clu id o e n C# u n a va ria n t e d e catch s í q u e re a lm e n t e p u e d e ca p t u ra r
e xce p cio n e s d e cu a lq u ie r t ip o , t a n t o s i d e riva n d e System.Exception co m o s i n o . S u s in t a xis e s :

catch
{
<tratamiento>
}

Co m o p u e d e d e d u cirs e d e s u s in t a xis , e l p ro b le m a q u e p re s e n t a e s t a ú lt im a va ria n t e d e catch e s q u e n o


p ro p o rcio n a in fo rm a ció n s o b re cu á l e s la e xce p ció n ca p t u ra d a , p o r lo q u e a ve ce s p u e d e re s u lt a r p o co ú t il y s i
s ó lo s e d e s e a ca p t u ra r cu a lq u ie r e xce p ció n d e riva d a d e System.Exception e s m e jo r u s a r la s in t a xis e xp lica d a
p re via m e n t e a e lla .

En cu a lq u ie r ca s o s , a m b o s t ip o s d e clá u s u la s catch s ó lo p u e d e n s e r e s crit a s co m o la ú lt im a clá u s u la catch d e l


try, ya q u e s i n o la s clá u s u la s catch q u e le s ig u ie s e n n u n ca lle g a ría n a e je cu t a rs e d e b id o a q u e la s p rim e ra s
ca p t u ra ría n a n t e s cu a lq u ie r e xce p ció n d e riva d a d e System.Exception.

Re s p e ct o a l u s o d e throw, h a y q u e s e ñ a la r q u e h a y u n a fo rm a e xt ra d e u s a rlo q u e s ó lo e s vá lid a d e n t ro d e


có d ig o s d e t ra t a m ie n t o d e e xce p cio n e s ( có d ig o s <tratamientoi> d e la s clá u s u la s catch) Es t a fo rm a d e u s o
co n s is t e e n s e g u ir s im p le m e n t e e s t a s in t a xis :

throw;

http://www.programacion.com/tutorial.csharp.17.html (17 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

En e s t e ca s o lo q u e s e h a ce e s re la n za r la m is m a e xce p ció n q u e s e ca p t u ró e n e l b lo q u e catch d e n t ro d e cu yo


d e có d ig o d e t ra t a m ie n t o s e u s a e l throw; Ha y q u e p re cis a r q u e la e xce p ció n re la n za d a e s p re cis a m e n t e la
ca p t u ra d a , y a u n q u e e n e l b lo q u e catch s e la m o d ifiq u e a t ra vé s d e la va ria b le q u e la re p re e s n t a , la ve rs ió n
re la n za d a s e rá la ve rs ió n o rig in a l d e la m is m a y n o la m o d ifica d a .

Ad e m á s , cu a n d o s e re la n ce u n a e xce p ció n e n u n try co n clá u s u la finally, a n t e s d e p a s a r a re p ro ce s a r la


e xce p ció n e n e l try p a d re d e l q u e la re la n zó s e e je cu t a rá d ich a clá u s u la .

I n s t ru c c io n e s d e s a lt o

La s in s t ru c c io n e s d e s a lt o p e rm it e n e je cu t a r va ria r e l o rd e n n o rm a l e n q u e s e e je cu t a n la s in s t ru ccio n e s d e u n
p ro g ra m a , q u e co n s is t e e n e je cu t a rla s u n a t ra s o t ra e n e l m is m o o rd e n e n q u e s e h u b ie s e n e s crit o e n e l fu e n t e .
En lo s s u b a p a rt a d o s d e e s t e e p íg ra fe s e d e s crib irá n cu á le s s o n la s in s t ru ccio n e s d e s a lt o in clu id a s e n C# :

I n s t ru c c ió n b re a k

Ya s e h a vis t o q u e la in s t ru c c ió n break s ó lo p u e d e in clu irs e d e n t ro d e b lo q u e s d e in s t ru ccio n e s a s o cia d o s a


in s t ru ccio n e s it e ra t iva s o in s t ru ccio n e s switch e in d ica q u e s e d e s e a a b o rt a r la e je cu ció n d e la s m is m a s y s e g u ir
e je cu t a n d o a p a rt ir d e la in s t ru cció n s ig u ie n t e a e lla s . S e u s a a s í:

break;

Cu a n d o e s t a s e n t e n cia s e u s a d e n t ro d e u n try co n clá u s u la finally, a n t e s d e a b o rt a rs e la e je cu ció n d e la


in s t ru cció n it e ra t iva o d e l switch q u e la co n t ie n e y s e g u irs e e je cu t a n d o p o r la in s t ru cció n q u e le s ig a , s e
e je cu t a rá n la s in s t ru ccio n e s d e la clá u s u la finally d e l try. Es t o s e h a ce p a ra a s e g u ra r q u e e l b lo q u e finally
s e e je cu t e a ú n e n ca s o d e s a lt o .

Ad e m á s , s i d e n t ro u n a clá u s u la finally in clu id a e n d e u n switch o d e u n a in s t ru cció n it e ra t iva s e u s a break,


n o s e p e rm it e q u e co m o re s u lt a d o d e l break s e s a lg a d e l finally.

I n s t ru c c ió n c o n t in u e

Ya s e h a vis t o q u e la in s t ru c c ió n continue s ó lo p u e d e u s a rs e d e n t ro d e l b lo q u e d e in s t ru ccio n e s d e u n a


in s t ru cció n it e ra t iva e in d ica q u e s e d e s e a p a s a r a re e va lu a r d ire ct a m e n t e la co n d ició n d e la m is m a s in e je cu t a r
e l re s t o d e in s t ru ccio n e s q u e co n t u vie s e . La e va lu a ció n d e la co n d ició n s e h a ría d e la fo rm a h a b it u a l: s i e s cie rt a
s e re p it e e l b u cle y s i e s fa ls a s e co n t in ú a e je cu t a n d o p o r la in s t ru cció n q u e le s ig u e . S u s in t a xis d e u s o e s a s í d e
s e n cilla :

continue;

En cu a n t o a s u s u s o s d e n t ro d e s e n t e n cia s try, t ie n e la s m is m a s re s t riccio n e s q u e break: a n t e s d e s a lir d e u n


try s e e je cu t a rá s ie m p re s u b lo q u e finally y n o e s p o s ib le s a lir d e u n finally in clu id o d e n t ro d e u n a
in s t ru cció n it e ra t iva co m o co n s e cu e n cia d e u n continue.

I n s t ru c c ió n re t u rn

Es t a in s t ru cció n s e u s a p a ra in d ica r cu á l e s e l o b je t o q u e h a d e d e vo lve r u n m é t o d o , y s e u s a a s í:

return <objetoRetorno>;

La e je cu ció n d e e s t a in s t ru cció n p ro vo ca q u e s e a b o rt e la e je cu ció n d e l m é t o d o d e n t ro d e l q u e a p a re ce y q u e s e


d e vu e lva e l <objetoRetorno> a l m é t o d o q u e lo lla m ó . Co m o e s ló g ico , e s t e o b je t o h a d e s e r d e l t ip o d e
re t o rn o d e l m é t o d o e n q u e a p a re ce e l return o d e a lg u n o co m p a t ib le co n é l, p o r lo q u e e s t a in s t ru cció n s ó lo
p o d rá in clu irs e e n m é t o d o s cu yo t ip o d e re t o rn o n o s e a void, o e n lo s b lo q u e s get d e la s p ro p ie d a d e s o
in d iza d o re s . De h e ch o , e s o b lig a t o rio q u e t o d o m é t o d o co n t ip o d e re t o rn o t e rm in e p o r u n return.

http://www.programacion.com/tutorial.csharp.17.html (18 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

Lo s m é t o d o s q u e d e vu e lva n void p u e d e n t e n e r u n return co n u n a s in t a xis e s p a cia l e n la q u e n o s e in d ica


n in g ú n va lo r a d e vo lve r s in o q u e s im p le m e n t e s e u s a return p a ra in d ica r q u e s e d e s e a t e rm in a r la e je cu ció n d e l
m é todo:

return;

Nu e va m e n t e , co m o co n e l re s t o d e in s t ru ccio n e s d e s a lt o h a s t a a h o ra vis t a s , s i s e in clu ye s e u n return d e n t ro


d e u n b lo q u e try co n clá u s u la finally, a n t e s d e d e vo lve rs e e l o b je t o e s p e cifica d o s e e je cu t a ría n la s
in s t ru ccio n e s d e la clá u s u la finally. S i h u b ie s e n va rio s b lo q u e s finally a n id a d o s , la s in s t ru ccio n e s d e ca d a
u n o e s e je cu t a ría n d e m a n e ra o rd e n a d a ( o s e a , d e l m á s in t e rn o a l m á s e xt e rn o ) Ah o ra b ie n , lo q u e n o e s p o s ib le
e s in clu ir u n return d e n t ro d e u n a clá u s u la finally.

I n s t ru c c ió n g o t o

La in s t ru c c ió n goto p e rm it e p a s a r a e je cu t a r e l có d ig o a p a rt ir d e u n a in s t ru cció n cu ya e t iq u e t a s e in d ica e n e l


g o t o . La s in t a xis d e u s o d e e s t a in s t ru cció n e s :

goto <etiqueta>;

Co m o e n la m a yo ría d e lo s le n g u a je s , goto e s u n a in s t ru c c ió n m a ld it a cu yo u s o n o s e re co m ie n d a p o rq u e
d ificu lt a in n e ce s a ria m e n t e la le g ib ilid a d d e l có d ig o y s u e le s e r fá cil s im u la rla u s a n d o in s t ru ccio n e s it e ra t iva s y
s e le ct iva s co n la s co n d icio n e s a p ro p ia d a s . S in e m b a rg o , e n C# s e in clu ye p o rq u e p u e d e s e r e ficie n t e u s a rla s i s e
a n id a n m u ch a s in s t ru ccio n e s y p a ra re d u cir s u s e fe ct o s n e g a t ivo s s e le h a n im p u e s t o u n a s re s t riccio n e s :

S ó lo s e p u e d e n e t iq u e t a r in s t ru ccio n e s , y n o a d ire ct iva s using, d ire ct iva s d e p re p ro ce s a d o , d e fin icio n e s d e


m ie m b ro s , d e t ip o s o d e e s p a cio s d e n o m b re s .

● La e t iq u e t a in d ica d a n o p u e d a p e rt e n e ce r a u n b lo q u e d e in s t ru ccio n e s a n id a d o d e n t ro d e l
b lo q u e d e s d e e l q u e s e u s a e l g o t o n i q u e e t iq u e t e a in s t ru ccio n e s d e o t ro m é t o d o d ife re n t e a
a q u é l e n e l cu a l s e e n cu e n t ra e l g o t o q u e la re fe re n cia .
● Pa ra e t iq u e t a r u n a in s t ru cció n d e m o d o q u e p u e d a s e r d e s t in o d e u n s a lt o co n g o t o b a s t a
p re ce d e rla d e l n o m b re co n e l q u e s e la q u ie ra e t iq u e t a r s e g u id o d e d o s p u n t o s ( :) Po r
e je m p lo , e l s ig u ie n t e có d ig o d e m u e s t ra có m o u s a r goto y d e fin ir u n a e t iq u e t a :

using System;

class HolaMundoGoto
{
public static void Main(string[] args)
{
for (int i=0; i<args.Length; i++)
{
if (args[i] != "salir")
Console.WriteLine(args[i]);
else
goto fin:
}
fin: ;
}
}

Es t e p ro g ra m a d e e je m p lo lo q u e h a ce e s m o s t ra r p o r p a n t a lla t o d o s lo s a rg u m e n t o s q u e s e le p a s e n co m o
p a rá m e t ro s , a u n q u e s i a lg u n o fu e s e salir e n t o n ce s s e d e ja ría d e m o s t ra r a rg u m e n t o s y s e a b o rt a la e je cu ció n
d e la a p lica ció n . Vé a s e a d e m á s q u e e s t e e je m p lo p o n e d e m a n ifie s t o u n a d e la s u t ilid a d e s d e la in s t ru cció n n u la ,
ya q u e s i n o s e h u b ie s e e s crit o t ra s la e t iq u e t a fin e l p ro g ra m a n o co m p ila ría e n t a n t o q u e t o d a e t iq u e t a h a d e
p re ce d e r a a lg u n a in s t ru cció n ( a u n q u e s e a la in s t ru cció n n u la )

http://www.programacion.com/tutorial.csharp.17.html (19 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

Nó t e s e q u e a l fin y a l ca b o lo s u s o s d e goto d e n t ro d e in s t ru ccio n e s switch q u e s e vie ro n a l e s t u d ia r d ich a


in s t ru cció n n o s o n m á s q u e va ria n t e s d e l u s o g e n e ra l d e goto, ya q u e default: n o e s m á s q u e u n a e t iq u e t a y
case <valor>: p u e d e ve rs e co m o u n a e t iq u e t a u n t a n t o e s p e cia l cu yo n o m b re e s case s e g u id o d e e s p a cio s e n
b la n co y u n va lo r. En a m b o s ca s o s , la e t iq u e t a in d ica d a h a d e p e rt e n e ce r a l m is m o s wit ch q u e e l goto u s a d o y
n o va le q u e é s t e n o la co n t e n g a p e ro la co n t e n g a a lg ú n switch q u e co n t e n g a a l switch d e l goto.

El u s o d e goto d e n t ro d e s e n t e n cia s try, t ie n e la s m is m a s re s t riccio n e s q u e break, continue y return:


a n t e s d e s a lir co n u n goto d e u n try s e e je cu t a rá s ie m p re s u b lo q u e finally y n o e s p o s ib le fo rza r a s a lt a r
fu e ra d e u n finally.

I n s t ru c c ió n t h ro w

La in s t ru c c ió n throw ya s e h a vis t o q u e s e u s a p a ra la n za r e xce p cio n e s d e e s t e m o d o :

throw <objetoExcepciónALanzar>;

En ca s o d e q u e n o s e in d iq u e n in g ú n <objetoExcepciónALanzar> s e re la n za rá e l q u e s e e s t u vie s e t ra t a n d o
e n e s e m o m e n t , a u n q u e e s t o s ó lo e s p o s ib le s i e l throw s e h a e s crit o d e n t ro d e l có d ig o d e t ra t a m ie n t o a s o cia d o
a a lg u n a clá u s u la catch.

Co m o ya s e h a e xp lica d o a fo n d o e s t a in s t ru cció n e n e s t e m is m o t e m a , p a ra m á s in fo rm a ció n s o b re b a s t a


re m it irs e a l e p íg ra fe Ex ce p cio n e s d e e s t e t e m a .

Ot ra s in s t ru c c io n e s

La s in s t ru ccio n e s vis t a s h a s t a a h o ra s o n co m u n e s a m u ch o s le n g u a je s d e p ro g ra m a ció n . S in e m b a rg o , e n C#


t a m b ié n s e h a in clu id o u n b u e n n ú m e ro d e n u e va s in s t ru ccio n e s p ro p ia s d e e s t e le n g u a je . Es t a s in s t ru ccio n e s s e
d e s crib e n e n lo s s ig u ie n t e s a p a rt a d o s :

I n s t ru c c io n e s c h e c k e d y u n c h e c k e d

La s in s t ru ccio n e s ch e cke d y u n ch e cke d p e rm it e n co n t ro la r la fo rm a e n q u e t ra t a rá n lo s d e s b o rd a m ie n t o s q u e


o cu rra n d u ra n t e la re a liza ció n d e o p e ra cio n e s a rit m é t ica s co n t ip o s b á s ico e n t e ro s . Fu n cio n a n d e fo rm a s im ila r a
lo s o p e ra d o re s checked y unchecked ya vis t o s e n e l Te m a 4 : As p e ct o s lé x ico s , a u n q u e a d ife re n cia d e é s t o s
s o n a p lica b le s a b lo q u e s e n t e ro s d e in s t ru ccio n e s y n o a u n a ú n ica e xp re s ió n . As í, la in s t ru c c ió n checked s e
usa de e ste m odo:

checked
<instrucciones>

To d o d e s b o rd a m ie n t o q u e s e p ro d u zca a l re a liza r o p e ra cio n e s a rit m é t ica s co n e n t e ro s e n <instrucciones>


p ro vo ca rá q u e s e la n ce u n a e xce p ció n System.OverflowException. Po r s u p a rt e , la in s t ru c c ió n unchecked
s e u s a a s í:

unchecked
<instrucciones>

En e s t e ca s o , t o d o d e s b o rd a m ie n t o q u e s e p ro d u zca a l re a liza r o p e ra cio n e s a rit m é t ica s co n t ip o s b á s ico s e n t e ro s


e n <instrucciones> s e rá ig n o ra d o y lo q u e s e h a rá s e rá t o m a r e l va lo r re s u lt a n t e d e q u e d a rs e co n lo s b it s
m e n o s s ig n ifica t ivo s n e ce s a rio s .

Po r d e fe ct o , e n a u s e n cia d e e s t a s in s t ru ccio n e s la s e xp re s io n e s co n s t a n t e s s e e va lú a n co m o s i s e in clu ye s e n


d e n t ro d e u n a in s t ru cció n checked y la s q u e n o co n s t a n t e s co m o s i s e in clu ye s e n d e n t ro d e u n a in s t ru cció n
unchecked. S in e m b a rg o , a t ra vé s d e la o p ció n /checked d e l co m p ila d o r e s p o s ib le t a n t o h a ce r q u e p o r
d e fe ct o s e co m p ru e b e n lo s d e s b o rd a m ie n t o e n t o d o s lo s ca s o s p a ra a s í s ie m p re p o d e r d e t e ct a rlo s y t ra t a rlo s

http://www.programacion.com/tutorial.csharp.17.html (20 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

De s d e Vis u a l S t u d io . NET, la fo rm a d e co n t ro la r e l t ip o d e co m p ro b a cio n e s q u e p o r d e fe ct o s e h a rá n e s a t ra vé s


d e Vie w - > P ro p e t y P a g e s - > Co n fig u ra t io n S e t t in g s - > Bu ild - > Ch e c k fo r o v e rflo w u n d e rflo w .

El s ig u ie n t e có d ig o m u e s t ra u n e je m p lo d e có m o u s a r a m b a s in s t ru ccio n e s :

using System;

class Unchecked
{
static short x = 32767; // Valor maximo del tipo short

public static void Main()


{
unchecked
{
Console.WriteLine((short) (x+1)); // (1)
Console.WriteLine((short) 32768); // (2)
}
}
}

En u n p rin cip io e s t e có d ig o co m p ila ría , p e ro lo s d e s b o rd a m ie n t o s p ro d u cid o s p o r e l h e ch o d e q u e 3 2 7 6 8 n o e s u n


va lo r q u e s e p u e d a re p re s e n t a r co n u n short ( 1 6 b it s co n s ig n o ) p ro vo ca ría q u e a p a re cie s e p o r p a n t a lla d ich o
va lo r t ru n ca d o , m o s t rá n d o s e :

-32768
-32678

S in e m b a rg o , s i s u s t it u yé s e m o s la in s t ru cció n unchecked p o r checked, e l có d ig o a n t e rio r n i s iq u ie ra co m p ila ría


ya q u e e l co m p ila d o r d e t e ct a ría q u e s e va a p ro d u cir u n d e s b o rd a m ie n t o e n (2) d e b id o a q u e 3 2 7 6 8 e s
co n s t a n t e y n o re p re s e n t a b le co n u n short.

S i e lim in a m o s la in s t ru cció n (2) e l có d ig o co m p ila ría ya q u e (x+1) n o e s u n a e xp re s ió n co n s t a n t e y p o r t a n t o e l


co m p ila d o r n o p o d ría d e t e ct a r d e s b o rd a m ie n t o a l co m p ila r. S in e m b a rg o , cu a n d o s e e je cu t a s e la a p lica ció n s e
la n za ría u n a System.OverflowException.

I n s t ru c c ió n lo c k

La in s t ru c c ió n lock e s ú t il e n a p lica cio n e s co n cu rre n t e s d o n d e m ú lt ip le s h ilo s p u e d e n e s t a r a cce d ie n d o


s im u lt á n e a m e n t e a u n m is m o re cu rs o , ya q u e lo q u e h a ce e s g a ra n t iza r q u e u n h ilo n o p u e d a a cce d e r a u n
re cu rs o m ie n t ra s o t ro t a m b ié n lo e s t é h a cie n d o . S u s in t a xis e s la s ig u ie n t e :

lock (<objeto>)
<instrucciones>

S u s ig n ifica d o e s e l s ig u ie n t e : n in g ú n h ilo p u e d e e je cu t a r la s <instrucciones> d e l b lo q u e in d ica d o s i o t ro la s


e s t á e je cu t a n d o , y s i a lg u n o lo in t e n t a s e q u e d a rá e s p e ra n d o h a s t a q u e a ca b e e l p rim e ro . Es t o t a m b ié n a fe ct a a
b lo q u e s d e <instrucciones> d e cu a lq u ie r o t ro lock cu yo <objeto> s e a e l m is m o . Es t e <objeto> h a d e s e r
d e a lg ú n t ip o re fe re n cia .

En re a lid a d , la in s t ru cció n a n t e rio r e s e q u iva le n t e a h a ce r:

System.Threading.Monitor.Enter(<objeto>);
try
<instrucciones>
finally

http://www.programacion.com/tutorial.csharp.17.html (21 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

{
System.Threading.Monitor.Exit(<objeto>);
}

S in e m b a rg o , u s a r lock t ie n e d o s ve n t a ja s : e s m á s co m p a ct o y e ficie n t e ( <objeto> s ó lo s e e va lú a u n a ve z)

Un a b u e n a fo rm a d e g a ra n t iza r la e xclu s ió n m u t u a d u ra n t e la e je cu ció n d e u n m é t o d o d e u n cie rt o o b je t o e s


u s a n d o this co m o <objeto>. En e l ca s o d e q u e s e t ra t a s e d e u n m é t o d o d e t ip o , e n t a n t o q u e this n o t ie n e
s e n t id o d e n t ro d e e s t o s m é t o d o s e s t á t ico s u n a b u e n a a lt e rn a t iva s e ría u s a r e l o b je t o System.Type q u e
re p re s e n t a s e a e s e t ip o . Po r e je m p lo :

class C
{
public static void F()
{
lock(typeof(C))
{
// ... Código al que se accede exclusivamente
}
}
}

I n s t ru c c ió n u s in g

La in s t ru c c ió n using fa cilit a e l t ra b a jo co n o b je t o s q u e t e n g a n q u e e je cu t a r a lg u n a t a re a d e lim p ie za o


lib e ra ció n d e re cu rs o s u n a ve z q u e t e rm in e d e s e r ú t ile s . Au n q u e p a ra e s t o s m e n e s t e re s ya e s t á n lo s
d e s t ru ct o re s , d a d o s u ca rá ct e r in d e t e rm in is t a p u e d e q u e e n d e t e rm in a d a s o ca s io n e s n o s e a co n ve n ie n t e co n fia r
e n e llo s p a ra re a liza r e s t e t ip o d e t a re a s . La s in t a xis d e u s o d e e s t a in s t ru cció n e s la s ig u ie n t e :

using (<tipo> <declaraciones>)


<instrucciones>

En <declaraciones> s e p u e d e in d ica r u n o o va rio s o b je t o s d e t ip o <tipo> s e p a ra d o s p o r co m a s . Es t o s


o b je t o s s e rá n d e s ó lo le ct u ra y s ó lo s e rá n a cce s ib le s d e s d e <instrucciones>. Ad e m á s , h a n d e im p le m e n t a r la
in t e rfa z System.IDisposable d e fin id a co m o s ig u e :

interface IDisposable
{
void Dispose()
}

En la im p le m e n t a ció n d e Dispose() s e e s crib iría e l có d ig o d e lim p ie za n e ce s a rio , p u e s e l s ig n ifica d o d e using


co n s is t e e n q u e a l a ca b a r la e je cu ció n d e <instrucciones>, s e lla m a a u t o m á t ica m e n t e a l m é t o d o Dispose()
d e lo s o b je t o s d e fin id o s e n <declaraciones>

Ha y q u e t e n e r e n cu e n t a q u e la lla m a d a a Dispose() s e h a ce s e a cu a l s e a la ra zó n d e q u e s e d e je d e e je cu t a r
la s <instrucciones> Es d e cir, t a n t o s i s e h a p ro d u cid o u n a e xce p ció n co m o s i s e h a a ca b a d o s u e je cu ció n
n o rm a lm e n t e o co n u n a in s t ru cció n d e s a lt o , Dispose() e s s ie m p re lla m a d o . En re a lid a d u n a in s t ru cció n using
co m o :

using (R1 r1 = new R1())


{
r1.F();
}

Es t ra t a d a p o r e l co m p ila d o r co m o :

http://www.programacion.com/tutorial.csharp.17.html (22 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

{
R1 r1 = new R1()
try
{
r1.F();
}
finally
{
if (r1!=null)
((IDisposable) r1).Dispose();
}
}

S i s e d e cla ra s e n va rio s o b je t o s e n <declaraciones>, a Dispose() s e le lla m a ría e n e l o rd e n in ve rs o a co m o


fu e ro n d e cla ra d o s . Lo m is m o o cu rre s i s e a n id a s e n va ria s in s t ru ccio n e s using: p rim e ro s e lla m a ría a l
Dispose() d e la s va ria b le s d e cla ra d a s e n lo s using in t e rn o s y lu e g o a la s d e lo s e xt e rn o s . As í, e s t a s d o s
in s t ru ccio n e s s o n e q u iva le n t e s :

using (Recurso obj = new Recurso(), obj2= new Recurso())


{
r1.F();
r2.F();
}

using (Recurso obj = new Recurso())


{
using (Recurso obj2= new Recurso())
{
r1.F();
r2.F();
}
}

El s ig u ie n t e e je m p lo re s u m e có m o fu n cio n a la s e n t e n cia u s in g :

using System;

class A:IDisposable
{
public void Dispose()
{
Console.WriteLine("Llamado a Dispose() de {0}", Nombre);
}

public A(string nombre)


{
Nombre = nombre;
}

string Nombre;
}

class Using
{
public static void Main()
{
A objk = new A("objk");

http://www.programacion.com/tutorial.csharp.17.html (23 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

using (A obj1 = new A("obj1"), obj2 = new A("objy"))


{
Console.WriteLine("Dentro del using");
}
Console.WriteLine("Fuera del using");
}
}

La s a lid a p o r p a n t a lla re s u lt a n t e d e e je cu t a r e s t e e je m p lo s e rá :

Dentro del using


Llamando a Dispose() de objy
Llamando a Dispose() de obj1
Fuera del using

Co m o s e d e d u ce d e lo s m e n s a je s d e s a lid a o b t e n id o s , ju s t o a n t e s d e s a lirs e d e l using s e lla m a a lo s m é t o d o s


Dispose() d e lo s o b je t o s d e cla ra d o s e n la s e cció n <declaraciones> d e d ich a in s t ru cció n y e n e l m is m o
o rd e n e n q u e fu e ro n d e cla ra d o s .

I n s t ru c c ió n fix e d

La in s t ru c c ió n fixed s e u t iliza p a ra fija r o b je t o s e n m e m o ria d e m o d o q u e e l re co le ct o r d e b a s u ra n o p u e d a


m o ve rlo s d u ra n t e la e je cu ció n d e u n cie rt o b lo q u e d e in s t ru ccio n e s .

Es t a in s t ru cció n s ó lo t ie n e s e n t id o d e n t ro d e re g io n e s d e có d ig o in s e g u ro , co n ce p t o q u e s e t ra t a e n e l Te m a 1 8 :
Có d ig o in s e g u ro , p o r lo q u e s e rá a llí e s d o n d e s e e xp liq u e a fo n d o có m o u t iliza rla . Aq u í s ó lo d ire m o s q u e s u
s in t a xis d e u s o e s :

fixed(<tipoPunteros> <declaracionesPunterosAFijar>)
<instrucciones >

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.17.html (24 de 24) [20/10/2002 18:22:38]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 1 7 : At rib u t o s
❍ Co n ce p t o d e a t rib u t o
❍ Ut iliza ció n d e a t rib u t o s
❍ De fin ició n d e n u e vo s a t rib u t o s
❍ Le ct u ra d e a t rib u t o s e n t ie m p o d e e je cu ció n
❍ At rib u t o s d e co m p ila ció n

Te m a 1 7 : At rib u t o s

Co n c e p t o d e a t rib u t o

Un a t rib u t o e s in fo rm a ció n q u e s e p u e d e a ñ a d ir a lo s m e t a d a t o s d e u n m ó d u lo d e có d ig o . Es t a in fo rm a ció n p u e d e


s e r re fe re n t e t a n t o a l p ro p io m ó d u lo o e l e n s a m b la d o a l q u e p e re t e n e zca co m o a lo s t ip o s d e d a t o s e n d e fin id o s e n
é l, s u s m ie m b ro s , lo s p a rá m e t ro s d e s u s m é t o d o s , lo s b lo q u e s set y get d e s u s p ro p ie d a d e s e in d iza d o re s o lo s
b lo q u e s add y remove d e s u s e ve n t o s .

En C# s e in clu ye n n u m e ro s o s m o d ifica d o re s q u e n o s p e rm it e n a s o cia r in fo rm a ció n a lo s m e t a d a t o s d e u n m ó d u lo .


Po r e je m p lo , co n lo s m o d ifica d o re s public, protected, private, internal o protected internal p o d e m o s
a ñ a d ir in fo rm a ció n s o b re la vis ib ilid a d d e lo s t ip o s d e l m ó d u lo y d e s u s m ie m b ro s . Pu e s b ie n , lo s a t rib u t o s p u e d e n
ve rs e co m o u n m e ca n is m o m e d ia n t e e l cu a l e l p ro g ra m a d o r p u e d e cre a r s u s p ro p io s m o d ifica d o re s .

Un e je m p lo d e a t rib u t o p o d ría s e r u n o lla m a d o Ayu d a q u e p u d ie s e p re fija r la s d e fin icio n e s d e m ie m b ro s d e t ip o s e


in d ica s e cu á l e s la URL d o n d e s e p u d ie s e e n co n t ra r in fo rm a ció n d e t a lla d a co n a yu d a s o b re e l s ig n ifica d o d e l
m ie m b ro p re fija d o .

Ut iliz a c ió n d e a t rib u t o s

Pa ra co lo ca r u n a t rib u t o a u n e le m e n t o b a s t a p re fija r la d e fin ició n d e d ich o e le m e n t o co n u n a e s t ru ct u ra d e e s t a


fo rm a :

[<nombreAtributo>(<parámetros>)]

Es t a e s t ru ct u ra h a d e co lo ca rs e in clu s o a n t e s q u e cu a lq u ie r m o d ifica d o r q u e p u d ie s e a co m p a ñ a r la d e fin ició n d e l


e le m e n t o a a t rib u ir.

Lo s p a rá m e t ro s d e u n a a t rib u t o p u e d e n s e r o p cio n a le s , y s i s e u s a s in e s p e cifica r va lo re s p a ra s u s p a rá m e t ro s n o


h a y p o rq u é q u e u s a r p a ré n t e s is va cío s co m o e n la s lla m a d a s a m é t o d o s , s in o q u e b a s t a u s a r e l a t rib u t o in d ica n d o
s ó lo la s in t a xis [<nombreAtributo>]

http://www.programacion.com/tutorial.csharp.18.html (1 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

Lo s p a rá m e t ro s d e u n a t rib u t o p u e d e n s e r d e d o s t ip o s :

● P a rá m e t ro s s in n o m b re : S e u s a n d e fo rm a s im ila r a lo s p a rá m e t ro s d e lo s m é t o d o s , s ó lo q u e
n o p u e d e n co n t a r co n m o d ifica d o re s ref u out.

● P a rá m e t ro s c o n n o m b re : S o n o p cio n a le s y p u e d e n co lo ca rs e e n cu a lq u ie r p o s ició n e n la lis t a


d e <parámetros> d e l a t rib u t o . Lo ú lt im o s e d e b e a q u e a la h o ra d e d a rle s va lo r s e u s a la s in t a xis
<nombreParámetro>=<valor>, p o r lo q u e e l co m p ila d o r n o d e p e n d e rá d e s u p o s ició n a la h o ra d e
d e t e rm in a r a q u é p a rá m e t ro s e le e s t á d a n d o ca d a va lo r.

Pa ra e vit a r co n flict o s e n t re p a rá m e t ro s co n n o m b re y p a rá m e t ro s s in n o m b re , lo s p rim e ro s s ie m p re s e h a n d e


in clu ir d e s p u é s d e lo s s e g u n d o s , n o s ie n d o p o s ib le m e zcla rlo s in d is crim in a d a m e n t e .

S i s e d e s e a n e s p e cifica r va rio s a t rib u t o s p a ra u n m is m o e le m e n t o s e p u e d e n in d ica r t o d o s e llo s e n t re u n o s m is m o s


co rch e t e s s e ra p a d o s p o r co m a s . Es d e cir, d e la fo rm a :

[<atributo1>(<parametros1>), <atributo2>(<parámetros>), ...]

Au n q u e t a m b ié n s e ría p o s ib le e s p e cifica rlo s p o r s e p a ra d o . O s e a , d e e s t a o t ra fo rm a :

[<atributo1>(<parametros1>)] [<atributo2>(parámetros>)] ...

Ha y ca s o s e n lo s q u e p o r la u b ica ció n d e l a t rib u t o n o s e p u e d e d e t e rm in a r d e m a n e ra u n ívo ca a cu á l e le m e n t o s e le


d e s e a a p lica r, ya q u e p o d ría s e r a p lica b le a va rio s . En e s o s ca s o s , p a ra e vit a r a m b ig ü e d a d e s lo q u e s e h a ce e s u s a r
e l a t rib u t o p re fija n d o s u n o m b re d e u n in d ic a d o r d e t ip o d e e le m e n t o , q u e d a n d o a s í la s in t a xis a u s a r:

[<indicadorElemento>:<nombreAtributo> (<parámetros>)]

Au n q u e ca d a im p le m e n t a ció n d e C# p u e d e in clu ir s u s p ro p io s in d ica d o re s d e t ip o d e e le m e n t o , t o d a s e lla s in clu irá n


a l m e n o s lo s s ig u ie n t e s :

● a s s e m b ly : In d ica q u e e l a t rib u t o s e a p lica a l e n s a m b la d o e n q u e s e co m p ile e l có d ig o fu e n t e q u e


lo co n t e n g a . Al d e fin ir a t rib u t o s d e e n s a m b la d o e s o b lig a t o rio in clu ir e s t e in d ica d o r, ya q u e e s t o s
a t rib u t o s s e co lo ca n p re ce d ie n d o cu a lq u ie r d e fin ició n d e cla s e o e s p a cio d e n o m b re s y s i n o s e
in clu ye s e n s e co n fu n d iría co n a t rib u t o s d e t ip o , q u e s e co lo ca n e n e l m is m o s it io .

● m o d u le : In d ica q u e e l a t rib u t o s e a p lica a l m ó d u lo e n q u e s e co m p ile e l có d ig o fu e n t e q u e lo


co n t e n g a . Al ig u a l q u e e l in d ica d o r assembly, h a y q u e in clu irlo s ie m p re p a ra d e fin ir e s t e t ip o d e
a t rib u t o s p o rq u e s i n o s e co n fu n d iría n co n a t rib u t o s d e t ip o , ya q u e t a m b ié n s e h a n d e u b ica r
p re ce d ie n d o la s d e fin icio n e s d e cla s e s y e s p a cio s d e n o m b re s .

● t y p e : In d ica q u e e l a t rib u t o s e a p lica a l t ip o cu ya d e fin ició n p re ce d e . En re a lid a d n o h a ce fa lt a


u t iliza rlo , p u e s e s lo q u e p o r d e fe ct o s e co n s id e ra p a ra t o d o a t rib u t o q u e p re ce d a a u n a d e fin ició n
d e t ip o . S in e m b a rg o , s e h a in clu id o p o r co n s is t e n cia co n e l re s t o d e in d ica d o re s d e t ip o d e
a t rib u t o y p o rq u e p u e d e re s u lt a r co n ve n ie n t e in clu irlo ya q u e e xp licit a rlo fa cilit a la le ct u ra d e l
có d ig o .

● re t u rn : In d ica q u e e l a t rib u t o s e a p lica a u n va lo r d e re t o rn o d e u n m é t o d o , o p e ra d o r, b lo q u e


get, o d e fin ició n d e d e le g a d o . S i n o s e in clu ye s e s e co n s id e ra ría q u e s e a p lica a la d e fin ició n d e l
m é t o d o , o p e ra d o r, b lo q u e get o d e le g a d o , ya q u e e s t o s a t rib u t o s s e co lo ca n a n t e s d e la m is m a
a l ig u a l q u e lo s a t rib u t o s d e va lo re s d e re t o rn o .

● p a ra m : In d ica q u e e l a t rib u t o s e a p lica a u n p a rá m e t ro d e u n m é t o d o . S i n o s e in clu ye s e a l


d e fin ir b lo q u e s set, add o remove s e co n s id e ra ría q u e e l a t rib u t o s e re fie re a lo s b lo q u e s e n s í y
n o a l p a rá m e t ro value e n e llo s im p lícit o .

http://www.programacion.com/tutorial.csharp.18.html (2 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

● m e t h o d : In d ica q u e e l a t rib u t o s e a p lica a l m é t o d o a l q u e p re ce d e . En re a lid a d n o e s n e ce s a rio


u s a rlo p o rq u e , co m o s e d ice e n la e xp lica ció n d e lo s in d ica d o re s param y return, e s lo q u e s e
co n s id e ra p o r d e fe ct o . S in e m b ra g o , y co m o p a s a b a co n type, s e in clu ye p o r co n s is t e n cia y
p o rq u e p u e d e s e r b u e n a id e a in clu irlo p a ra fa cilit a r la le g ib ilid a d d e l có d ig o co n s u e xp licit a ció n .

● e v e n t : In d ica q u e e l a t rib u t o s e a p lica a l e ve n t o a cu ya d e fin ició n p re ce d e . En re a lid a d n o e s


n e ce s a rio in clu irlo p o rq u e e s lo q u e s e co n s id e ra p o r d e fe ct o , p e ro n u e va m e n t e s e h a in clu id o p o r
co n s is t e n cia y p a ra fa cilit a r la le ct u ra d e l có d ig o .

● p ro p e rt y : In d ica q u e e l a t rib u t o s e a p lica a la p ro p ie d a d a cu ya d e fin ició n p re ce d e . És t e t a m b ié n


e s e s u n in d ica d o r in n e ce s a rio e in clu id o t a n s ó lo p o r co n s is t e n cia y p a ra fa cilit a r la le g ib ilid a d d e l
có d ig o .

● fie ld : In d ica q u e e l a t rib u t o s e a p lica a l cu ya d e fin ició n p re ce d e . Co m o o t ro s in d ica d o re s , s ó lo s e


in clu ye p o r co n s is t e n cia y p a ra h a ce r m á s le g ib le e l có d ig o .

D e fin ic ió n d e n u e v o s a t rib u t o s

Es p e c ific a c ió n d e l n o m b re d e l a t rib u t o

S e co n s id e ra q u e u n a t rib u t o e s t o d a a q u e lla cla s e q u e d e rive d e System.Attribute. Po r t a n t o , p a ra d e fin ir u n


n u e vo t ip o d e a t rib u t o h a y q u e cre a r u n a cla s e q u e d e rive d e e lla . Po r co n ve n io , a e s t e t ip o d e cla s e s s u e le d á rs e le s
n o m b re s a ca b a d o s e n Attribute, a u n q u e a la h o ra d e u s a rla s d e s d e C# e s p o s ib le o b via r d ich o s u fijo . Un e je m p lo
d e có m o d e fin ir u n a a t rib u t o lla m a d o Ayu d a e s :

using System;

class AyudaAttribute:Attribute
{}

Y e je m p lo s d e có m o u s a rlo p re fija n d o la d e fin ició n d e cla s e s s o n :

[Ayuda] class A
{}

[AyudaAttribute] class B
{}

Pu e d e d a rs e la circu n s t a n cia d e q u e s e h a ya d e fin id o u n a t rib u t o co n u n cie rt o n o m b re s in s u fijo Attribute y o t ro


q u e s i lo t e n g a . Co m o e s ló g ico , e n e s e ca s o cu a n d o s e u s e e l a t rib u t o s in e s p e cifica r e l s u fijo s e h a rá re fe re n cia a la
ve rs ió n s in s u fijo y cu a n d o s e u s e co n s u fijo s e h a rá re fe re n cia a la ve rs ió n co n s u fijo .

Es p e c ific a c ió n d e l u s o d e u n a t rib u t o

Po r d e fe ct o cu a lq u ie r a t rib u t o q u e s e d e fin a p u e d e p re ce d e r la d e fin ició n d e cu a lq u ie r e le m e n t o d e l le n g u a je . S i s e


d e s e a lim it a r a q u é d e fin icio n e s p u e d e p re ce d e r e s n e ce s a rio p re fija r la cla s e q u e lo d e fin e co n u n a t rib u t o e s p e cia l
lla m a d o System.AttributeUsage. Es t e a t rib u t o co n s t a d e lo s s ig u ie n t e s p a rá m e t ro s co n n o m b re :

● Allo w Mu lt ip le : Po r d e fe ct o ca d a a t rib u t o s ó lo p u e d e a p a re ce r u n a ve z p re fija n d o a ca d a


e le m e n t o . Dá n d o le e l va lo r true a e s t e p a rá m e t ro s e co n s id e ra rá q u e p u e d e a p a re ce r m ú lt ip le s
ve ce s .

● I n h e rit e d : Po r d e fe ct o lo s a t rib u t o s a p lica d o s a u n a cla s e n o s o n h e re d a d o s e n s u s cla s e s h ija s .


Dá n d o le e l va lo r true a e s t e p a rá m e t ro s s e co n s ig u e q u e s í lo s e a n .

Ap a rt e d e e s t o s d o s p a rá m e t ro s , AttributeUsage t a m b ié n p u e d e co n t a r co n u n p a rá m e t ro o p cio n a l s in n o m b re
q u e in d iq u e a q u é t ip o s d e d e fin icio n e s p u e d e p re ce d e r. Po r d e fe ct o s e co n s id e ra q u e u n a t rib u t o p u e d e p re ce d e r a

http://www.programacion.com/tutorial.csharp.18.html (3 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

cu a lq u ie r e le m e n t o , lo q u e e s e q u iva le n t e a d a rle e l va lo r AttributeTargets.All a e s t e p a rá m e t ro . S in


e m b ra g o e s p o s ib le e s p e cifica r o t ra s p o s ib ilid a d e s d á n d o le va lo re s d e la e n u m e ra ció n
System.AttributeTargets, q u e s o n lo s q u e s e re co g e n e n la Ta b la 9 :

Va lo r d e At t rib u t e Ta rg e t s S ig n ific a q u e e l a t rib u t o p u e d e p re c e d e r a . . .


All Cu a lq u ie r d e fin ició n
De fin icio n e s d e e s p a cio d e n o m b re s , co n s id e rá n d o s e q u e e l a t rib u t o s e re fie re a l
As s e m b ly
e n s a m b la d o e n g e n e ra l.
De fin icio n e s d e e s p a cio d e n o m b re s , co n s id e rá n d o s e q u e e l a t rib u t o s e re fie re a l
Mo d u le
m ó d u lo e n s u co n ju n t o .
Cla s s De fin icio n e s d e cla s e s
D e le g a t e De fin icio n e s d e d e le g a d o s
I n t e rfa c e De fin icio n e s d e in t e rfa ce s
S t ru c t De fin icio n e s d e e s t ru ct u ra s
En u m De fin icio n e s d e e n u m e ra cio n e s
Fie ld De fin icio n e s d e ca m p o s
Me t h o d De fin icio n e s d e m é t o d o s
Co n s t ru c t o r De fin icio n e s d e co n s t ru ct o re s
P ro p e rt y De fin icio n e s d e p ro p ie d a d e s o in d iza d o re s
Ev e n t De fin icio n e s d e e ve n t o s
P a ra m e t e r De fin icio n e s d e p a rá m e t ro s d e m é t o d o s
Re t u rn Va lu e De fin icio n e s d e va lo re s d e re t o rn o d e m é t o d o s

Ta b la 9 : Va lo re s d e At t rib u t e Ta rg e t s

Es p o s ib le co m b in a r va rio s d e e s t o s va lo re s m e d ia n t e o p e ra cio n e s ló g ica s "o r" ( ca rá ct e r |) Po r e je m p lo , s i


q u e re m o s d e fin ir e l a t rib u t o Ayuda a n t e rio r d e m o d o q u e s ó lo p u e d a s e r u s a d o p a ra p re fija r d e fin icio n e s d e
e n u m e ra cio n e s o d e cla s e s s e h a ría :

[AttributeUsage(AttributeTargets.Class | AttributeTargetes.Enum)]
class Ayuda:Attribute
{}

Es im p o rt a n t e re s a lt a r q u e AttributeUsage s ó lo p u e d e in clu irs e p re ce d ie n d o d e fin icio n e s d e o t ro s a t rib u t o s ( o


s e a , d e cla s e s d e riva d a s d e System.Attribute)

Es p e c ific a c ió n d e p a rá m e t ro s v á lid o s

S e co n s id e ra q u e lo s p a rá m e t ro s s in n o m b re q u e p u e d e t o m a r u n a t rib u t o s o n a q u e llo s q u e s e e s p e cifiq u e n co m o


p a rá m e t ro s e n e l co n s t ru ct o r d e l t ip o q u e lo d e fin e , y q u e s u s p a rá m e t ro s co n n o m b re s e rá n la s p ro p ie d a d e s y
ca m p o s p ú b lico s , n o e s t á t ico s y d e le ct u ra / e s crit u ra d e fin id o s e n d ich o t ip o .

Un e je m p lo d e có m o d e fin ir e l a t rib u t o Ayu d a a n t e rio r d e m o d o q u e t o m e u n p a rá m e t ro s in n o m b re co n la URL q u e


in d iq u e d ó n d e e n co n t ra r la a yu d a s o b re e l m ie m b ro o cla s e a l q u e p re ce d e y u n p a rá m e t ro co n n o m b re lla m a d o
Au t o r q u e in d iq u e q u ié n e s e l a u t o r d e e s a d o cu m e n t a ció n e s :

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum)]
class Ayuda:Attribute
{
private string autor;
private string url;

public Ayuda(string URL)

http://www.programacion.com/tutorial.csharp.18.html (4 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

{ url=URL; }

public string Autor


{
set {autor = value;}
get {return autor;}
}
}

Eje m p lo s d e u s o s vá lid o s d e e s t e a t rib u t o s o n :

[Ayuda("http://www.josan.com/Clases/A.html")]
class A {}

[Ayuda("http://www.josan.com/Clases/B.html", Autor="José Antonio González Seco")]


class B {}

Lo s t ip o s vá lid o s d e p a rá m e t ro s , t a n t o co n n o m b re co m o s in é l, q u e p u e d e t o m a r u n a t rib u t o s o n : cu a lq u ie r t ip o
b á s ico e xce p t o decimal y lo s t ip o s e n t e ro s s in s ig n o , cu a lq u ie r e n u m e ra ció n p ú b lica , System.Type o t a b la s
u n id im e n s io n a le s d e e le m e n t o s d e cu a lq u ie ra d e lo s a n t e rio re s t ip o s vá lid o s .

Le c t u ra d e a t rib u t o s e n t ie m p o d e e je c u c ió n

Pa ra a cce d e r a lo s m e t a d a t o s d e cu a lq u ie r e n s a m b la d o s e u t iliza n la s cla s e s d e l e s p a cio d e n o m b re s


System.Reflection. Es t e e s p a cio d e n o m b re s e s in m e n s o y e xp lica r có m o u t iliza rlo q u e d a fu e ra d e l a lca n ce d e
e s t e lib ro , a u n q u e d e t o d o s m o d o s a co n t in u a ció n s e d a rá n u n a s id e a s b á s ica s s o b re có m o a cce d e r a t ra vé s d e s u s
t ip o s a lo s a t rib u t o s in clu id o s e n lo s e n s a m b la d o s .

La cla ve p a ra a cce d e r a lo s a t rib u t o s s e e n cu e n t ra e n e l m é t o d o e s t á t ico d e la cla s e System.Attribute lla m a d o


Attribute[] GetCustomAttributes(<x> objetoReflexivo), d o n d e <x> e s e l t ip o d e
System.Reflection q u e re p re s e n t a a lo s e le m e n t o s cu yo s a t rib u t o s s e d e s e a o b t e n e r. Lo s p o s ib le s t ip o s s o n :
Assembly, q u e re p re s e n t a e n s a m b la d o s , Module q u e re p re s e n t a m ó d u lo s , MemberInfo q u e re p re s e n t a m ie m b ro s
( in clu id o s t ip o s , q u e a l fin y a l ca b o s o n m ie m b ro s d e e s p a cio s d e n o m b re s ) , y ParameterInfo q u e re p re s e n t a
p a rá m e t ro s . El p a rá m e t ro s t o m a d o p o r e s t e m é t o d o s e rá e l o b je t o q u e re p re s e n t e a l e le m e n t o e n co n cre t o cu yo s
m e t a d a t o s s e q u ie re n o b t e n e r.

Co m o s e ve , GetCustomAttributes() d e vu e lve u n a t a b la co n lo s a t rib u t o s e n fo rm a d e o b je t o s Attribute,


q u e e s la cla s e b a s e d e t o d o s lo s a t rib u t o s , p o r lo q u e s i a p a rt ir d e e llo s s e d e s e a s e a cce d e r a ca ra ct e rís t ica s
e s p e cífica d e ca d a t ip o d e a t rib u t o h a b ría q u e a p lica r d o wn ca s t in g co m o s e co m e n t ó e n e l Te m a 5 : Cla s e s ( p a ra
a s e g u ra s e d e q u e la s co n ve rs io n e s s e re a lice n co n é xit o re cu é rd e s e q u e s e p u e d e u s a r e l o p e ra d o r is p a ra
d e t e rm in a r cu á l e s e l ve rd a d e ro t ip o d e ca d a a t rib u t o d e e s t a t a b la )

Pa ra o b t e n e r e l o b je t o Assembly q u e re p re s e n t a a l e n s a m b la d o a l q u e p e rt e n e zca e l có d ig o q u e s e e s t é e je cu t a n d o
s e u s a e l m é t o d o Assembly GetExecutingAssembly() d e la cla s e Assembly, q u e s e u s a t a l y co m o s e
m u e s t ra :

Assembly ensamblado = Assembly.GetExecutingAssembly();

Ot ra p o s ib ilid a d s e ría o b t e n e r e s e o b je t o Assembly a p a rt ir d e l n o m b re d e l fich e ro d o n d e s e e n cu e n t re a lm a ce n a d o


e l e n s a m b la d o . Pa ra e llo s e u s a e l m é t o d o Assembly LoadFrom(string rutaEnsamblado) d e la cla s e
Assembly co m o s e m u e s t ra :

Assembly ensamblado = Assembly.LoadFrom("josan.dll");

Un a ve z o b t e n id o e l o b je t o q u e re p re s e n t a a u n e n s a m b la d o p u e d e n o b t e n e rs e lo s o b je t o s Module q u e re p re s e n t a n
a lo s m ó d u lo s q u e lo fo rm a n a t ra vé s d e s u m é t o d o Module[] GetModules().

A p a rt ir d e l o b je t o Module q u e re p re s e n t a a u n m ó d u lo p u e d e o b t e n e rs e lo s o b je t o s Type q u e re p re s e n t a n a s u s

http://www.programacion.com/tutorial.csharp.18.html (5 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

t ip o s a t ra vé s d e s u m é t o d o Type[] GetTypes() Ot ra p o s ib ilid a d s e ría u s a r e l o p e ra d o r typeof ya vis t o p a ra


o b t e n e r e l Type q u e re p re s e n t a a u n t ip o e n co n cre t o s in n e ce s id a d d e cre a r o b je t o s Module o Assembly.

En cu a lq u ie r ca s o , u n a ve z o b t e n id o u n o b je t o Type, a t ra vé s d e s u s m é t o d o s FieldInfo[] GetFields(),


MethodInfo[] GetMethods(), ConstructorInfo[] GetConstructors(), EventInfo[] GetEvents[] y
PropertyInfo[] GetProperties() p u e d e n o b t e n e rs e lo s o b je t o s re fle xivo s q u e re p re s e n t a n , d e m a n e ra
re s p e ct iva , a s u s ca m p o s , m é t o d o s , co n s t ru ct o re s , e ve n t o s y p ro p ie d a d e s o in d iza d o re s . Ta n t o t o d o s e s t o s o b je t o s
co m o lo s o b je t o s Type d e riva n d e MemberInfo, p o r lo q u e p u e d e n s e r p a s a d o s co m o p a rá m e t ro s d e
GetCustomAttributes() p a ra o b t e n e r lo s a t rib u t o s d e lo s e le m e n t o s q u e re p re s e n t a n .

Po r o t ro la d o , a t ra vé s d e lo s o b je t o s MethodInfo y ConstructorInfo, e s p o s ib le o b t e n e r lo s t ip o s re fle xivo s


q u e re p re s e n t a n a lo s p a rá m e t ro s d e m é t o d o s y co n s t ru ct o re s lla m a n d o a s u m é t o d o ParameterInfo[]
GetParameters() Ad e m á s , e n e l ca s o d e lo s o b je t o s MethodInfo t a m b ié n e s p o s ib le o b t e n e r e l o b je t o q u e
re p re s e n t a a l t ip o d e re t o rn o d e l m é t o d o q u e re p re s e n t a n m e d ia n t e s u p ro p ie d a d Type ReturnType .

En lo re fe re n t e a la s p ro p ie d a d e s , e s p o s ib le o b t e n e r lo s o b je t o s MethodInfo q u e re p re s e n t a n a s u s b lo q u e s get y
set a t ra vé s d e lo s m é t o d o s MethodInfo GetSetMethod() y MethodInfo GetSetMethod() d e lo s o b je t o s
PropertyInfo q u e la s re p re s e n t a n . Ad e m á s , p a ra o b t e n e r lo s o b je t o s re fle xivo s q u e re p re s e n t e n a lo s ín d ice s d e
lo s in d iza d o re s t a m b ié n s e d is p o n e d e u n m é t o d o ParamterInfo[] GetIndexParameters()

Y e n cu a n t o a lo s e ve n t o s , lo s o b je t o s EventInfo d is p o n e n d e m é t o d o s MethodInfo GetAddMethod() y


MethodInfo GetRemoveMethod() m e d ia n t e lo s q u e e s p o s ib le o b t e n e r lo s o b je t o s re fle xivo s q u e re p re s e n t a n a
s u s b lo q u e s add y remove.

A co n t in u a ció n s e m u e s t ra u n p ro g ra m a d e e je m p lo q u e lo q u e h a ce e s m o s t ra r p o r p a n t a lla e l n o m b re d e t o d o s lo s
a t rib u t o s q u e e n é l s e h a ya n d e fin id o :

using System.Reflection;
using System;

[assembly: EjemploEnsamblado]
[module: EjemploModulo]
[AttributeUsage(AttributeTargets.Method)]
class EjemploMétodo:Attribute
{}

[AttributeUsage(AttributeTargets.Assembly)]
class EjemploEnsamblado:Attribute
{}

[AttributeUsage(AttributeTargets.Module)]
class EjemploModulo:Attribute
{}

[AttributeUsage(AttributeTargets.Class)]
class EjemploTipo:Attribute
{}

[AttributeUsage(AttributeTargets.Field)]
class EjemploCampo:Attribute
{}

[EjemploTipo]
class A
{
public static void Main()
{
Assembly ensamblado = Assembly.GetExecutingAssembly();

http://www.programacion.com/tutorial.csharp.18.html (6 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

foreach (Attribute atributo in Attribute.GetCustomAttributes(ensamblado))


Console.WriteLine("ENSAMBLADO: {0}",atributo);
foreach (Module modulo in ensamblado.GetModules())
{
foreach(Attribute atributo in Attribute.GetCustomAttributes(modulo))
Console.WriteLine("MODULO: {0}", atributo);
foreach (Type tipo in modulo.GetTypes())
{
foreach(Attribute atributo in Attribute.GetCustomAttributes(tipo))
Console.WriteLine("TIPO: {0}", atributo);

foreach (FieldInfo campo in tipo.GetFields())


muestra("CAMPO", campo);

foreach (MethodInfo metodo in tipo.GetMethods())


muestra("METODO", metodo);

foreach (EventInfo evento in tipo.GetEvents())


muestra("EVENTO", evento);

foreach (PropertyInfo propiedad in tipo.GetProperties())


muestra("PROPIEDAD", propiedad);

foreach (ConstructorInfo constructor in tipo.GetConstructors())


muestra("CONSTRUCTOR",constructor);
}
}

static private void muestra(string nombre, MemberInfo miembro)


{
foreach (Attribute atributo in Attribute.GetCustomAttributes(miembro))
Console.WriteLine("{0}: {1}", nombre, atributo);
}

Lo ú n ico q u e h a ce e l Main() d e e s t e p ro g ra m a e s o b t e n e r e l Assembly q u e re p re s e n t a e l e n s a m b la d o a ct u a l y


m o s t ra r t o d o s s u s a t rib u t o s d e e n s a m b la d o . Lu e g o o b t ie n e t o d o s lo s Modules q u e re p re s e n t a a lo s m ó d u lo s d e
d ich o e n s a m b la d o y m u e s t ra t o d o s lo s a t rib u t o s d e m ó d u lo d e ca d a u n o . Ad e m á s , d e ca d a m ó d u lo s e o b t ie n e n
t o d o s lo s Types q u e re p re s e n t a n a lo s t ip o s e n é l d e fin id o s y s e m u e s t ra n t o d o s s u s a t rib u t o s ; y d e ca d a t ip o s e
o b t ie n e n lo s o b je t o s re fle xivo s q u e re p re s e n t a n a s u s d ife re n t e s t ip o s d e m ie m b ro s y s e m u e s t ra n lo s a t rib u t o s
a t rib u t o s d e ca d a m ie m b ro .

Ap a rt e d e l m é t o d o Main() e n e l e je m p lo s e h a n in clu id o d e fin icio n e s d e n u m e ro s o s a t rib u t o s d e e je m p lo a p lica b le s


a d ife re n t e s t ip o s d e e le m e n t o y s e h a n d is e m in a d o a lo la rg o d e l fu e n t e va rio s u s o s d e e s t o s a t rib u t o s . Po r e llo , la
s a lid a d e l p ro g ra m a e s :

ENSAMBLADO: EjemploEnsamblado
ENSAMBLADO: System.Diagnostics.DebuggableAttribute
MODULO EjemploModulo
TIPO: System.AttributeUsageAttribute
TIPO: System.AttributeUsageAttribute
TIPO: System.AttributeUsageAttribute
TIPO: System.AttributeUsageAttribute
TIPO: System.AttributeUsageAttribute
TIPO: EjemploTipo
METODO: EjemploMétodo

http://www.programacion.com/tutorial.csharp.18.html (7 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

Nó t e s e q u e a p a rt e d e lo s a t rib u t o s u t iliza d o s e n e l có d ig o fu e n t e , la s a lid a d e l p ro g ra m a m u e s t ra q u e e l co m p ila d o r


h a a s o cia d o a n ive l d e e n s a m b la d o u n a t rib u t o e xt ra lla m a d o Debuggable. Es t e a t rib u t o in clu ye in fo rm a ció n s o b re
s i p u e d e n a p lica rs e o p t im iza cio n e s a l co m p ila r JIT e l e n s a m b la d o o s i s e h a d e re a liza r u n a t ra za d e s u e je cu ció n .
S in e m b a rg o , n o co n vie n e fia rs e d e s u im p le m e n t a ció n ya q u e n o e s t á d o cu m e n t a d o p o r Micro s o ft y p u e d e ca m b ia r
e n fu t u ra s ve rs io n e s d e la p la t a fo rm a . NET.

At rib u t o s d e c o m p ila c ió n

Au n q u e la m a yo ría d e lo s a t rib u t o s s o n in t e rp re t a d o s e n t ie m p o d e e je cu ció n p o r e l CLR u o t ra s a p lica cio n e s , h a y


u n a s e rie d e a t rib u t o s q u e t ie n e n u n s ig n ifica d o e s p e cia l e n C# y co n d icio n a n e l p ro ce s o d e co m p ila ció n . Es t o s s o n
lo s q u e s e e xp lica n a co n t in u a ció n .

At rib u t o S y s t e m . At t rib u t e Us a g e

Ya h e m o s vis t o e n e s t e m is m o t e m a q u e s e u t iliza p a ra in d ica r d ó n d e s e p u e d e n co lo ca r lo s n u e vo s a t rib u t o s q u e e l


p ro g ra m a d o r d e fin a , p o r lo q u e n o s e h a rá m á s h in ca p ié e n é l.

At rib u t o S y s t e m . Ob s o le t e

S e p u e d e u s a r p re fija n d o cu a lq u ie r e le m e n t o d e u n fich e ro d e có d ig o fu e n t e p a ra in d ica r q u e e l e le m e n t o p re ce d id o


e s t á o b s o le t o . Pu e d e t o m a r d o s p a rá m e t ro s s in n o m b re :

● Un p rim e r p a rá m e t ro d e t ip o string q u e co n t e n g a u n a ca d e n a co n u n m e n s a je a m o s t ra r cu a n d o
a l co m p ila r s e d e t e ct e q u e s e h a u s a d o e l e le m e n t o o b s o le t o .
● Un s e g u n d o p a rá m e t ro d e t ip o bool q u e in d iq u e s i s e h a d e p ro d u cir u n a vis o o u n e rro r cu a n d o
s e d e t e ct e e l u s o d e l e le m e n t o o b s o le t o . Po r d e fe ct o s e m u e s t ra u n a vis o , p e ro s i s e le d a e l
va lo r true a e s t e p a rá m e t ro s e p ro d u cirá u n e rro r.

El s ig u ie n t e e je m p lo m u e s t ra co m o u s a r e s t e a t rib u t o :

using System;

class Obsoleta
{
[Obsolete("No usar f(), que está obsoleto.", true)]
public static void f()
{}

public static void Main()


{
f();
}
}

Cu a n d o s e co m p ile e s t e p ro g ra m a e l co m p ila d o r p ro d u cirá e l s ig u ie n t e m e n s a je d e e rro r:

obsolete.cs(11,17): error CS0619: 'Obsoleta.f()' is obsolete: no usr f(), que está


obsoleto.

S i s e h u b ie s e u s a d o Obsolete s in s e g u n d o p a rá m e t ro s , e n t o n ce s s e m o s t ra ría e l a vis o :

obsolete.cs(11,17): warning CS0618: 'Obsoleta.f()' is obsolete: no usr f(), que está


obsoleto.

At rib u t o S y s t e m . D ia g n o s t ic s . Co n d it io n a l

Es t e a t rib u t o s ó lo p u e d e p re fija r d e fin icio n e s d e m é t o d o s , y p e rm it e d e fin ir s i la s lla m a d a s a l m é t o d o p re fija d o s e

http://www.programacion.com/tutorial.csharp.18.html (8 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

h a n d e co m p ila r o n o . Pu e d e u s a rs e m ú lt ip le s ve ce s p re fija n d o a u n m is m o m é t o d o y t o m a u n p a rá m e t ro s in
n o m b re d e t ip o string. S ó lo s e co m p ila rá n a q u e lla s lla m a d a s a l m é t o d o t a le s q u e e n e l m o m e n t o d e h a ce rla s e s t é
d e fin id a a lg u n a d ire ct iva d e p re p ro ce s a d o co n e l m is m o n o m b re q u e e l p a rá m e t ro d e a lg u n o d e lo s a t rib u t o s
Conditional q u e p re fije n la d e fin ició n d e e s e m é t o d o .

Co m o s e ve , e s t e a t rib u t o ce s u n a b u e n a fo rm a d e s im p lifica r la e s crit u ra d e có d ig o q u e s e d e b a co m p ila r


co n d icio n a lm e n t e , ya q u e e vit a t e n e r va ria s d ire ct iva s #if q u e e n cie rre n ca d a lla m a d a a l m é t o d o cu ya e je cu ció n s e
d e s e a co n t ro la r. S in e m b a rg o , Conditional n o co n t ro la la co m p ila ció n d e e s e m é t o d o , s in o s ó lo la s lla m a d a s a l
m is m o .

El s ig u ie n t e e je m p lo m u e s t ra có m o u s a r Co n d it io n a l:

using System;
using System.Diagnostics;

class Condicional
{
[Conditional("DEBUG")]
public static void F()
{ Console.WriteLine("Ff()"); }

public static void Main()


{
F();
}
}

S ó lo s i co m p ila m o s e l e s t e có d ig o d e fin ie n d o la co n s t a n t e d e p re p ro ce s a d o DEBUG s e m o s t ra rá p o r p a n t a lla e l


m e n s a je F() En ca s o co n t ra rio , n u n ca s e h a rá la lla m a d a a F()

Ha y q u e p re cis a r q u e e n re a lid a d Conditional n o p u e d e p re ce d e r a cu a lq u ie r d e fin ició n d e m é t o d o , s in o q u e e n


s u co lo ca ció n h a y im p u e s t a s cie rt a s re s t riccio n e s e s p e cia le s :

● El m é t o d o h a d e t e n e r u n t ip o d e re t o rn o void. Es t o s e d e b e a q u e s i t u vie s e o t ro s e p o d ría u s a r


s u va lo r d e re t o rn o co m o o p e ra n d o e n e xp re s io n e s , y cu a n d o n o fu e s e n co m p ila d a s s u s lla m a d a s
e s a s e xp re s io n e s p o d ría n n o t e n e r s e n t id o y p ro d u cir e rro re s d e co m p ila ció n .

● S i s e a p lica a u n m é t o d o virt u a l t o d a s s u s re d e fin icio n e s lo h e re d a n , s ie n d o e rró n e o a p licá rs e lo


e xp lícit a m e n t e a u n a d e e lla s . Es t o d e b e a q u e e n t ie m p o d e co m p ila ció n p u e d e n o s a b e rs e cu á l
e s e l ve rd a d e ro t ip o d e u n o b je t o , y s i u n a s re d e fin icio n e s p u d ie s e n s e r co n d icio n a le s y o t ra s n o ,
n o p o d ría d e t e rm in a rs e a l co m p ila r s i e s co n d icio n a l la ve rs ió n d e l m é t o d o a la q u e e n ca d a ca s o
s e lla m e .

● No p u e d e a t rib u irs e a m é t o d o s d e fin id o s e n in t e rfa ce s n i a im p le m e n t a cio n e s d e m é t o d o s d e


in t e rfa ce s , p u e s s o n t a m b ié n virt u a le s y p o d ría n re im p le m e n t a rs e .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.18.html (9 de 9) [20/10/2002 18:22:51]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 1 8 : Có d ig o in s e g u ro
❍ Co n ce p t o d e có d ig o in s e g u ro
❍ Co m p ila ció n d e có d ig o s in s e g u ro s
❍ Ma rca ció n d e có d ig o s in s e g u ro s
❍ De fin ició n d e p u n t e ro s
❍ Ma n ip u la ció n d e p u n t e ro s
❍ Op e ra d o re s re la cio n a d o s co n có d ig o in s e g u ro
❍ Fija ció n d e va ria b le s a p u n t a d a s

Te m a 1 8 : Có d ig o in s e g u ro

Co n c e p t o d e c ó d ig o in s e g u ro

Có d ig o in s e g u ro e s t o d o a q u é l fra g m e n t o d e có d ig o e n C# d e n t ro d e l cu a l e s p o s ib le h a ce r u s o d e p u n t e ro s .

Un p u n t e ro e n C# e s u n a va ria b le q u e e s ca p a z d e a lm a ce n a r d ire ccio n e s d e m e m o ria . Ge n e ra lm e n t e s u e le u s a rs e


p a ra a lm a ce n a r d ire ccio n e s q u e a lm a ce n e n o b je t o s , p o r lo e n e s o s ca s o s s u s ig n ifica d o e s s im ila r a l d e va ria b le s
n o rm a le s d e t ip o s re fe re n cia . S in e m b a rg o , lo s p u n t e ro s n o cu e n t a n co n m u ch a s d e la s re s t riccio n e s d e é s t a s a la h o ra
d e a cce d e r a l o b je t o . Po r e je m p lo , a l a cce d e rs e a lo s e le m e n t o s d e u n a t a b la m e d ia n t e u n p u n t e ro n o s e p ie rd e t ie m p o
e n co m p ro b a r q u e e l ín d ice e s p e cifica d o s e e n cu e n t re d e n t ro d e lo s lím it e s d e la t a b la , lo q u e p e rm it e q u e e l a cce s o s e
h a g a m á s rá p id a m e n t e .

Ap a rt e d e s u m a yo r e ficie n cia , t a m b ié n h a y cie rt o s ca s o s e n q u e e s n e ce s a rio d is p o n e r d e l có d ig o in s e g u ro , co m o


cu a n d o s e d e s e a h a ce r lla m a d a s a fu n cio n e s e s crit a s e n le n g u a je s n o g e s t io n a d o s cu yo s p a rá m e t ro s t e n g a n q u e s e r
p u n t e ro s .

Es im p o rt a n t e s e ñ a la r q u e lo s p u n t e ro s s o n u n a e xce p ció n e n e l s is t e m a d e t ip o s d e . NET, ya q u e n o d e riva n d e la


cla s e p rim ig e n ia System.Object, p o r lo q u e n o d is p o n d rá n d e lo s m é t o d o s co m u n e s a t o d o s lo s o b je t o s y u n a
va ria b le object n o p o d rá a lm a ce n a rlo s ( t a m p o co e xis t e n p ro ce s o s s im ila re s a l b o xin g y u n b o xin g q u e p e rm it a n
s im u la rlo )

Co m p ila c ió n d e c ó d ig o s in s e g u ro s

El u s o d e p u n t e ro s h a ce e l có d ig o m á s p ro clive a fa llo s e n t a n t o q u e s e s a lt a m u ch a s d e la s m e d id a s in clu id a s e n e l


a cce s o n o rm a l a o b je t o s , p o r lo q u e e s n e ce s a rio in clu ir cie rt a s m e d id a s d e s e g u rid a d q u e e vie n t e la in s t ro d u cció n
a ccid e n t a l d e e s t a in s e g u rid a d

La p rim e ra m e d id a t o m a d a co n s is t e e n q u e e xp lícit a m e n t e h a y q u e in d ica r a l co m p ila d o r q u e d e s e a m o s co m p ila r


có d ig o in s e g u ro . Pa ra e llo , a l co m p ila d o r d e lín e a d e co m a n d o s h e m o s d e p a s a rle la o p ció n /unsafe, co m o s e
m u e s t ra e l e je m p lo :

http://www.programacion.com/tutorial.csharp.19.html (1 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

csc códigoInseguro.cs /unsafe

S i n o s e in d ica la o p ció n u n s a fe , cu a n d o e l co m p ila d o r d e t e ct e a lg ú n fu e n t e co n có d ig o in s e g u ro p ro d u cirá u n m e n s a je


d e e rro r co m o e l s ig u ie n t e :

códigoInseguro(5,23): error CS0277: unsafe code may only appear if compiling with /unsafe

En ca s o d e q u e la co m p ila ció n s e va ya a re a liza r a t ra vé s d e Vis u a l S t u d io . NET, la fo rm a d e in d ica r q u e s e d e s e a


co m p ila r có d ig o in s e g u ro e s a ct iva n d o la ca s illa Vie w - > P ro p e rt y P a g e s - > Co n fig u ra t io n P ro p e rt ie s - > Bu ild - >
Allo w u n s a fe c o d e b lo c k s

Ma rc a c ió n d e c ó d ig o s in s e g u ro s

Ap a rt e d e fo rza rs e a in d ica r e xp lícit a m e n t e q u e s e d e s e a co m p ila r có d ig o in s e g u ro , C# t a m b ié n o b lig a a q u e t o d o u s o


d e có d ig o in s e g u ro q u e s e h a g a e n u n fich e ro fu e n t e t e n g a q u e s e r e xp lícit a m e n t e in d ica d o co m o t a l. A la s zo n a s d e
có d ig o d o n d e s e u s a có d ig o in s e g u ro s e le s d e n o m in a c o n t e x t o s in s e g u ro s , y C# o fre ce va rio s m e ca n is m o s p a ra
m a rca r e s t e t ip o d e co n t e xt o s .

Un a p rim e ra p o s ib ilid a d co n s is t e e n p re ce d e r u n b lo q u e d e in s t ru ccio n e s d e la p a la b ra re s e rva d a unsafe s ig u ie n d o la


s ig u ie n t e s in t a xis :

unsafe <instrucciones>

En e l có d ig o in clu id o e n <instrucciones> p o d rá d e fin irs e va ria b le s d e t ip o s p u n t e ro y p o d rá h a ce rs e u s o d e la s


m is m a s . Po r e je m p lo :

public void f()


{
unsafe
{
int *x;
}
}

Ot ra fo rm a d e d e fin ir co n t e xt o s in s e g u ro s co n s is t e e n a ñ a d ir e l m o d ifica d o r unsafe a la d e fin ició n d e u n m ie m b ro ,


ca s o e n q u e d e n t ro d e s u d e fin ició n s e p o d rá h a ce r u s o d e p u n t e ro s . As í e s p o s ib le d e fin ir ca m p o s d e t ip o p u n t e ro ,
m é t o d o s co n p a rá m e t ro s d e t ip o s p u n t e ro , e t c. El s ig u ie n t e e je m p lo m u e s t ra có m o d e fin ir d o s ca m p o s d e t ip o p u n t e ro .
Nó t e s e s in e m b a rg o q u e n o e s p o s ib le d e fin ir lo s d o s e n u n a m is m a lín e a :

struct PuntoInseguro
{
public unsafe int *X; // No es válido hacer public unsafe int *X, Y;
public unsafe int *Y; // Tampoco lo es hacer public unsafe int *X, *Y;
}

Ob via m e n t e , e n u n m é t o d o q u e in clu ya e l m o d ifica d o r unsafe n o e s n e ce s a rio p re ce d e r co n d ich a p a la b ra s u s b lo q u e s


d e in s t ru ccio n e s in s e g u ro s .

Ha y q u e t e n e r e n cu e n t a q u e e l a ñ a d id o d e m o d ifica d o re s u n s a fe e s co m p le t a m e n t e in o cu o . Es d e cir, n o in flu ye p a ra


n a d a e n có m o s e h a ya d e re d e fin ir y s i u n m é t o d o Main() lo t ie n e s ig u e s ie n d o u n p u n t o d e e n t ra d a vá lid o .

Un a t e rce ra fo rm a co n s is t e e n a ñ a d ir e l m o d ifica d o r unsafe e n e l d e fin ició n d e u n t ip o , ca s o e n q u e t o d a s la s


d e fin icio n e s d e m ie m b ro s d e l m is m o p o d rá n in clu ir có d ig o in s e g u ro s in n e ce s id a d d e a ñ a d ir a ca d a u n a e l m o d ifica d o r
unsafe o p re ce d e r s u s b lo q u e s d e in s t ru ccio n e s in s e g u ra s d e la p a la b ra re s e rva d a unsafe. Po r e je m p lo :

unsafe struct PuntoInseguro


{
public int * X, *Y;

http://www.programacion.com/tutorial.csharp.19.html (2 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

D e fin ic ió n d e p u n t e ro s

Pa ra d e fin ir u n a va ria b le p u n t e ro d e u n d e t e rm in a d o t ip o s e s ig u e u n a s in t a xis p a re cid a a la u s a d a p a ra d e fin ir


va ria b le s n o rm a le s s ó lo q u e a l n o m b re d e l t ip o s e le p o s t p o n e u n s ím b o lo d e a s t e ris co ( *) O s e a , u n p u n t e ro s e d e fin e
a s í:

<tipo> * <nombrePuntero>;

Po r e je m p lo , u n a va ria b le p u n t e ro lla m a d a a q u e p u e d a a lm a ce n a r re fe re n cia s a p o s icio n e s d e m e m o ria d o n d e s e


a lm a ce n e n o b je t o s d e t ip o int s e d e cla ra a s í:

int * a;

En ca s o d e q u e re rs e d e cla ra r u n a t a b la d e p u n t e ro s , e n t o n ce s e l a s t e ris co h a y q u e in clu irlo t ra s e l n o m b re d e l t ip o


p e ro a n t e s d e lo s co rch e t e s . Po r e je m p lo , u n a t a b la d e n o m b re t q u e p u e d a a lm a ce n a r p u n t e ro s a o b je t o s d e t ip o int
s e d e cla ra a s í:

int*[] t;

Ha y u n t ip o e s p e cia l d e p u n t e ro q u e e s ca p a z d e a lm a ce n a r re fe re n cia s a o b je t o s d e cu a lq u ie r t ip o . És t o s p u n t e ro s d e
d e cla ra in d ica n d o void co m o <tipo>. Po r e je m p lo :

void * punteroACualquierCosa;

Ha y q u e t e n e r e n cu e n t a q u e e n re a lid a d lo q u e in d ica e l t ip o q u e s e d é a u n p u n t e ro e s cu á l e s e l t ip o d e o b je t o s q u e
s e h a d e co n s id e ra r q u e s e a lm a ce n a n e n la d ire cció n d e m e m o ria a lm a ce n a d a p o r e l p u n t e ro . S i s e le d a e l va lo r
void lo q u e s e e s t á d icie n d o e s q u e n o s e d e s e a q u e s e co n s id e re q u e e l p u n t e ro a p u n t a a n in g ú n t ip o e s p e cífico d e
o b je t o . Es d e cir, n o s e e s t á d a n d o in fo rm a ció n s o b re e l t ip o a p u n t a d o .

S e p u e d e n d e cla ra r m ú lt ip le s va ria b le s lo ca le s d e t ip o p u n t e ro e n u n a m is m a lín e a . En e s e ca s o e l a s t e ris co s ó lo h a y


q u e in clu irlo a n t e s d e l n o m b re d e la p rim e ra . Po r e je m p lo :

int * a, b; // a y b son de tipo int *


// No sería válido haberlas definido como int *a, *b;

Ha y q u e t e n e r e n cu e n t a q u e e s t a s in t a xis e s p e cia l p a ra d e fin ir e n u n a m is m a d e fin ició n va rio s p u n t e ro s d e u n m is m o


t ip o s ó lo e s vá lid a e n d e fin icio n e s d e va ria b le s lo ca le s . Al d e fin ir ca m p o s n o s irve y h a y q u e d a r p a ra ca d a ca m p o u n a
d e fin ició n in d e p e n d ie n t e .

El re co le ct o r d e b a s u ra n o t ie n e e n cu e n t a lo s d a t o s a lo s q u e s e re fe re n cie co n p u n t e ro s , p u e s h a d e co n o ce r cu á l e s
e l o b je t o a l re fe re n cia d o p o r ca d a va ria b le y u n p u n t e ro e n re a lid a d n o t ie n e p o rq u é a lm a ce n a r re fe re n cia s a o b je t o s
d e n in g ú n t ip o e n co n cre t o . Po r e je m p lo , p u e d e n t e n e rs e p u n t e ro s int * q u e e n re a lid a d a p u n t e n a o b je t o char, o
p u n t e ro s void * q u e n o a lm a ce n e n in fo rm a ció n s o b re e l t ip o d e o b je t o a l q u e d e b e ría co n s id e ra rs e q u e a p u n t a n , o
p u n t e ro s q u e a p u n t e a d ire ccio n e s d o n d e n o h a ya n o b je t o s , e t c.

Co m o e l re co le ct o r d e b a s u ra n o t ra b a ja co n p u n t e ro s , n o e s p o s ib le d e fin ir p u n t e ro s d e t ip o s q u e s e a lm a ce n e n e n
m e m o ria d in á m ica o co n t e n g a n m ie m b ro s q u e s e a lm a ce n e n e n m e m o ria d in á m ica , ya q u e e n t o n ce s p o d ría o cu rrir
q u e u n o b je t o s ó lo re fe re n cia d o a t ra vé s d e p u n t e ro s s e a d e s t ru id o p o r co n s id e a r e l re co le ct o r q u e n a d ie le
re fe re n cia b a . Po r e llo , s ó lo e s vá lid o d e fin ir p u n t e ro s d e t ip o s cu yo s o b je t o s s e p u e d a n a lm a ce n a r co m p le t a m e n t e e n
p ila , p u e s la vid a d e e s t o s o b je t o s n o e s t á co n t ro la d a p o r e l re co le ct o r d e b a s u ra s in o q u e s e d e s t ru ye n cu a n d o s e
a b a n d o n a e l á m b it o d o n d e fu e ro n d e fin id o s .

En co n cre t o , lo s ú n ico s p u n t e ro s vá lid o s s o n a q u e llo s cu yo t ip o s s e a n t ip o s va lo r b á s ico s , e n u m e ra cio n e s o e s t ru ct u ra s


q u e n o co n t e n g a n ca m p o s d e t ip o s re fe re n cia s . Ta m b ié n p u e d e n d e fin irs e p u n t e ro s d e t ip o s p u n t e ro , co m o m u e s t ra
e s t e e je m p lo d e d e cla ra ció n d e u n p u n t e ro a p u n t e ro d e t ip o int lla m a n d o punteroApuntero:

int ** punteroApuntero;

http://www.programacion.com/tutorial.csharp.19.html (3 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

Ob via m e n t e la a n id a ció n p u e d e h a ce rs e a cu a lq u ie r n ive l d e p ro fu n d id a d , p u d ié n d o s e d e fin ir p u n t e ro s a p u n t e ro s a


p u n t e ro s , o p u n t e ro s a p u n t e ro s a p u n t e ro s a p u n t e ro s , e t c.

Ma n ip u la c ió n d e p u n t e ro s

Ob t e n c ió n d e d ire c c ió n d e m e m o ria . Op e ra d o r &

Pa ra a lm a ce n a r u n a re fe re n cia a u n o b je t o e n u n p u n t e ro s e p u e d e a p lica r a l o b je t o e l o p e ra d o r p re fijo &, q u e lo q u e


h a ce e s d e vu e lve r la d ire cció n q u e e n m e m o ria o cu p a e l o b je t o s o b re e l q u e s e a p lica . Un e je m p lo d e s u u s o p a ra
in icia liza r u n p u n t e ro e s :

int x =10;
int * px = &x;

Es t e o p e ra d o r n o e s a p lica b le a e xp re s io n e s co n s t a n t e s , p u e s é s t a s n o s e a lm a ce n a n e n n in g u n a d ire cció n d e m e m o ria


e s p e cífica s in o q u e s e in cru s t a n e n la s in s t ru ccio n e s . Po r e llo , n o e s vá lid o h a ce r d ire ct a m e n t e :

int px = &10; // Error 10 no es una variable con dirección propia

Ta m p o co e s vá lid o a p lica r & a ca m p o s readonly, p u e s s i e s t o s p u d ie s e n s e r a p u n t a d o s p o r p u n t e ro s s e co rre ría e l


rie s g o d e p o d e rlo s m o d ifica r ya q u e a t ra vé s d e u n p u n t e ro s e a cce d e a m e m o ria d ire ct a m e n t e , s in t e n e rs e e n cu e n t a
s i e n la p o s ició n a cce d id a h a y a lg ú n o b je t o , p o r lo q u e m u ch o m e n o s s e co n s id e ra rá s i é s t e e s d e s ó lo le ct u ra .

Lo q u e e s s í vá lid o a lm a ce n a r e n u n p u n t e ro e s la d ire cció n d e m e m o ria a p u n t a d a p o r o t ro p u n t e ro . En e s e ca s o


a m b o s p u n t e ro s a p u n t a ría n a l m is m o o b je t o y la s m o d ifica cio n e s a é s t e re a liza d a s a t ra vé s d e u n p u n t e ro t a m b ié n
a fe ct a ría n a l o b je t o vis t o p o r e l o t ro , d e fo rm a s im ila r a co m o o cu rre co n la s va ria b le s n o rm a le s d e t ip o s re fe re n cia . Es
m á s , lo s o p e ra d o re s re la cio n a le s t íp ico s ( ==, !=, <, > , <= y >=) s e h a n re d e fin id o p a ra q u e cu a n d o s e a p liq u e n e n t re
d o s p u n t e ro s d e cu a le s q u ie ra d o s t ip o s lo q u e s e co m p a re s e a n la s d ire ccio n e s d e m e m o ria q u e e s t o s a lm a ce n a n . Po r
e je m p lo :

int x = 10;
int px = &x;
int px2 = px; // px y px2 apuntan al objeto almacenado en x
Console.WriteLine( px == px2); // Imprime por pantalla True

En re a lid a d la s va ria b le s s o b re la s q u e s e a p liq u e & n o t ie n e n p o rq u é e s t a r in icia liza d a s . Po r e je m p lo , e s vá lid o h a ce r:

private void f()


{
int x;
unsafe
{ int px = &x;}
}

Es t o s e d e b e a q u e u n o d e lo s p rin cip a le s u s o s d e lo s p u n t e ro s e n C# e s p o d e rlo s p a s a r co m o p a rá m e t ro s d e fu n cio n e s


n o g e s t io n a d a s q u e e s p e re n re cib ir p u n t e ro s . Co m o m u ch a s d e e s a s fu n cio n e s h a n s id o p ro g ra m a d a s p a ra in icia liza r
lo s co n t e n id o s d e lo s p u n t e ro s q u e s e le s p a s a n , p a s a rle s p u n t e ro s in icia liza d o s im p lica ría p e rd e r t ie m p o
in n e ce s a ria m e n t e e n in icia liza rlo s .

Ac c e s o a c o n t e n id o d e p u n t e ro . Op e ra d o r *

Un p u n t e ro n o a lm a ce n a d ire ct a m e n t e u n o b je t o s in o q u e s u e le a lm a ce n a r la d ire cció n d e m e m o ria d e u n o b je t o ( o


s e a , a p u n t a a u n o b je t o ) Pa ra o b t e n e r a p a rt ir d e u n p u n t e ro e l o b je t o a l q u e a p u n t a h a y q u e a p lica rle a l m is m o e l
o p e ra d o r p re fijo *, q u e d e vu e lve e l o b je t o a p u n t a d o . Po r e je m p lo , e l s ig u ie n t e có d ig o im p rim e e n p a n t a lla u n 1 0 :

int x = 10;
int * px= &x;
Console.WriteLine(*px);

http://www.programacion.com/tutorial.csharp.19.html (4 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

Es p o s ib le e n u n p u n t e ro a lm a ce n a r null p a ra in d ica r q u e n o a p u n t a a n in g u n a d ire cció n vá lid a . S in e m b a rg o , s i


lu e g o s e in t e n t a a cce d e r a l co n t e n id o d e l m is m o a t ra vé s d e l o p e ra d o r * s e p ro d u cirá g e n e ra lm e n t e u n a e xce p ció n d e
t ip o NullReferenceException ( a u n q u e re a lm e n t e e s t o d e p e n d e d e la im p le m e n t a ció n d e l le n g u a je ) Po r e je m p lo :

int * px = null;
Console.WriteLine(*px); // Produce una NullReferenceException

No t ie n e s e n t id o a p lica r * a u n p u n t e ro d e t ip o void * ya q u e e s t o s p u n t e ro s n o a lm a ce n a n in fo rm a ció n s o b re e l t ip o


d e o b je t o s a lo s q u e a p u n t a n y p o r t a n t o n o e s p o s ib le re cu rp e ra rlo s a t ra vé s d e lo s m is m o s ya q u e n o s e s a b e cu a n t o
e s p a cio e n m e m o ria a p a rt ir d e la d ire cció n a lm a ce n a d a e n e l p u n t e ro o cu p a e l o b je t o a p u n t a d o y, p o r t a n t o , n o s e
s a b e cu a n t a m e m o ria h a y q u e le e r p a ra o b t e n e rlo .

Ac c e s o a m ie m b ro d e c o n t e n id o d e p u n t e ro . Op e ra d o r - >

S i u n p u n t e ro a p u n t a a u n o b je t o e s t ru ct u ra q u e t ie n e u n m é t o d o F() s e ría p o s ib le lla m a rlo a t ra vé s d e l p u n t e ro co n :

(*objeto).F();

S in e m b a rg o , co m o lla m a r a o b je t o s a p u n t a d o s p o r p u n t e ro s e s a lg o b a s t a n t e h a b it u a l, p a ra fa cilit a r la s in t a xis co n la


q u e h a ce r e s t o s e h a in clu id o e n C# e l o p e ra d o r ->, co n e l q u e la in s t ru cció n a n t e rio r s e e s crib iría a s í:

objeto->f();

Es d e cir, d e l m is m o m o d o q u e e l o p e ra d o r . p e rm it e a cce d e r a lo s m ie m b ro s d e u n o b je t o re fe re n cia d o p o r u n a


va ria b le n o rm a l, -> p e rm it e a cce d e r a lo s m ie m b ro s d e u n o b je t o re fe re n cia d o p o r u n p u n t e ro . En g e n e ra l, u n a cce s o
d e la fo rm a O -> M e s e q u iva le n t e a h a ce r (*O).M. Po r t a n t o , a l ig u a l q u e e s in co rre ct o a p lica r * s o b re p u n t e ro s d e
t ip o void *, t a m b ié n lo e s a p lica r ->

Co n v e rs io n e s d e p u n t e ro s

De t o d o lo vis t o h a s t a a h o ra p a re ce q u e n o t ie n e m u ch o s e n t id o e l u s o d e p u n t e ro s d e t ip o void * Pu e s b ie n , u n a
u t ilid a d d e e s t e t ip o d e p u n t e ro s e s q u e p u e d e n u s a rs e co m o a lm a cé n d e p u n t e ro s d e cu a lq u ie r o t ro t ip o q u e lu e g o
p o d rá n s e r re cu p e ra d o s a s u t ip o o rig in a l u s a n d o e l o p e ra d o r d e co n ve rs ió n e xp lícit a . Es d e cir, ig u a l q u e lo s o b je t o s d e
t ip o object p u e d e n a lm a ce n a r im p lícit a m e n t e o b je t o s d e cu a lq u ie r t ip o , lo s p u n t e ro s void * p u e d e n a lm a ce n a r
p u n t e ro s d e cu a lq u ie r t ip o y s o n ú t ile s p a ra la e s crit u ra d e m é t o d o s q u e p u e d a n a ce p t a r p a rá m e t ro s d e cu a lq u ie r t ip o
d e p u n t e ro .

A d ife re n cia d e lo q u e o cu rre e n t re va ria b le s n o rm a le s , la s co n ve rs io n e s e n t re p u n t e ro s s ie m p re s e p e rm it e n , a l


re a liza rla s n u n ca n o s e co m p ru e b a s i s o n vá lid a s . Po r e je m p lo , e l s ig u ie n t e có d ig o e s vá lid o :

char c = 'A';
char* pc = &c;
void* pv = pc;
int* pi = (int*)pv;
int i = *pi; // Almacena en 16 bits del char de pv
// + otros 16 indeterminados
Console.WriteLine(i);
*pi = 123456; // Machaca los 32 bits apuntados por pi

En e s t e có d ig o pi e s u n p u n t e ro a u n o b je t o d e t ip o int ( 3 2 b it s ) , p e ro e n re a lid a d e l o b je t o a l q u e a p u n t a e s d e t ip o
char ( 1 6 b it s ) , q u e e s m á s p e q u e ñ o . El va lo r q u e s e a lm a ce n e e n i e s e n p rin cip io in d e fin id o , p u e s d e p e n d e d e lo q u e
h u b ie s e e n lo s 1 6 b it s e xt ra s re s u lt a n t e s d e t ra t a r pv co m o p u n t e ro a int cu a n d o e n re a lid a d a p u n t a b a a u n char.

De l m is m o m o d o , co n ve rs io n e s e n t re p u n t e ro s p u e d e n t e rm in a r p ro d u cie n d o q u e u n p u n t e ro a p u n t e a u n o b je t o d e
m a yo r t a m a ñ o q u e lo s o b je t o s d e l t ip o d e l p u n t e ro . En e s t o s ca s o s , e l p u n t e ro a p u n t a ría a lo s b it s m e n o s s ig n ifica t ivo s
d e l o b je t o a p u n t a d o .

Ta m b ié n e s p o s ib le re a liza r co n ve rs io n e s e n t re p u n t e ro s y t ip o s b á s ico s e n t e ro s . La co n ve rs ió n d e u n p u n t e ro e n u n
t ip o e n t e ro d e vu e lve la d ire cció n d e m e m o ria a p u n t a d a p o r e l m is m o . Po r e je m p lo , e l s ig u ie n t e có d ig o m u e s t ra p o r

http://www.programacion.com/tutorial.csharp.19.html (5 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

p a n t a lla la d ire cció n d e m e m o ria a p u n t a d a p o r px:

int x = 10;
int *px = &10;
Console.WriteLine((int) px);

Po r s u p a rt e , co n ve rt ir cu a lq u ie r va lo r e n t e ro e n u n p u n t e ro t ie n e e l e fe ct o d e d e vo lve r u n p u n t e ro q u e a p u n t e a la
d ire cció n d e m e m o ria in d ica d a p o r e s e n ú m e ro . Po r e je m p lo , e l s ig u ie n t e có d ig o h a ce q u e px a p u n t e a la d ire cció n
1 0 2 9 y lu e g o im p rim e p o r p a n t a lla la d ire cció n d e m e m o ria a p u n t a d a p o r px ( q u e s e rá 1 0 2 9 ) :

int *px = (int *) 10;


Console.WriteLine((int) px);

Nó t e s e q u e a u n q u e e n u n p rin cip io e s p o s ib le h a ce r q u e u n p u n t e ro a lm a ce n e cu a lq u ie r d ire cció n d e m e m o ria , s i d ich a


d ire cció n n o p e rt e n e ce a l m is m o p ro ce s o q u e e l có d ig o e n q u e s e u s e e l p u n t e ro s e p ro d u cirá u n e rro r a l le e r e l
co n t e n id o d e d ich a d ire cció n . El t ip o d e e rro r h a p ro d u cir n o s e in d ica e n p rin cip io e n la e s p e cifrica ció n d e l le n g u a je ,
p e ro la im p le m e n t a ció n d e Micro s o ft la n za u n a re fe re n cia NullReferenceException. Po r e je m p lo , e l s ig u ie n t e
có d ig o p ro d u ce u n a e xce p ció n d e d ich o t ip o a l e je ct u ra s e :

using System;

class AccesoInválido
{
public unsafe static void Main()
{
int * px = (int *) 100;
Console.Write(*px); // Se lanza NullReferenceException
}
}

Arit m é t ic a d e p u n t e ro s

Lo s p u n t e ro s s e s u e le n u s a r p a ra re co rre r t a b la s d e e le m e n t o s s in n e ce s id a d d e t e n e r q u e co m p ro b a rs e q u e e l ín d ice
a l q u e s e a cce d e e n ca d a m o m e n t o s e e n cu e n t ra d e n t ro d e lo s lím it e s d e la t a b la . Po r e llo , lo s o p e ra d o re s a rit m é t ico s
d e fin id o s p a ra lo s p u n t e ro s e s t á n o rie n t a d o s a fa cilit a r e s t e t ip o d e re co rrid o s .

Ha y q u e t e n e r e n cu e n t a q u e t o d o s lo s o p e ra d o re s a rit m é t ico s a p lica b le s a p u n t e ro s d e p e n d e n d e l t a m a ñ o d e l t ip o d e


d a t o a p u n t a d o , p o r lo q u e n o s o n a p lica b le s a p u n t e ro s void * ya q u e e s t o s n o a lm a ce n a n in fo rm a ció n s o b re d ich o
t ip o . Es o s o p e ra d o re s s o n :

● ++ y --: El o p e ra d o r ++ n o s u m a u n o a la d ire cció n a lm a ce n a d a e n u n p u n t e ro , s in o q u e le s u m a e l


t a m a ñ o d e l t ip o d e d a t o a l q u e a p u n t a . As í, s i e l p u n t e ro a p u n t a b a a u n e le m e n t o d e u n a t a b la
p a s a rá a a p u n t a r a l s ig u ie n t e ( lo s e le m e n t o s d e la s t a b la s s e a lm a ce n a n e n m e m o ria
co n s e cu t iva m e n t e ) De l m is m o m o d o , -- re s t a a la d ire cció n a lm a ce n a d a e n e l p u n t e ro e l t a m a ñ o
d e s u t ip o d e d a t o . Po r e je m p lo , u n a t a b la d e 1 0 0 e le m e n t o s a cu yo p rim e r e le m e n t o in icia lm e n t e
a p u n t a s e pt p o d ría re co rre rs e a s í:

for (int i=0; i<100; i++)


Console.WriteLine("Elemento {0}={1}", i, (*p)++);

El p ro b le m a q u e p u e d e p la n t e a r e n cie rt o s ca s o s e l u s o d e ++ y -- e s q u e h a ce n q u e a l fin a l d e l re co rrid o e l


p u n t e ro d e je d e a p u n t a r a l p rim e r e le m e n t o d e la t a b la . Ello p o d ría s o lu cio n a rs e a lm a ce n a n d o s u d ire cció n e n
o t ro p u n t e ro a n t e s d e in icia r e l re co rrid o y re s t a u rá n d o la a p a rt ir d e é l t ra s fin a liza rlo .

● + y -: Pe rm it e n s o lu cio n a r e l p ro b le m a d e ++ y -- a n t e s co m e n t a d o d e u n a fo rm a m á s có m o d a
b a s a d a e n s u m a r o re s t a r u n cie rt o e n t e ro a lo s p u n t e ro s . + d e vu e lve la d ire cció n re s u lt a n t e d e
s u m a r a la d ire cció n a lm a ce n a d a e n e l p u n t e ro s o b re e l q u e s e a p lica e l t a m a ñ o d e l t ip o d e d ich o
p u n t e ro t a n t a s ve ce s co m o in d iq u e e l e n t e ro s u m a d o . - t ie n e e l m is m o s ig n ifica d o p e ro re s t a n d o
d ich a ca n t id a d e n ve z d e s u m a rla . Po r e je m p lo , u s a n d o + e l b u cle a n t e rio r p o d ría re e s crib ris e a s í:

http://www.programacion.com/tutorial.csharp.19.html (6 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

for (int i=0; i<100; i++)


Console.WriteLine("Elemento {0}={1}", i, *(p+i));

El o p e ra d o r - t a m b ié n p u e d e a p lica rs e e n t re d o s p u n t e ro s d e u n m is m o t ip o , ca s o e n q u e d e vu e lve u n long


q u e in d ica cu á n t o s e le m e n t o s d e l t ip o d e l p u n t e ro p u e d e n a lm a ce n a rs e e n t re la s d ire ccio n e s d e lo s p u n t e ro s
in d ica d o s .

● []: Da d o q u e e s fre cu e n t e u s a r + p a ra a cce d e r a e le m e n t o s d e t a b la s , t a m b ié n s e h a re d e fin id o e l


o p e ra d o r [] p a ra q u e cu a n d o s e a p liq u e a u n a t a b la h a g a lo m is m o y d e vu e lva e l o b je t o co n t e n id o
e n la d ire cció n re s u lt a n t e . O s e a *(p+i) e s e q u iva le n t e a p[i], co n lo q u e e l có d ig o a n t e rio r
e q u iva le a :

for (int i=0; i<100; i++)


Console.WriteLine("Elemento {0}={1}", i, p[i]);

No h a y q u e co n fu n d ir e l a cce s o a lo s e le m e n t o s d e u n a t a b la a p lica n d o [] s o b re u n a va ria b le d e t ip o t a b la


n o rm a l co n e l a cce s o a t ra vé s d e u n p u n t e ro q u e a p u n t e a s u p rim e r e le m e n t o . En e l s e g u n d o ca s o n o s e
co m p ru e b a s i e l ín d ice in d ica d o s e e n cu e n t ra d e n t ro d e l ra n g o d e la t a b la , co n lo q u e e l a cce s o e s m á s rá p id o
p e ro t a m b ié n m á s p ro clive a e rro re s d ifícile s d e d e t e ct a r.

Fin a lm e n t e , re s p e ct o a la a rit m é t ica d e p u n t e ro s , h a y q u e t e n e r e n cu e n t a q u e p o r e ficie n cia , e n la s o p e ra cio n e s co n


p u n t e ro s n u n ca s e co m p ru e b a s i s e p ro d u ce n d e s b o rd a m ie n t o s , y e n ca s o d e p ro d u cirs e s e t ru n ca n lo s re s u lt a d o s s in
a vis a rs e d e e llo m e d ia n t e e xce p cio n e s . Po r e s o h a y q u e t e n e r e s p e cia l cu id a d o a l o p e ra r co n p u n t e ro s n o s e a q u e u n
d e s b o rd a m ie n t o n o d e t e ct a d o ca u s e e rro re s d e ca u s a s d ifícile s d e e n co n t ra r.

Op e ra d o re s re la c io n a d o s c o n c ó d ig o in s e g u ro

Op e ra d o r s iz e o f. Ob t e n c ió n d e t a m a ñ o d e t ip o

El o p e ra d o r u n a rio y p re fijo sizeof d e vu e lve u n o b je t o int co n e l t a m a ñ o e n b yt e s d e l t ip o d e d a t o s o b re e l q u e s e


a p lica . S ó lo p u e d e a p lica rs e e n co n t e xt o s in s e g u ro s y s ó lo a t ip o s d e d a t o s p a ra lo s q u e s e a p o s ib le d e fin ir p u n t e ro s ,
s ie n d o s u s in t a xis d e u s o :

sizeof(<tipo>)

Cu a n d o s e a p lica a t ip o s d e d a t o s b á s ico s s u re s u lt a d o e s s ie m p re co n s t a n t e . Po r e llo , e l co m p ila d o r o p t im iza d ich o s


u s o s d e sizeof s u s t it u yé n d o lo s in t e rn a m e n t e p o r s u va lo r ( in lin in g ) y co n s id e ra n d o q u e e l u s o d e l o p e ra d o r e s u n a
e xp re s ió n co n s t a n t e . Es t a s co n s t a n t e s co rre s p o n d ie n t e s a lo s t ip o s b á s ico s s o n la s in d ica d a s e n la Ta b la 1 0 :

Tip o s Re s u lt a d o
s b yt e , b yt e , b o o l 1
s h o rt , u s h o rt , ch a r 2
in t , u in t , flo a t 4
lo n g , u lo n g , d o u b le 8

Ta b la 1 0 : Re s u lt a d o s d e s ize o f p a ra t ip o s b á s ico s

Pa ra e l re s t o d e t ip o s a lo s q u e s e le s p u e d e a p lica r, sizeof n o t ie n e p o rq u é d e vu e lve r u n re s u lt a d o co n s t a n t e s in o


q u e lo s co m p ila d o re s p u e d e n a lin e a r e n m e m o ria la s e s t ru ct u ra s in clu ye n d o b it s d e re lle n o cu yo n ú m e ro y va lo re s
s e a n e n p rin cip io in d e t e rm in a d o . S in e m b a rg o , e l va lo r d e vu e lt o p o r sizeof s ie m p re d e vo lve rá e l t a m a ñ o e n m e m o ria
e xa ct o d e l t ip o d e d a t o s o b re e l q u e s e a p liq u e , in clu ye n d o b it s d e re lle n o s i lo s t u vie s e .

Nó t e s e q u e e s fá cil im p le m e n t a r lo s o p e ra d o re s d e a rit m é t ica d e p u n t e ro s u s a n d o sizeof. Pa ra e llo , ++ s e d e fin iría


co m o a ñ a d ir a la d ire cció n a lm a ce n a d a e n e l p u n t e ro e l re s u lt a d o d e a p lica r sizeof a s u t ip o d e d a t o , y -- co n s is t iría
e n re s t a rle d ich o va lo r. Po r s u p a rt e , e l o p e ra d o r + u s a d o d e la fo rm a P + N ( P e s u n p u n t e ro d e t ip o T y N u n e n t e ro )
lo q u e d e vu e lve e s e l re s u lt a d o d e a ñ a d ir a l p u n t e ro sizeof(T)*N, y P - N d e vu e lve e l re s u lt a d o d e re s t a rle

http://www.programacion.com/tutorial.csharp.19.html (7 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

sizeof(T)*N. Po r ú lt im o , s i s e u s a - p a ra re s t a r d o s p u n t e ro s P1 y P2 d e t ip o T, e llo e s e q u iva le n t e a ca lcu la r


(((long)P1) - ((long)P2)))/sizeof(T)

Op e ra d o r s t a c k a llo c . Cre a c ió n d e t a b la s e n p ila .

Cu a n d o s e t ra b a ja co n p u n t e ro s p u e d e re s u lt a r in t e re s a n t e re s e rva r u n a zo n a d e m e m o ria e n la p ila d o n d e


p o s t e rio rm e n t e s e p u e d a n ir a lm a ce n a n d o o b je t o s . Pre cis a m e n t e p a ra e s o e s t á e l o p e ra d o r stackalloc, q u e s e u s a
s ig u ié n d o s e la s ig u ie n t e s in t a xis :

stackalloc <tipo>[<número>]

stackalloc re s e rva e n p ila e l e s p a cio n e ce s a rio p a ra a lm a ce n a r co n t ig u a m e n t e e l n ú m e ro d e o b je t o s d e t ip o


<tipo> in d ica d o e n <número> ( re s e rva sizeof(<tipo>)*<número> b yt e s ) y d e vu e lve u n p u n t e ro a la d ire cció n d e
in icio d e e s e e s p a cio . S i n o q u e d a s e m e m o ria lib re s u ficie n t e p a ra re s e rva rlo s e p ro d u ciría u n a e xce p ció n
System.StackOverflowException.

stackalloc s ó lo p u e d e u s a rs e p a ra in icia liza r p u n t e ro s d e cla ra d o s co m o va ria b le s lo ca le s y s ó lo e n e l m o m e n t o d e


s u d e cla ra ció n . . Po r e je m p lo , u n p u n t e ro p t q u e a p u n t a s e a l p rin cip io d e u n a re g ió n co n ca p a cid a d p a ra 1 0 0 o b je t o s d e
t ip o int s e d e cla ra ría co n :

int * pt = stackalloc int[100];

S in e m b a rg o , n o s e ría vá lid o h a ce r:

int * pt;
pt = stackalloc int[100]; // ERROR: Sólo puede usarse stackalloc en declaraciones

Au n q u e p u e d a p a re ce r q u e stackalloc s e u s a co m o s u s t it u t o d e new p a ra cre a r t a b la s e n p ila e n lu g a r d e e n


m e m o ria d in á m ica , n o h a y q u e co n fu n d irs e : stackalloc s ó lo re s e rva u n e s p a cio co n t ig u o e n p ila p a ra o b je t o s d e u n
cie rt o t ip o , p e ro e llo n o s ig n ifica q u e s e cre e u n a t a b la e n p ila . La s t a b la s s o n o b je t o s q u e h e re d a n d e System.Array
y cu e n t a n co n lo s m ie m b ro s h e re d a d o s d e e s t a cla s e y d e object, p e ro re g io n e s d e m e m o ria e n p ila re s e rva d a s p o r
stackalloc n o . Po r e je m p lo , e l s ig u ie n t e có d ig o e s in vá lid o .

int[] tabla;
int * pt = stackalloc int[100];
tabla = *pt; // ERROR: El contenido de pt es un int, no una tabla (int[])
Console.WriteLine(pt->Length); // ERROR: pt no apunta a una tabla

S in e m b a rg o , g ra cia s a q u e co m o ya s e h a co m e n t a d o e n e s t e t e m a e l o p e ra d o r [] e s t á re d e fin id o p a ra t ra b a ja r co n
p u n t e ro s , p o d e m o s u s a rlo p a ra a cce d e r a lo s d ife re n t e s o b je t o s a lm a ce n a d o s e n la s re g io n e s re s e rva d a s co n
stackalloc co m o s i fu e s e n t a b la s . Po r e je m p lo , e s t e có d ig o g u a rd a e n p ila lo s 1 0 0 p rim e ro s e n t e ro s y lu e g o lo s
im p rim e :

class Stackalloc
{
public unsafe static void Main()
{
int * pt = stackalloc int[100];
for (int i=0; i<100; i++)
pt[i] = i;
for(int i=0; i<100; i++)
System.Console.WriteLine(pt[i]);
}
}

Nó t e s e q u e , a d ife re n cia d e lo q u e o cu rriría s i p t fu e s e u n a t a b la , e n lo s a cce s o s co n pt[i] n o s e co m p ru e b a q u e i n o


s u p e re e l n ú m e ro d e o b je t o s p a ra lo s q u e s e h a re s e rva d o m e m o ria . Co m o co n t ra p a rt id a , s e t ie n e e l in co n ve n ie n t e d e
q u e a l n o s e r pt u n a t a b la n o cu e n t a co n lo s m é t o d o s t íp ico s d e é s t a s y n o p u e d e u s a rs e foreach p a ra re co rre rla .

http://www.programacion.com/tutorial.csharp.19.html (8 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

Ot ra ve n t a ja d e la s im u la ció n d e t a b la s co n stackalloc e s q u e s e re s e rva la m e m o ria m u ch o m á s rá p id o q u e e l


t ie m p o q u e s e t a rd a ría e n cre a r u n a t a b la . Es t o s e d e b e a q u e re s e rva r la m e m o ria n e ce s a ria e n p ila t a n s e n cillo co m o
in cre m e n t a r e l p u n t e ro d e p ila e n la ca n t id a d co rre s p o n d ie n t e a l t a m a ñ o a re s e rva r, y n o h a y q u e p e rd e r t ie m p o e n
s o licit a r m e m o ria d in á m ica . Ad e m á s , stackalloc n o p ie rd e t ie m p o e n in icia liza r co n a lg ú n va lo r e l co n t e n id o d e la
m e m o ria , p o r lo q u e la "t a b la " s e cre a a n t e s p e ro a co s t a d e q u e lu e g o s e a m á s in s e g u ro u s a rla ya q u e h a y q u e t e n e r
cu id a d o co n n o le e r t ro zo s d e e lla a n t e s d e a s ig n a rle s va lo re s vá lid o s .

Fija c ió n d e v a ria b le s a p u n t a d a s

Au n q u e u n p u n t e ro s ó lo p u e d e a p u n t a r a d a t o s d e t ip o s q u e p u e d a n a lm a ce n a rs e co m p le t a m e n t e e n p ila ( o s e a , q u e
n o s e a n n i o b je t o s d e t ip o s re fe re n cia n i e s t ru ct u ra s co n m ie m b ro s d e t ip o s re fe re n cia ) , n a d a g a ra n t iza q u e lo s o b je t o s
a p u n t a d o e n ca d a m o m e n t o e s t é n a lm a ce n a d o s e n p ila . Po r e je m p lo , la s va ria b le s e s t á t ica s d e t ip o int o lo s
e le m e n t o s d e u n a t a b la d e t ip o int s e a lm a ce n a n e n m e m o ria d in á m ica a ú n cu a n d o s o n o b je t o s a lo s q u e s e le s
p u e d e a p u n t a r co n p u n t e ro s .

S i u n p u n t e ro a lm a ce n a la d ire cció n d e u n o b je t o a lm a ce n a d o e n m e m o ria d in á m ica y e l re co le ct o r d e b a s u ra ca m b ia


a l o b je t o d e p o s ició n t ra s u n a co m p a ct a ció n d e m e m o ria re s u lt a n t e d e u n a re co le cció n , e l va lo r a lm a ce n a d o e n e l
p u n t e ro d e ja rá d e s e r vá lid o . Pa ra e vit a r q u e e s t o o cu rra s e p u e d e u s a r la in s t ru cció n fixed, cu ya s in t a xis d e u s o e s :

fixed(<tipo> <declaraciones>)
<instrucciones>

El s ig n ifica d o d e e s t a in s t ru cció n e s e l s ig u ie n t e : s e a s e g u ra q u e d u ra n t e la e je cu ció n d e l b lo q u e d e


<instrucciones> in d ica d o e l re co le ct o r d e b a s u ra n u n ca ca m b ie la d ire cció n d e n in g u n o d e lo s o b je t o s a p u n t a d o s
p o r lo s p u n t e ro s d e t ip o <tipo> d e cla ra d o s . Es t a s <declaraciones> s ie m p re h a n d e in clu ir u n a e s p e cifica ció n d e
va lo r in icia l p a ra ca d a p u n t e ro d e cla ra d o , y s i s e d e cla ra n va rio s s e h a n d e s e p a ra r co n co m a s .

Lo s p u n t e ro s d e cla ra d o s e n <declaraciones> s ó lo e xis t irá n d e n t ro d e <instrucciones>, y a l s a lir d e d ich o


b lo q u e s e d e s t ru irá n . Ad e m á s , s i s e le s in d ica co m o va lo r in icia l u n a t a b la o ca d e n a q u e va lg a null s a lt a rá u n a
NullReferenceException. Ta m b ié n h a y q u e s e ñ a la r q u e a u n q u e s ó lo p u e d e n d e cla ra s e p u n t e ro s d e u n m is m o t ip o
e n ca d a fixed, s e p u e d e s im u la r fa cilm e n t e la d e cla ra ció n d e p u n t e ro s d e d is t in t o s t ip o s a n id a n d o va rio s fixed.

Po r o t ro la d o , lo s p u n t e ro s d e cla ra d o s e n <declaraciones> s o n d e s ó lo le ct u ra , ya q u e s i n o p o d ría ca m b iá rs e le s s u


va lo r p o r e l d e u n a d ire cció n d e m e m o ria n o fija d a y co n d u cir e llo a e rro re s d ifícile s d e d e t e ct a r.

Un u s o fre cu e n t e d e fixed co n s is t e e n a p u n t a r a o b je t o s d e t ip o s p a ra lo s q u e s e p u e d a n d e cla ra r p u n t e ro s p e ro q u e


e s t é n a lm a ce n a d o s e n t a b la s , ya q u e e llo n o s e p u e d e h a ce r d ire ct a m e n t e d e b id o a q u e la s t a b la s s e a lm a ce n a n e n
m e m o ria d in á m ica . Po r e je m p lo , co p ia r u s a n d o p u n t e ro s u n a t a b la d e 1 0 0 e le m e n t o s d e t ip o int e n o t ra s e h a ría a s í:

class CopiaInsegura
{
public unsafe static void Main()
{
int[] tOrigen = new int[100];
int[] tDestino = new int[100];
fixed (int * pOrigen=tOrigen, pDestino=tDestino)
{
for (int i=0; i<100; i++)
pOrigen[i] = pDestino[i];
}
}
}

Co m o p u e d e d e d u cirs e d e l e je m p lo , cu a n d o s e in icia liza u n p u n t e ro co n u n a t a b la , la d ire cció n a lm a ce n a d a e n e l


p u n t e ro e n la zo n a <declaraciones> d e l fixed e s la d e l p rim e r e le m e n t o d e la t a b la ( t a m b ié n p o d ría h a b e rs e
h e ch o pOrigen = &tOrigen[0]) , y lu e g o e s p o s ib le u s a r la a rit m é t ica d e p u n t e ro s p a ra a cce d e r a l re s t o d e
e le m e n t o s a p a rt ir d e la d ire cció n d e l p rim e ro ya q u e é s t o s s e a lm a ce n a n co n s e cu t iva m e n t e .

Al ig u a l q u e t a b la s , t a m b ié n p u e d e u s a rs e fixed p a ra re co rre r ca d e n a s . En e s t e ca s o lo q u e h a y q u e h a ce r e s

http://www.programacion.com/tutorial.csharp.19.html (9 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

in icia liza r u n p u n t e ro d e t ip o char * co n la d ire cció n d e l p rim e r ca rá ct e r d e la ca d e n a a la q u e s e d e s e e q u e a p u n t e


t a l y co m o m u e s t ra e s t e e je m p lo e n e l q u e s e ca m b ia e l co n t e n id o d e u n a ca d e n a "Hola" p o r "XXXX":

class CadenaInsegura
{
public unsafe static void Main()
{
string s="Hola";

Console.WriteLine("Cadena inicial: {0}", s);


fixed (char * ps=s)
{
for (int i=0;i<s.Length;i++)
ps[i] = 'A';
}
Console.WriteLine("Cadena final: {0}", s);
}
}

La s a lid a p o r p a n t a lla d e e s t e ú lt im o p ro g ra m a e s :

Hola
AAAA

La ve n t a ja d e m o d ifica r la ca d e n a m e d ia n t e p u n t e ro s e s s in e llo s n o s e ría p o s ib le h a ce rlo ya q u e e l in d iza d o r d e fin id o


p a ra lo s o b je t o s string e s d e s ó lo le ct u ra .

Cu a n d o s e m o d ifiq u e n ca d e n a s m e d ia n t e p u n t e ro s h a y q u e t e n e r e n cu e n t a q u e , a u n q u e p a ra fa cilit a r la co m u n ica ció n


co n có d ig o n o g e s t io n a d o e s crit o e n C o C+ + la s ca d e n a s e n C# t a m b ié n a ca b a n e n e l ca rá ct e r '\0', n o s e
re co m ie n d a co n fia r e n e llo a l re co rre rla s co n p u n t e ro s p o rq u e '\0' t a m b ié n p u e d e u s a rs e co m o ca rá ct e r d e la
ca d e n a . Po r e llo , e s m e jo r h a ce r co m o e n e l e je m p lo y d e t e ct a r s u fin a l a t ra vé s d e s u p ro p ie d a d Le n g t h .

Ha y q u e s e ñ a la r q u e co m o fixe d p ro vo ca q u e n o p u e d a ca m b ia rs e d e d ire cció n a cie rt o s o b je t o s a lm a ce n a d o s e n


m e m o ria d in á m ica , e llo p u e d e p ro d u cir la g e n e ra ció n d e h u e co s e n m e m o ria d in á m ica , lo q u e t ie n e d o s e fe ct o s m u y
n e g a t ivo s :

● El re co le ct o r d e b a s u ra e s t á o p t im iza d o p a ra t ra b a ja r co n m e m o ria co m p a ct a d a , p u e s s i t o d o s lo s
o b je t o s s e a lm a ce n a n co n s e cu t iva m e n t e e n m e m o ria d in á m ica cre a r u n o n u e vo e s t a n s e n cillo
co m o a ñ a d irlo t ra s e l ú lt im o . S in e m b a rg o , fixed ro m p e e s t a co n s e cu t ivid a d y la cre a ció n d e
o b je t o s e n m e m o ria d in á m ica d e n t ro d e e s t e t ip o d e in s t ru ccio n e s e s m á s le n t a p o rq u e h a y q u e
b u s ca r h u e co s lib re s .

● Po r d e fe ct o , a l e lim in a rs e o b je t o s d e m e m o ria d u ra n t e u n a re co le cció n d e b a s u ra s e co m p a ct a la


m e m o ria q u e q u e d a o cu p a d a p a ra q u e t o d o s lo s o b je t o s s e a lm a ce n e n e n m e m o ria d in á m ica . Ha ce r
e s t o d e n t ro d e s e n t e n cia s fixed e s m á s le n t o p o rq u e h a y q u e t e n e r e n cu e n t a s i ca d a o b je t o s e
p u e d e o n o m o ve r.

Po r e s t a s ra zo n e s e s co n ve n ie n t e q u e e l co n t e n id o d e l b lo q u e d e in s t ru ccio n e s d e u n a s e n t e n cia fixed s e a e l m ín im o


p o s ib le , p a ra q u e a s í e l fixed s e e je cu t e lo a n t e s p o s ib le .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.19.html (10 de 10) [20/10/2002 18:23:02]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n C#

En e s t a p á g in a :

● Te m a 1 9 : Do cu m e n t a ció n XML
❍ Co n ce p t o y u t ilid a d d e la d o cu m e n t a ció n XML
❍ In t ro d u cció n a XML
❍ Co m e n t a rio s d e d o cu m e n t a ció n XML
❍ Et iq u e t a s re co m e n d a d a s p a ra d o cu m e n t a ció n XML
❍ Ge n e ra ció n d e d o cu m e n t a ció n XML
❍ Es t ru ct u ra d e la d o cu m e n t a ció n XML
❍ S e p a ra ció n e n t re d o cu m e n t a ció n XML y có d ig o fu e n t e

Te m a 1 9 : D o c u m e n t a c ió n XML

Co n c e p t o y u t ilid a d d e la d o c u m e n t a c ió n XML

La d o cu m e n t a ció n d e lo s t ip o s d e d a t o s cre a d o s s ie m p re h a s id o u n a d e la s t a re a s m á s p e s a d a s y a b u rrid a s a la s q u e


u n p ro g ra m a d o r s e h a t e n id o q u e e n fre n t a r d u ra n t e u n p ro ye ct o , lo q u e h a h e ch o q u e m u ch a s ve ce s s e e s crib a d e
m a n e ra d e s cu id a d a y p o co co n cis a o q u e in clu s o q u e n o s e e s crib a e n a b s o lu t o . S in e m b a rg o , e s crib irla e s u n a t a re a
m u y im p o rt a n t e s o b re t o d o e n u n e n fo q u e d e p ro g ra m a ció n o rie n t a d a a co m p o n e n t e s e n t a n t o q u e lo s co m p o n e n t e s
d e s a rro lla d o s m u ch a s ve ce s va n a re u t iliza d o s p o r o t ro s . E in clu s o p a ra e l p ro p io cre a d o r d e l co m p o n e n t e p u e d e
re s u lt a r d e in e s t im a b le a yu d a s i e n e l fu t u ro t ie n e q u e m o d ifica rlo o u s a rlo y n o re cu e rd a e xá ct a m e n t e có m o lo
im p le m e n t ó .

Pa ra fa cilit a r la p e s a d a t a re a d e e s crib ir la d o cu m e n t a ció n , e l co m p ila d o r d e C# e s ca p a z d e g e n e ra rla


a u t o m á t ica m e n t e a p a rt ir d e lo s co m e n t a rio s q u e e l p ro g a m a d o r e s crib a e n lo s fich e ro s d e có d ig o fu e n t e .

El h e ch o d e q u e la d o cu m e n t a ció n s e g e n e re a p a rt ir d e lo s fu e n t e s p e rm it e e vit a r q u e s e t e n g a q u e t ra b a ja r co n d o s
t ip o s d e d o cu m e n t o s p o r s e p a ra d o ( fu e n t e s y d o cu m e n t a ció n ) q u e d e b a n a ct u a liza rs e s im u lt á n e a m e n t e p a ra e vit a r
in co s is t e n cia s e n t re e llo s d e riva d a s d e q u e e vo lu cio n e n d e m a n e ra s e p a ra d a ya s e a p o r p e re za o p o r e rro r.

El co m p ila d o r g e n e ra la d o cu m e n t a ció n e n XML co n la id e a d e q u e s e a fá cilm e n t e le g ib le p a ra cu a lq u ie r a p lica ció n .


Pa ra fa cilit a r s u le g ib ilid a d a h u m a n o s b a s t a ría a ñ a d e rle u n a h o ja d e e s t ilo XS L o u s a r a lg u n a a p lica ció n e s p e cífica
e n ca rg a d a d e le e rla y m o s t ra rla d e u n a fo rm a m á s có m o d a p a ra h u m a n o s .

Au n q u e e xp lica r XML y XS L q u e d a fu e ra d e l a lca n ce d e l lib ro , e n e s t e t e m a s e re s u m irá n b re ve m e n t e t a n t o XML co m o


la fo rm a d e a p lica r h o ja s XS L a fich e ro s XML.

I n t ro d u c c ió n a XML

An t e s d e co n t in u a r e s n e ce s a rio h a ce r u n a p e q u e ñ a in t ro d u cció n a XML ya q u e q u e e s e l le n g u a je e n q u e s e h a n d e


e s crib ir lo s co m e n t a rio s e s p e cia le s d e d o cu m e n t a ció n . S i ya co n o ce e s t e le n g u a je p u e d e s a lt a rs e e s t e e p íg ra fe .

http://www.programacion.com/tutorial.csharp.20.html (1 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

XML ( Ext e n s ib le Ma rku p La n g u a g e ) e s u n m e t a le n g u a je d e e t iq u e t a s , lo q u e s ig n ifica q u e e s u n le n g u a je q u e s e


u t iliza p a ra d e fin ir le n g u a je s d e e t iq u e t a s . A ca d a le n g u a je cre a d o co n XML s e le d e n o m in a v o c a b u la rio XML, y la
d o cu m e n t a ció n g e n e ra d a p o r e l co m p ila d o r d e C# e s t á e s crit a e n u n vo ca b u la rio d e e s t e t ip o .

Lo s co m e n t a rio s a p a rt ir d e lo s q u e e l co m p ila d o r g e n e ra rá la d o cu m e n t a ció n h a n d e e s crib irs e e n XML, p o r lo q u e


h a n d e re s p e t a r la s s ig u ie n t e s re g la s co m u n e s a t o d o d o cu m e n t o XML b ie n fo rm a d o :

● La in fo rm a ció n h a d e in clu irs e d e n t ro d e e t iq u e t a s , q u e s o n e s t ru ct u ra s d e la fo rm a :

<<etiqueta>> <contenido> </<etiqueta>

En <etiqueta> s e in d ica cu á l e s e l n o m b re d e la e t iq u e t a a u s a r. Po r e je m p lo :

<EtiquetaEjemplo> Esto es una etiqueta de ejemplo </EtiquetaEjemplo>

Co m o <contenido> d e u n a e t iq u e t a p u e d e in clu irs e t a n t o t e xt o p la n o ( e s e l ca s o d e l e je m p lo ) co m o o t ra s


e t iq u e t a s . Lo q u e e s im p o rt a n t e e s q u e t o d a e t iq u e t a cu yo u s o co m ie n ce d e n t ro d e o t ra t a m b ié n h a d e
t e rm in a r d e n t ro d e e lla . O s e a , n o e s vá lid o :

<Etiqueta1> <Etiqueta2> </Etiqueta1></Eetiqueta2>

Pe ro lo q u e s í s e ría vá lid o e s :

<Etiqueta1> <Etiqueta2> </Etiqueta2></Etiqueta1>

Ta m b ié n e s p o s ib le m e zcla r t e xt o y o t ra s e t iq u e t a s e n <contenido>. Po r e je m p lo :

<Etiqueta1> Hola <Etiqueta2> a </Etiqueta2> todos </Etiqueta1>

● XML e s u n le n g u a je s e n s ib le a m a yú s cu la s , p o r lo q u e s i u n a e t iq u e t a s e a b re co n u n a cie rt a
ca p it a liza ció n , a la h o ra d e ce rra rla h a b rá q u e u s a r e xa ct a m e n t e la m is m a .
● Es p o s ib le u s a r la s ig u ie n t e s in t a xis a b re via d a p a ra e s crib ir e t iq u e t a s s in <contenido>:

<<etiqueta>/>

Po r e je m p lo :

<<EtiquetaSinContenidoDeEjemplo>/>

● En re a lid a d e n la <etiqueta> in icia l n o t ie n e p o rq u é in d ica rs e s ó lo u n id e n t ifica d o r q u e s irva d e


n o m b re p a ra la e t iq u e t a u s a d a , s in o q u e t a m b ié n p u e d e n in d ica rs e a t rib u t o s q u e p e rm it a n
co n fig u ra r s u s ig n ifica d o . Es t o s a t rib u t o s s e e s crib e n d e la fo rm a <nombreAtributo> = "<valor>"
y s e p a ra d o s m e d ia n t e e s p a cio s . Po r e je m p lo :

<EtiquetaConAtributo AtributoEjemplo="valor1" >


Etiqueta de ejemplo que incluye un atributo
</EtiquetaConAtributo>

<EtiquetaSinContenidoYConAtributo AtributoEjemplo="valor2" />

● S ó lo p u e d e u t iliza rs e ca ra ct e re s AS CII, y lo s ca ra ct e re s n o AS CII ( a ce n t o s , e ñ e s , . . . ) o ca ra ct e re s


co n a lg ú n s ig n ifica d o e s p e cia l e n XML h a n d e s e r s u s t it u id o s p o r s e cu e n cia s d e e s ca p e d e la fo rm a
&#<códigoUnicode>;. Pa ra lo s ca ra ct e re s m á s h a b it u a le s t a m b ié n s e h a n d e fin id o la s s ig u ie n t e s
s e cu e n cia s d e e s ca p e e s p e cia le s :

Ca rá c t e r S e c u e n c ia d e e s c a p e Un ic o d e S e c u e n c ia d e e s c a p e e s p e c ia l

http://www.programacion.com/tutorial.csharp.20.html (2 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

< &# 6 0 ; &lt ;


> &# 6 2 ; &g t ;
& &# 3 8 ; &a m p ;
' &# 3 9 ; &a p o s ;
" &# 3 4 ; &q u o t ;

Ta b la 1 1 : S e cu e n cia s d e e s p a ce XML d e u s o fre cu e n t e

Co m e n t a rio s d e d o c u m e n t a c ió n XML

S in t a x is g e n e ra l

Lo s co m e n t a rio s d e d o cu m e n t a ció n XML s e e s crib e n co m o co m e n t a rio s n o rm a le s d e u n a lín e a p e ro co n la s


p e cu lia rid a d e s d e q u e s u p rim e r ca rá ct e r h a d e s e r s ie m p re / y d e q u e s u co n t e n id o h a d e e s t a r e s crit o e n XML ya
q u e s e rá in s e rt a d o p o r e l co m p ila d o r e n e l fich e ro XML d e d o cu m e n t a ció n q u e g e n e ra . Po r t a n t o , s o n co m e n t a rio s d e
la fo rm a :

/// <textoXML>

Es t o s co m e n t a rio s h a n p re ce d e r la s d e fin icio n e s d e lo s e le m e n t o s a d o cu m e n t a r. Es t o s e le m e n t o s s ó lo p u e d e n s e r


d e fin icio n e s d e m ie m b ro s , ya s e a n t ip o s d e d a t o s ( q u e s o n m ie m b ro s d e e s p a cio s d e n o m b re s ) o m ie m b ro s d e t ip o s
d a t o s , y h a n d e co lo ca rs e in clu s o in clu s o a n t e s q u e s u s a t rib u t o s .

En <textoXML> e l p ro g ra m a d o r p u e d e in clu ir cu a le s q u ie ra e t iq u e t a s co n e l s ig n ifica d o , co n t e n id o y a t rib u t o s q u e


co n s id e re o p o rt u n o s , ya q u e e n p rin cip io e l co m p ila d o r n o la s p ro ce s a s in o q u e la s in clu ye t a l cu a l e n la
d o cu m e n t a ció n q u e g e n e ra d e já n d o e n m a n o s d e la s h e rra m ie n t a s e n ca rg a d a s d e p ro ce s a r d ich a d o cu m e n t a ció n la
d e t e rm in a ció n d e s i s e h a n u s a d o co rre ct a m e n t e .

S in e m b a rg o , e l co m p ila d o r co m p ru e b a q u e lo s co m e n t a rio s d e d o cu m e n t a ció n s e co lo q u e n d o n d e d e b e ría n y q u e


co n t e g a n XML b ie n fo rm a d o . S i n o fu e s e a s í g e n e ra ría u n m e n s a je d e a vis o y e n la d o cu m e n t a ció n g e n e ra d a lo s
s u s t it u iría p o r u n co m e n t a rio XML q u e e xp lica s e e l t ip o d e e rro r co m e t id o .

El a t rib u t o c re f

Au n q u e e n p rin cip io lo s a t rib u t o s d e la s e t iq u e t a s n o t ie n e n n in g ú n s ig n ifica d o p re d e t e rm in a d o p a ra e l co m p ila d o r,


h a y u n a e xce p ció n : e l a t rib u t o cref s ie m p re va a t e n e r u n s ig n ifica d o co n cre t o co n s is t e n t e e n fo rza rlo a co m p ro b a r
cu a n d o va ya a g e n e ra r la d o cu m e n t a ció n s i e xis t e e l e le m e n t o cu yo n o m b re in d iq u e y, s i n o e s a s í, h a ce rle p ro d u cir
u n m e n s a je d e a vis o ( s u n o m b re vie n e d e "ch e ck re fe re n ce ")

Lo s e le m e n t o s e s p e cifica d o s e n cref s u e le n in d ica rs e m e d ia n t e ca lifica ció n co m p le t a , y p u e d e n s e r t a n t o n o m b re s


d e m ie m b ro s co m o d e e s p a cio s d e n o m b re s . En e l Te m a 6 : Es p a cio s d e No m b re s ya s e e xp licó co m o in d ica r a s í
n o m b re s d e t ip o s y d e e s p a cio s d e n o m b re s , m ie n t ra s q u e p a ra in d ica r e l d e m ie m b ro s d e t ip o s b a s t a e s crib ir e l
n o m b re co m p le t o d e l t ip o d o n d e e s t é n d e fin id o s s e g u id o d e u n p u n t o t ra s e l cu a l, d e p e n d ie n d o d e l t ip o d e m ie m b ro
d e l q u e s e t ra t e , s e e s crib iría :

● S i e s u n c a m p o , p ro p ie d a d , e v e n t o o t ip o in t e rn o , s u n o m b re .
● S i e s u n m é t o d o , s u n o m b re s e g u id o d e lo s n o m b re s co m p le t o s d e lo s t ip o s d e s u s p a rá m e t ro s
s e p a ra d o s m e d ia n t e co m a s y e n t re p a ré n t e s is . Es t o s n o m b re s d e t ip o s d e p a rá m e t ro s lle va n u n
ca rá ct e r @ co n ca t e n d o a l fin a l e n lo s p a rá m e t ro s ref u out, u n ca rá ct e r * a l fin a l e n lo s q u e s e a n
d e t ip o s p u n t e ro s , u n s ím b o lo [] p o r ca d a n ive l d e a n id a ció n a l fin a l d e lo s q u e s e a n t a b la s
u n id im e n s io n a le s , y u n a e s t ru ct u ra d e la fo rm a [0:,0:] a l fin a l d e lo s q u e s e a n t a b la s
b id im e n s io n a le s ( p a ra t a b la s d e m á s d im e n s io n e s s im p le m e n t e s e iría n a ñ a d ie n d o lo s b lo q u e s ,0:
a p ro p ia d o s ) .
● S i e s u n in d iz a d o r, e l id e n t ifica d o r Item s e g u id o d e la lis t a d e t ip o s d e s u s ín d ice s co m o s i d e lo s
p a rá m e t ro s d e u n m é t o d o s e t ra t a s e
● S i e s u n c o n s t ru c t o r d e o b je t o , e l id e n t ifica d o r #ctor s e g u id o d e la lis t a d e t ip o s d e s u s
p a rá m e t ro s co m o s i d e u n m é t o d o n o rm a l s e t ra t a s e . S i e l co n s t ru ct o r fu e s e d e t ip o s e n t o n ce s e l

http://www.programacion.com/tutorial.csharp.20.html (3 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

id e n t ifica d o r u s a d o s e ría #cctor


● S i e s u n d e s t ru c t o r, e l id e n t ifica d o r Finalize.
● S i e s u n o p e ra d o r, e l id e n t ifica d o r q u e re p re s e n t e a e s e o p e ra d o r s e g u d io d e la lis t a d e lo s t ip o s
d e s u s o p e ra n d o s co m o s i fu e s e n lo s p a rá m e t ro s d e u n m é t o d o n o rm a l. En la Ta b la 1 2 s e
re s u m e n lo s id e n t ifica d o r q u e s e d a n a ca d a o p e ra d o r:

Op e ra d o r I d e n t ific a d o r
+ o p _ Ad d it io n
- o p _ S u b s t ra c t io n
* o p _ Mu lt ip ly
/ o p _ D iv is io n
% o p _ Mo d u lu s
< o p _ Le s s Th a n
> o p _ Gre a t e rTh a n
>= o p _ Gre a t e rTh a n OrEq u a l
<= o p _ Lo w e rTh a n OrEq u a l
== o p _ Eq u a lit y
!= o p _ I n e q u a lit y
! o p _ Lo g ic a lN o t

Op e ra d o r I d e n t ific a d o r
& o p _ Bit w is e An d
| o p _ Bit w is e Or
^ o p _ Ex c lu s iv e Or
~ o p _ On e s Co m p le m e n t
<< o p _ Le ft S h ift
>> o p _ Rig h t S h ift
t ru e o p _ Tru e
fa ls e o p _ Fa ls e
++ o p _ I n c re m e n t
-- o p _ D e c re m e n t
Co n ve rs ió n e xp lícit a Op _ Ex p lic t
Co n ve rs ió n im p lícit a Op _ I m p lic it

Ta b la 1 2 : No m b re s d a d o s a o p e ra d o re s e n d o cu m e n t a ció n XML

En e l ca s o d e lo s o p e ra d o re s d e co n ve rs ió n , t ra s la lis t a d e p a rá m e t ro s s e in clu ye a d icio n a lm e n t e u n ca rá ct e r ~


s e g u id o d e l t ip o d e re t o rn o d e l o p e ra d o r.

Pa ra q u e s e e n t ie n d a m e jo r la fo rm a e n q u e s e h a n d e d a r va lo re s a cref, a co n t in u a ció n s e m u e s t ra u n fra g m e n t o


d e có d ig o d e e je m p lo e n e l q u e ju n t o a ca d a d e fin ició n s e h a e s crit o u n co m e n t a rio co n e l va lo r q u e h a b ría q u e d a rle
a cref p a ra re fe re n cia rla :

// cref="Espacio"
namespace Espacio
{
// cref="Espacio.Clase"
class Clase
{
// cref="Espacio.Clase.Campo"
int Campo;

http://www.programacion.com/tutorial.csharp.20.html (4 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

// cref="Espacio.Clase.Propiedad"
int Propiedad
{ set {} }

// cref="Espacio.Clase.EstructuraInterna"
struct EstructuraInterna
{}

// cref="Espacio.Clase.DelegadoInterno"
public delegate int DelegadoInterno(string s, float f);

// cref ="Espacio.Clase.Evento"
public event DelegadoInterno Evento;

// cref="Espacio.Clase.Metodo(System.Int32, System.Int32@,
// System.Int32*, System.Int32@,
// System.Int32[][], System.Int32[0:, 0:, 0:])"
int Metodo(int a, out int b, int * c, ref d, int[][] e, int[,,] f)
{return 1;}

// cref="Espacio.Clase.Item(System.String)"
int this[string s]
{ set {} }

// cref="Espacio.Clase.#ctor"
Clase(int a)
{}

// cref="Espacio.Clase.#cctor"
static Clase(int a)
{}

// cref="Espacio.Clase.Finalize"
~X()
{}

// cref="Espacio.Clase.op_Addition(Espacio.Clase, Espacio.Clase)"
public static int operator +(Clase operando1, Clase operando2)
{ return 1; }

// cref="Espacio.Clase.op_Explicit (Espacio.Clase)~System.Int32"
public static explicit operator int(Clase fuente)
{ return 1; }
}
}

En re a lid a d n o e s s ie m p re n e ce s a rio u s a r ca lifica ció n co m p le t a e n e l va lo r d e cref. S i s e re fe re n cia a u n t ip o d e s d e


la m is m a d e fin ició n d e e s p a cio d e n o m b re s d e s d e d o n d e s e le d e fin ió o q u e im p o rt a s u e s p a cio d e n o m b re s , n o e s
n e ce s a rio in clu ir d ich o e s p a cio e n la re fe re n cia ; y s i s e re fe re n cia a u n m ie m b ro d e s d e e l e l m is m o t ip o d o n d e s e
d e fin ió , n o e s n e ce s a rio in clu ir n i e l n o m b re d e l t ip o n i e l d e s u e s p a cio d e n o m b re s .

Et iq u e t a s re c o m e n d a d a s p a ra d o c u m e n t a c ió n XML

Au n q u e e l p ro g ra m a d o r p u e d e u t iliza r la s e t iq u e t a s e s t im e o p o rt u n a s e n s u s co m e n t a rio s d e d o cu m e n t a ció n y d a rle s


e l s ig n ifica d o q u e q u ie ra , Micro s o ft re co m ie n d a u s a r u n ju e g o d e e t iq u e t a s co n cre t o co n s ig n ifica d o s co n cre t o s p a ra
e s crib ir cie rt o s t ip o s d e in fo rm a ció n co m ú n . Co n e llo s e o b t e n d ría u n co n ju n t o b á s ico d e e t iq u e t a s q u e cu a lq u ie r
h e rra m ie n t a q u e t ra b a je co n d o cu m e n t a ció n XML p u e d a e s t a r p re p a ra d a p a ra p ro ce s a r ( co m o ve re m o s m á s a d e la n t e ,
e l p ro p io Vis u a l S t u d io . NET d a cie rt o s u s o s e s p e cífico s a la in fo rm a ció n a s í d o cu m e n t a d a )

En lo s s ig u ie n t e s e p íg ra fe s s e e xp lica n e s t a s e t iq u e t a s re co m e n d a d a s a g ru p á n d o la s s e g ú n s u u t ilid a d . To d a s s o n
o p cio n a le s , y n o in clu irla s s ó lo t ie n e e l e fe ct o d e q u e n o e n la d o cu m e n t a ció n re s u lt a n t e n o s e g e n e ra ría n la s

http://www.programacion.com/tutorial.csharp.20.html (5 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

s e ccio n e s co rre s p o n d ie n t e s a e lla s .

Et iq u e t a s d e u s o g e n é ric o

Ha y u n a s e rie d e e t iq u e t a s p re d e fin id a s q u e p u e d e n co lo ca rs e , e n cu a lq u ie r o rd e n , p re ce d ie n d o la s d e fin icio n e s d e


m ie m b ro s e n lo s fich e ro s fu e n t e . Es t a s e t iq u e t a s , ju n t o a l s ig n ifica d o re co m e n d a d o p a ra s u co n t e n id o , s o n la s
e xp lica d a s a co n t in u a ció n :

● < s u m m a ry > : S u co n t e n id o s e u t iliza p a ra in d ica r u n re s u m e n s o b re e l s ig n ifica d o d e l e le m e n t o a l


q u e p re ce d e . Ca d a ve z q u e e n VS . NET s e u s e e l o p e ra d o r . p a ra a cce d e r a a lg ú n m ie m b ro d e u n
o b je t o o t ip o s e u s a rá e s t a in fo rm a ció n p a ra m o s t ra r s o b re la p a n t a lla d e l e d it o r d e t e xt o u n
re s u m e n a ce rca d e s u u t ilid a d .
● < re m a rk s > : S u co n t e n id o in d ica u n a e xp lica ció n d e t a lla d a s o b re e l e le m e n t o a l q u e p re ce d e . S e
re co m ie n d a u s a r <remarks> p a ra d a r u n a e xp lica ció n d e t a lla d a d e lo s t ip o s d e d a t o s y <summary>
p a ra d a r u n a re s u m id a d e ca d a u n o d e s u s m ie m b ro s .
● < e x a m p le > : S u co n t e n id o e s u n e je m p lo s o b re có m o u s a r e l e le m e n t o a l q u e p re ce d e .
● < s e e a ls o > : S e u s a p a ra in d ica r u n e le m e n t o cu ya d o cu m e n t a ció n g u a rd a a lg u n a re la ció n co n la
d e l e le m e n t o a l q u e p re ce d e . No t ie n e co n t e n id o y e l n o m b re d e l e le m e n t o a l q u e s e re m it e s e
in d icá e n s u a t rib u t o cref, p o r lo q u e e l co m p ila d o r co m p ro b a rá s i e xis t e . Pa ra in d ica r m ú lt ip le s
d o cu m e n t a cio n e s re la t iva s a u n cie rt o e le m e n t o b a s t a u s a r u n a e t iq u e t a <seealso> p o r ca d a u n a .
● < p e rm is s io n > : S e u t iliza p a ra in d ica r q u é p e rm is o n e ce s it a u n e le m e n t o p a ra p o d e r fu n cio n a r.
En s u co n t e n id o s e in d ica u n a d e s crip ció n d e l m is m o , y s u a t rib u t o cref s u e le u s a rs e p a ra in d ica r
e l t ip o q u e re p re s e n t a a e s e p e rm is o Po r e je m p lo :

/// <permission cref="System.Security.Permissions.FileIOPermission">


/// Necesita permiso de lectura/escritura en el directorio C:\Datos
/// </permission>

Co m o co n <seealso>, s i u n m ie m b ro h a d e d is p o n e r va rio s t ip o s d e p e rm is o s p u e d e d o cu m e n t a rs e s u
d e fin ició n co n t a n t a s e t iq u e t a s <permission> co m o s e a n e ce s a rio .

Et iq u e t a s re la t iv a s a m é t o d o s

Ad e m á s d e la s e t iq u e t a s u s o g e n e ra l ya vis t a s , e n la s d e fin icio n e s d e m é t o d o s s e p u e d e n u s a r la s s ig u ie n t e s


e t iq u e t a s re co m e n d a d a s a d icio n a le s p a ra d e s crib ir s u s p a rá m e t ro s y va lo r d e re t o rn o :

● < p a ra m > : Pe rm it e d o cu m e n t a r e l s ig n ifica d o d e u n p a rá m e t ro d e u n m é t o d o . En s u p ro p ie d a d


name s e in d ica e l n o m b re d e l p a rá m e t ro a d o cu m e n t a r y e n s u co n t e n id o s e d e s crib e s u u t ilid a d .
Po r e je m p lo :

/// <summary> Método que muestra un texto por pantalla </summary>


/// <param name="texto"> Texto a mostrar </param>

bool MuestraTexto(string texto)

Al g e n e ra rs e la d o cu m e n t a ció n s e co m p ru e b a s i e l m é t o d o d o cu m e n t a d o d is p o n e d e a lg ú n p a rá m e t ro co n e l
n o m b re in d ica d o e n name y, co m o o cu rre co n cref, s i n o fu e s e a s í s e g e n e ra ría u n m e n s a je d e a vis o
in fo rm a n d o d e e llo .

● < p a ra m re f> : S e u s a p a ra re fe re n cia r a p a rá m e t ro s d e m é t o d o s . No t ie n e co n t e n id o y e l n o m b re


d e l p a rá m e t ro re fe re n cia d o s e in d ica e n s u a t rib u t o n a m e . Po r e je m p lo :

/// <summary>
/// Método que muestra por pantalla un texto con un determinado color
/// </summary>
/// <param name="texto"> Texto a mostrar </param>
/// <param name="color">
/// Color con el que mostrar el <paramref name="texto"/> indicado

http://www.programacion.com/tutorial.csharp.20.html (6 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

/// </param>

bool MuestraTexto(string texto, Color color)

Nu e va m e n t e , a l g e n e ra rs e la d o cu m e n t a ció n s e co m p ro b a rá s i re a lm e n t e e l p a rá m e t ro re fe re n cia d o e xis t e e n


la d e fin ició n d e l m é t o d o d o cu m e n t a d o y s i n o e s a s í s e g e n e rá u n m e n s a je d e a vis o in fo rm a n d o d e e llo .

● < re t u rn s > : Pe rm it e d o cu m e n t a r e l s ig n ifica d o d e l va lo r d e re t o rn o d e u n m é t o d o , in d ica n d o


co m o co n t e n id o s u yo u n a d e s crip ció n s o b re e l m is m o . Po r e je m p lo :

/// <summary>
/// Método que muestra por pantalla un texto con un determinado color
/// </summary>
/// <param name="texto"> Texto a mostrar </param>
/// <param name="color">
/// Color con el que mostrar el <paramref name="texto"/> indicado
/// </param>
/// <returns> Indica si el método se ha ejecutado con éxito o no </summary>

bool MuestraTexto(string texto, Color color)

Et iq u e t a s re la t iv a s a p ro p ie d a d e s

El u s o m á s h a b it u a l d e u n a p ro p ie d a d co n s is t e e n co n t ro la r la fo rm a e n q u e s e a cce d e a u n ca m p o p riva d o , p o r lo
q u e e s t a s e co m p o rt a co m o s i a lm a ce n a s e u n va lo r. Me d ia n t e e l co n t e n id o d e la e t iq u e t a <value> e s p o s ib le
d e s crib ir e l s ig n ifica d o d e e s e va lo r:

private int edad;


/// <summary>
/// Almacena la edad de una persona. Si se le asigna una edad menor
/// que 0 la sustituye por 0.
/// </summary>
/// <value> Edad de la persona representada </value>
public int Edad
{
set { edad = (value<0)? 0:value }
get { return edad; }
}

Et iq u e t a s re la t iv a s a e x c e p c io n e s

Pa ra d o cu m e n t a r e l s ig n ifica d o d e u n t ip o d e fin d o co m o e xce p ció n p u e d e in clu irs e u n re s u m e n s o b re e l m is m o co m o


co n t e n id o d e u n a e t iq u e t a d e d o cu m e n t a ció n < e x c e p t io n > q u e p re ce d a a s u d e fin ició n . El a t rib u t o cref d e é s t a
s u e le u s a rs e p a ra in d ica r la cla s e d e la q u e d e riva la e xce p ció n d e fin id a . Po r e je m p lo :

/// <exception cref="System.Exception">


/// Excepción de ejemplo creada por Josan
/// </exception>

class JosanExcepción: Exception


{}

Et iq u e t a s re la t iv a s a fo rm a t o

Pa ra m e jo ra r la fo rm a d e e xp re s a r e l co n t e n id o d e la s e t iq u e t a s d e d o cu m e n t a ció n q u e s e u t ilice n e s p o s ib le in clu ir


e n e lla s la s s ig u ie n t e s e t iq u e t a s d e fo rm a t o :

● < s e e > : S e u t iliza p a ra in d ica r h ip e rvín cu lo s a o t ro s e le m e n t o s d e la d o cu m e n t a ció n g e n e ra d a . Es

http://www.programacion.com/tutorial.csharp.20.html (7 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

u n a e t iq u e t a s in co n t e n id o e n la q u e e l d e s t in o d e l e n la ce e s la d o cu m e n t a ció n d e l m ie m b ro cu yo
n o m b re co m p le t o s e in d ica e n s u a t rib u t o cref. Es e n o m b re e s t a m b ié n e l t e xt o q u e la s h o ja s d e
e s t ilo s u e ln m o s t ra r p a ra re p re s e n t a r p o r p a n t a lla e l e n la ce , p o r lo q u e lo s u s o s d e e s t a e t iq u e t a
s u e le n s e r d e la fo rm a :

/// <summary>
/// Muestra por la salida estándar el mensaje ¡Hola!.
/// Si no sabe como se escribe en pantalla puede consultar la
/// documentación del método
/// <see cref="System.Console.WriteLine"/>.
/// </summary>
public static void Saluda()
{
Console.WriteLine("¡Hola!");
}

Nó t e s e q u e la d ife re n cia d e <see> y <seealso> e s q u e la p rim e ra s e u s a p a ra in d ica r e n la ce s e n m e d io d e


t e xt o s m ie n t ra s q u e la o t ra s e u s a p a ra in d ica r e n la ce s q u e s e d e s e e n in clu ir e n u n a s e cció n a p a rt e t ip o "Vé a s e
t a m b ié n ".

● <code> y <c>: Am b a s e t iq u e t a s s e u s a n p a ra d e lim it a r t e xt o s h a n d e s e r co n s id e ra rs e fra g m e n t o s


d e có d ig o fu e n t e . La d ife re n cia e n t re e lla s e s q u e <code> s e re co m ie n d a u s a r p a ra fra g m e n t o s
m u lt ilín e a y <c> p a ra lo s d e u n a ú n ica lín e a ; y q u e la s h o ja s d e e s t ilo m o s t ra rá n e l co n t e n id o d e
la s e t iq u e t a s <code> re s p e t a n d o s u e s p a cia d o y e l d e la s e t iq u e t a s <c> s in re s p e t a rlo y t ra n t a n d o
cu a lq u ie r a p a rició n co n s e cu t iva d e va rio s ca ra ct e re s d e e s p a cia d o co m o s i fu e s e n u n ú n ico e s p a cio
e n b la n co .

En g e n e ra l, <code> s u e le u s a rs e d e n t ro d e e t iq u e t a s <example> p a ra m o s t ra r fra g m e n t o s d e có d ig o s d e


e je m p lo , m ie n t ra s q u e <c> s u e le u s a rs e p a ra h a ce r re fe re n cia a e le m e n t o s p u n t a le s d e lo s có d ig o s fu e n t e . Po r
e je m p lo :

/// <example>
/// Este ejemplo muestra cómo llamar al método
/// <c>Cumple()</c> de esta clase:
/// <code>
/// Persona p = new Persona(...);
/// p.Cumple();
/// </code>
/// </example>

● < p a ra > : S e u s a p a ra d e lim it a r p á rra fo s d e n t ro d e l t e xt o co n t e n id o e n o t ra s e t iq u e t a s ,


co n s id e rá n d o s e q u e e l co n t e n id o d e ca d a e t iq u e t a <para> fo rm a p a rt e d e u n p á rra fo d is t in t o .
Ge n e ra lm e n t e s e u s a d e n t ro d e e t iq u e t a s <remarks>, ya q u e s o n la s q u e s u e le n n e ce s it a r p á rra fo s
a l t e n e r u n co n t e n id o m á s la rg o . Po r e je m p lo :

/// <remarks>
/// <para>
/// Primer párrafo de la descripción del miembro...
/// </para>
/// <para>
/// Segundo párrafo de la descripción del miembro...
/// </para>
/// </remarks>

● < lis t > : S e u t iliza p a ra in clu ir lis t a s y t a b la s co m o co n t e n id o d e o t ra s e t iq u e t a s . To d o u s o d e e s t a


e t iq u e t a d e b e ría in clu ir u n a t rib u t o type q u e in d iq u e e l t ip o d e e s t ru ct u ra s e d e s e a d e fin ir s e g ú n
t o m e u n o d e lo s s ig u ie n t e s va lo re s :
❍ b u lle t : In d ica q u e s e t ra t a d e u n a lis t a n o n u m e ra d a

http://www.programacion.com/tutorial.csharp.20.html (8 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

❍ n u m b e r: In d ica q u e s e t ra t a d e u n a lis t a n u m e ra d a
❍ t a b le : In d ica q u e s e t ra t a d e u n a t a b la

El co n t e n id o d e <list> d e p e n d e rá d e l t ip o d e e s t ru ct u ra re p re s e n t a d o e n ca d a ca s o :

❍ S i s e t ra t a d e u n a lis t a n o rm a l - ya s e a n u m e ra d a o n o n u m e ra d a - s u co n t e n id o s e rá u n a
e t iq u e t a <item> p o r ca d a e le m e n t o d e la lis t a , y ca d a e t iq u e t a d e e s t e t ip o co n t e n d rá u n a
e t iq u e t a <description> co n e l t e xt o co rre s p o n d ie n t e a e s e e le m e n t o . Po r e je m p lo :

/// <list type="bullet">


/// <item>
/// <description>
/// Elemento 1
/// </description>
/// </item>
/// <item>
/// <description>
/// Elemento 2
/// </description>
/// </item>
/// </list>

❍ S i t ra t a s e d e u n a t a b la , s u co n t e n id o s e ría s im ila r a l d e la s lis t a s n o rm a le s s ó lo q u e p o r ca d a


fila s e in clu iría u n a e t iq u e t a <item> y d e n t ro d e é s t a s e in cliría u n a e t iq u e t a <description>
p o r ca d a co lu m n a d e e s a fila .

Ad e m á s , o p cio n a lm e n t e s e p o d ría in clu ir u n a e t iq u e t a <listheader> a n t e s d e la s e t iq u e t a s <item>


d o n d e s e in d ica ría cu á l h a d e s e r e l t e xt o d e la ca b e ce ra d e la t a b la . Es t a e t iq u e t a s e u s a ig u a l q u e la s
e t iq u e t a s <item>: in clu irá u n a e t iq u e t a <description> p o r ca d a co lu m n a .

❍ Po r ú lt im o , s i fu e s e u n a lis t a d e d e fin icio n e s ca d a <item> co n t e n d ría u n a p rim e ra e t iq u e t a


<term> co n e l n o m b re d e l e le m e n t o a d e fin ir y o t ra s e g u n d a e t iq u e t a <description> co n s u
d e fin ició n . Op cio n a lm e n t e t a m b ié n p o d ria in clu irs e u n a e t iq u e t a <listheader> co n la
ca b e ce ra d e la lis t a . Po r e je m p lo :

/// <list type="bullet">


/// <item>
/// <term>
/// Término 1
/// </term>
/// <description>
/// Descripción de término 1
/// </description>
/// </item>
/// <item>
/// <term>
/// Término 2
/// </term>
/// <description>
/// Descripción de término 2
/// </description>
/// </item>
/// </list>

Ge n e ra c ió n d e d o c u m e n t a c ió n XML

Ge n e ra c ió n a t ra v é s d e l c o m p ila d o r e n lín e a d e c o m a n d o s

http://www.programacion.com/tutorial.csharp.20.html (9 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

Us a n d o e l co m p ila d o r e n lín e a d e co m a n d o s p u e d e g e n e ra rs e d o cu m e n t a ció n s o b re lo s t ip o s d e fin id o s e n lo s fu e n t e s


a co m p ila r u s a n d o la o p ció n d e co m p ila ció n /doc:<fichero>. Po r e je m p lo , p a ra co m p ila r u n fich e ro d e có d ig o
fu e n t e Persona.cs y g e n e ra r s u d o cu m e n t a ció n e n Persona.xml, h a b ría q u e lla m a r a l co m p ila d o r co n :

csc persona.cs /doc:persona.xml

S i s e a b re co n In t e rn e t Exp lo re r e l fich e ro XML a s í g e n e ra d o s e ve rá u n co n ju n t o d e e t iq u e t a s q u e re co g e n t o d a la


in fo rm a ció n u b ica d a e n lo s co m e n t a rio s d e d o cu m e n t a ció n d e lo s fu e n t e s co m p ila d o s . Au n q u e p a ra u n a p e rs o n a
p u e d a re s u lt a r d ifícil le e r e s t a in fo rm a ció n , p a ra u n a a p lica ció n h a ce rlo e s m u y s e n cillo a t ra vé s d e u n a n a liza d o r
XML. S i s e d e s e q u e t a m b ié n s e a le g ib le p a ra h u m a n o s b a s t a a b rirlo co n cu a lq u ie r e d it o r d e t e xt o s y a ñ a d irle u n a
p rim e ra lín e a d e la fo rm a :

<?xml:stylesheet href="<ficheroXSL>" type="text/xsl"?>

Co n e s t a lín e a s e in d ica q u e s e d e s e a u t iliza r e l fich e ro in d ica d o e n <ficheroXSL> co m o h o ja d e e s t ilo XS L co n la


q u e co n ve rt ir la d o cu m e n t a ció n XML a a lg ú n le n g u a je m á s fá cilm e n t e le g ib le p o r h u m a n o s ( g e n e ra lm e n t e , HTML) .
Po r e je m p lo , s i doc.xsl e s e l n o m b re d e d ich o fich e ro XS L, b a s t a ría e s crib ir:

<?xml:stylesheet href="doc.xsl" type="text/xsl"?>

Pa ra h a ce rs e u n a id e a d e la s d ife re n cia s e xis t e n t e s e n t re a b rir co n In t e rn e t Exp lo re r u n fich e ro d e d o cu m e n t a ció n s in


h o ja XS L a s o cia d a y a b rir e s e m is m o fich e ro p e ro a s o ciá n d o le u n a h o ja XS L, p u e d e o b s e rva r la s s ig u ie n t e s
ilu s t ra cio n e s :

http://www.programacion.com/tutorial.csharp.20.html (10 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

No s e p re o cu p e s i n o s a b e e s crib ir h o ja s d e e s t ilo , p u e s co m o s e e xp lica e n e l s ig u ie n t e e p íg ra fe , Vis u a l S t u d io . NET


in clu ye u n a h e rra m ie n t a q u e p u e d e g e n e ra r d ire ct a m e n t e la d o cu m e n t a ció n e n u n HTML fá cilm e n t e le g ib le p a ra
hum a nos.

Ge n e ra c ió n a t ra v é s d e Vis u a l S t u d io . N ET

S i p re fie re u s a r Vis u a l S t u d io . NET, e n t o n ce s p a ra la g e n e ra ció n d e la d o cu m e n t a ció n b a s t a s e ñ a la r e l p ro ye ct o a


d o cu m e n t a r e n e l S o lu t io n Ex p lo re r y e s crib ir e l n o m b re d e l fich e ro XML a g e n e ra r e n e l cu a d ro d e t e xt o Vie w - >
P ro p e rt y P a g e s - > Co n fig u ra t io n P ro p e rt ie s - > Bu ild - > XML D o c u m e n t a t io n File

Cu a n d o s e co m p ile e l p ro ye ct o , la d o cu m e n t a ció n XML s o b re e l m is m o s e g u a rd a rá e n e l fich e ro in d ica d o e n e l cu a d ro


d e t e xt o a n t e rio r. Es t e fich e ro s e a lm a ce n a rá d e n t ro d e la s u b ca rp e t a Bin d e l d ire ct o rio d e l p ro ye ct o , y s i s e d e s e a
p o d e r vis u a liza rla d e s d e e l S o lu t io n Ex p lo re r h a y q u e a ct iva r e n é s t e e l b o t ó n S h o w All File s .

En p rin cip io , p a ra co n s e g u ir vis u a liza r e s t a d o cu m e n t a ció n e n u n fo rm a t o m á s le g ib le p a ra h u m a n o s p o d ría


a s o ciá rs e le u n a h o ja XS L co m o s e e xp licó p a ra e l ca s o d e l co m p ila d o r e n lín e a d e co m a n d o s . S in e m b a rg o , Vis u a l
S t u d io . NET p ro p o rcio n a u n a fo rm a m á s s e n cilla d e h a ce rlo a t ra vé s d e la h e rra m ie n t a u b ica d a e n To o ls - > Bu ild
Co m m e n t s W e b P a g e s Es t a u t ilid a d a p a rt ir d e la in fo rm a ció n in clu id a e n la s e t iq u e t a s re co m e n d a d a s d e lo s
co m e n t a rio s d e l fu e n t e g e n e ra p á g in a s HTML q u e m u e s t ra n la d o cu m e n t a ció n d e l p ro ye ct o d e u n a fo rm a vis t o s a e
in t u it iva ( ve r I lu s t ra c ió n )

http://www.programacion.com/tutorial.csharp.20.html (11 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

Es t ru c t u ra d e la d o c u m e n t a c ió n XML

Ah o ra q u e ya s a b e m o s có m o e s crib ir co m e n t a rio s d e d o cu m e n t a ció n y g e n e ra r a p a rt ir d e e llo s u n fich e ro XML co n la


d o cu m e n t a ció n d e lo s t ip o s d e d a t o s d e u n fich e ro , s ó lo q u e d a e s t u d ia r cu á l e s co n cre t a m e n t e la e s t ru ct u ra d e d ich o
fich e ro g e n e ra d o ya q u e e n t e n d e rla e s fu n d a m e n t a l p a ra la e s crit u ra d e a p lica cio n e s e n ca rg a d a s d e p ro ce s a rlo .

En p rin cip io , s i co m p ila m o s co m o m ó d u lo u n fu e n t e s in co m e n t a rio s d e d o cu m e n t a ció n p e ro s o licit a n d o la g e n e ra ció n


d e d o cu m e n t a ció n , s e o b t e n d rá e l s ig u ie n t e fich e ro XML:

<?xml version="1.0"?>
<doc>
<members>
</members>
</doc>

Co m o s e ve , la p rim e ra lín e a d e l fich e ro e s la ca b e ce ra t íp ica d e t o d o fich e ro XML e n la q u e s e in d ica cu á l e s la


ve rs ió n d e l le n g u a je q u e u t iliza . Tra s e lla s e co lo ca u n a e t iq u e t a <doc> q u e co n t e n d rá t o d a la d o cu m e n t a ció n
g e n e ra d a , y lo s co m e n t a rio s d e d o cu m e n t a ció n d e lo s m ie m b ro s d e l fu e n t e co m p ila d o s e iría n in clu ye n d o d e n t ro d e la
e t iq u e t a <members> q u e co n t ie n e ( e n e s t e ca s o d ich a e t iq u e t a e s t á va cía ya q u e e l fu e n t e co m p ila d o ca re cía d e
co m e n t a rio s d e d o cu m e n t a ció n )

S i h u b ié s e m o s co m p ila d o e l fu e n t e co m o lib re ría o co m o e je cu t a b le s e h a b ría g e n e ra d o u n e n s a m b la d o , y a la


e s t ru ct u ra a n t e rio r s e le a ñ a d iría u n a e t iq u e t a a d icio n a l d e n t ro d e <doc> co n in fo rm a ció n s o b re e l m is m o , q u e d a n d o :

<?xml version="1.0"?>
<doc>
<assembly>
<name>Persona</name>
</assembly>
<members>
</members>
</doc>

Co m o s e ve , d e n t ro d e la e t iq u e t a <assembly> co n t e n id a e n <doc> s e in d ica n la s ca ra ct e rís t ica s d e l e n s a m b la d o


g e n e ra d o . En co n cre t o , s u n o m b re s e in d ica e n la e t iq u e t a <name> q u e co n t ie n e ( s e s u p o n e q u e e l e n s a m b la d o s e
co m p iló co n e l n o m b re Persona)

http://www.programacion.com/tutorial.csharp.20.html (12 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

S i a h o ra le a ñ a d im o s co m e n t a rio s d e d o cu m e n t a ció n ve re m o s q u e e l co n t e n id o d e e s t o s s e in s e rt a d e n t ro d e la
e t iq u e t a <members>, e n u n a e t iq u e t a <member> e s p e cífica p a ra ca d a m ie m b ro co n co m e n t a rio s d e d o cu m e n t a ció n .
Po r e je m p lo , d a d o e l fu e n t e :

/// <summary>
/// Clase de ejemplo de cómo escribir documentacion XML
/// </summary>
class A
{
/// <summary>
/// Método principal de ejemplo perteneciente a clase <see cref="A"/>
/// </summary>
/// <remarks>
/// No hace nada
/// </remarks>
static void Main()
{}
}

La d o cu m e n t a ció n XML q u e g e n e ra ra co m p ila rlo co n la o p ció n /doc e s :

<?xml version="1.0"?>
<doc>
<assembly>
<name>A</name>
</assembly>
<members>
<member name="T:A">
<summary>
Clase de ejemplo de cómo escribir documentacion XML
</summary>
</member>
<member name="M:A.Main">
<summary>
Método principal de ejemplo perteneciente a clase <see cref="T:A"/>
</summary>
<remarks>
No hace nada
</remarks>
</member>
</members>
</doc>

Co m o p u e d e ve rs e , d e n t ro d e la e t iq u e t a <members> n o s e s ig u e n in g u n a e s t ru ct u ra je rá rq u ica a la h o ra d e d e s crib ir


lo s e le m e n t o s d e l fu e n t e , s in o q u e t o d o s s e d e s crib e n a l m is m o n ive l y d e la m is m a fo rm a : s e in clu ye u n a e t iq u e t a
<member> p o r ca d a m ie m b ro d o cu m e n t a d o e n cu yo a t rib u t o name s e in d ica s u n o m b re y e n cu yo co n t e n id o s e
in s e rt a e l t e xt o d e s u s co m e n t a rio s d e d o cu m e n t a ció n .

Nó t e s e q u e a ca d a e le m e n t o s e le d a e n e l a t rib u t o name d e s u e t iq u e t a <member> co rre s p o n d ie n t e u n id e n t ifica d o r


q u e lo d is t in g u e u n ívo ca m e n t e d e l re s t o d e m ie m b ro s d o cu m e n t a d o s y q u e s ig u e la s ig u ie n t e s in t a xis :

<indicadorElemento>:<nombreCompletamenteCalificado>

El <indicadorElemento> e s s im p le m e n t e u n ca rá ct e r q u e in d ica q u é t ip o d e e le m e n t o s e d o cu m e n t a d e n t ro d e la
e t iq u e t a <member>. Pu e d e t o m a r e s t o s va lo re s :

I n d ic a d o r d e t ip o d e e le m e n t o Tip o d e e le m e n t o in d ic a d o
T Tip o d e d a t o

http://www.programacion.com/tutorial.csharp.20.html (13 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

F Ca m p o
P Pro p ie d a d o in d iza d o r
M Mé t o d o ( in clu id o s o p e ra d o re s y co n t ru ct o re s )
E Eve n t o

Ta b la 1 3 : In d ica d o re s d e t ip o s d e e le m e n t o s e n d o cu m e n t a cio n e s XML

Co m o s e ve e n e l e je m p lo , e n la d o cu m e n t a ció n g e n e ra d a s e u s a t a m b ié n la s in t a xis d e lo s va lo re s d e l a t rib u t o n a m e


d e la s e t iq u e t a s <member> p a ra re p re s e n t a r la s re fe re n cia s m e d ia n t e a t rib u t o s cref. Ad e m á s , cu a n d o d ich a s in t a xis
s e u s a p a ra e xp re s a r va lo re s d e cref p u e d e n u s a rs e d o s t ip o s d e in d ica d o re s m á s :

In d ica d o r d e t ip o d e e le m e n t o Tip o d e e le m e n t o in d ic a d o
N Es p a cio d e n o m b re s
! Nin g u n o . S e g e n e ra cu a n d o e l m ie m b ro in d ica d o e n cref n o e xis t e .

Ta b la 1 4 : In d ica d o re s d e t ip o s d e e le m e n t o s p a ra a t rib u t o s cre f

La id e a q u e h a y d e t rá s d e u s a r la s in t a xis vis t a p a ra re p re s e n t a r e le m e n t o s d e l fu e n t e e s p ro p o rcin a r u n m e ca n is m o


s e n cillo m e d ia n t e e l q u e la s h e rra m ie n t a s e n ca rg a d a s d e p ro ce s a r la s d o cu m e n t a cio n e s XML p u e d a n d e t e rm in a r
cu á le s s o n lo s m ie m b ro s d o cu m e n t a d o s o re fe re n cia d o s y a cce d e r, co n a yu d a d e lo s t ip o s d e System.Reflection,
a s u s m e t a d a t o s a s o cia d o s .

S e p a ra c ió n e n t re d o c u m e n t a c ió n XML y c ó d ig o fu e n t e

A ve ce s p u e d e q u e in t e re s a r in cru s t a r t o d a la d o cu m e n t a ció n e n e l m is m o fich e ro q u e e l có d ig o fu e n t e , p o r e je m p lo


s i s e d e s e a re u s a rla e n m ú lt ip le s fu e n t e s o s i e s m u y vo lu m in o s a e in clu irla e n e l fu e n t e d ificu lt a ría s u le g ib ilid a d .
Pa ra e s t o s ca s o s s e d a la p o s ib lid a d d e d e ja r la d o cu m e n t a ció n e n u n fich e ro XML a p a rt e y re fe re n cia rla e n e l có d ig o
fu e n t e a t ra vé s d e la e t iq u e t a d e d o cu m e n t a ció n <include>, q u e s u u s a a s í:

<include file="<nombreFichero>" path="<rutaDocumentación>"/>

Cu a n d o e l co m p ila d o r e n cu e n t re e s t a e t iq u e t a a l g e n e ra r la d o cu m e n t a ció n lo q u e h a rá s e rá t ra t a rla co m o s i fu e s e la


e t iq u e t a d e l fich e ro < n o m b re Fich e ro > in d ica d a p o r la e xp re s ió n XP a t h <rutaDocumentación> Po r e je m p lo , s i s e
t ie n e e l có d ig o :

/// <include file="otro.xml" path="Miembros/Miembro[@nombre="A"]/*"/>


class A
{}

En e s t e u s o d e <include> s e e s t á in d ica n d o q u e s e h a d e in s e rt a r t o d o e l co n t e n id o d e la e t iq u e t a <Miembro>


co n t e n id a e n <Miembros> cu yo a t rib u t o nombre va lg a A. Lu e g o , s i e l co n t e n id o d e l fich e ro otro.xml e s d e la
fo rm a :

<Miembros>
...
<Miembro name="A">
<remarks>
Ejemplo de inclusión de documentación XML externa
</remarks>
<example>
Para crear un objeto de esta clase usar:
<code>
A obj = new A();
</code>
</example>
</Miembro>

http://www.programacion.com/tutorial.csharp.20.html (14 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

...
</Miembros>

En t o n ce s , e l co m p ila d o r g e n e ra rá d o cu m e n t a ció n co m o s i e l fu e n t e co n t u vie s e : :

/// <remarks>
/// Ejemplo de inclusión de documentación XML externa
/// </remarks>
/// <example>
/// Para crear un objeto de esta clase usar:
/// <code>
/// A obj = new A();
/// </code>
/// </example>
class A
{}

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.20.html (15 de 15) [20/10/2002 18:23:18]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e Nuestras zonas

p ro g ra m a c ió n
C#

En e s t a p á g in a :

● Te m a 2 0 : El co m p ila d o r d e C# d e Micro s o ft
❍ In t ro d u cció n
❍ S in t a xis g e n e ra l d e u s o d e l co m p ila d o r
❍ Op cio n e s d e co m p ila ció n
❍ Acce s o a l co m p ila d o r d e s d e Vis u a l S t u d io . NET

Te m a 2 0 : El c o m p ila d o r d e C# d e Mic ro s o ft

I n t ro d u c c ió n

A lo la rg o d e lo s t e m a s a n t e rio re s s e h a n e xp lica n d o m u ch o s a s p e ct o s s o b re có m o u s a r e l co m p ila d o r d e C#


d e Micro s o ft in clu id o e n e l . NET Fra m e wo rk S DK. S in e m b a rg o , u n a ve z d e s crit o e l le n g u a je p o r co m p le t o e s
e l m o m e n t o a d e cu a d o p a ra e xp lica r p o rm e n o riza d a m e n t e có m o u t iliza rlo y q u é o p cio n e s d e co m p ila ció n
a d m it e , p u e s m u ch a s d e e lla s s e b a s a n e n co n ce p t o s re la cio n a d o s co n ca ra ct e rís t ica s d e l le n g u a je .

Po r o t ro la d o , la s d ife re n t e s e xp lica cio n e s d a d a s s o b re é l s e h a n id o d e s p e rd ig a n d o a lo la rg o d e m u ch o s d e


lo s t e m a s p re vio s , p o r lo q u e e s t a m b ié n co n vie n e a g ru p a rla s t o d a s e n u n m is m o s it io d e m o d o q u e s e a m á s
fá cil lo ca liza rla s .

Au n q u e e n u n p rin cip io lo q u e s e va e s a e xp lica r có m o u s a r e l co m p ila d o r e n lín e a d e co m a n d o s , d a d o q u e


Vis u a l S t u d io . NET t a m b ié n h a ce u s o in t e rn o d e é l p a ra co m p ila r, a l fin a l d e l t e m a s e in clu irá u n e p íg ra fe
d e d ica d o a e xp lica r có m o co n t ro la r d e s d e d ich a h e rra m ie n t a vis u a l la s o p cio n e s q u e s e u t iliza rá n a l lla m a rlo .

S in t a x is g e n e ra l d e u s o d e l c o m p ila d o r

El n o m b re d e l e je cu t a b le d e l co m p ila d o r d e C# in clu id o e n e l . NET Fra m e wo rk S DK e s csc.exe y p o d rá


e n co n t ra rlo e n la ca rp e t a Microsoft.NET\Framework\v1.0.2914 in clu id a d e n t ro d e l d ire ct o rio d e
in s t a la ció n d e s u ve rs ió n d e Win d o ws . De t o d a s fo rm a s , e l p ro g ra m a d e in s t a la ció n d e l S DK lo a ñ a d e
a u t o m á t ica m e n t e a l p a t h , p o r lo q u e e n p rin cip io p u e d e lla m á rs e le s in p ro b le m a s d e s d e cu a lq u ie r d ire ct o rio .

La fo rm a m á s b á s ica d e lla m a r a l co m p ila d o r co n s is t e e n p a s a rle co m o a rg u m e n t o s lo s n o m b re d e lo s fu e n t e s


a co m p ila r, ca s o e n q u e in t e n t a ría g e n e ra r e n e l d ire ct o rio d e s d e e l q u e s e le lla m e u n e je cu t a b le a p a rt ir d e
e llo s co n e l m is m o n o m b re q u e e l p rim e ro d e lo s fu e n t e s in d ica d o s y e xt e n s ió n .exe Po r e je m p lo , a n t e u n a

http://www.programacion.com/tutorial.csharp.21.html (1 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

lla m a d a co m o :

csc FuenteA.cs FuenteB.cs FuenteC.cs

El co m p ila d o r in t e n t a rá g e n e ra r u n fu e n t e FuenteA.exe e n e l d ire ct o rio d e s d e e l q u e s e lo lla m ó cu yo


có d ig o s e a e l re s u lt a n t e d e co m p ila r Fu e n t e A. cs , Fu e n t e B. cs y Fu e n t e C. cs Ob via m e n t e , p a ra q u e e llo s e a
p o s ib le e l co m p ila d o r h a b rá d e d is p o n e r d e p e rm is o d e e s crit u ra y e s p a cio s u ficie n t e e n d ich o d ire ct o rio y
a d e m á s a lg u n o d e lo s fu e n t e s in d ica d o s t e n d rá q u e d is p o n e r d e u n p u n t o d e e n t ra d a vá lid o .

Es t e co m p o rt a m ie n t o p o r d e fe ct o p u e d e va ria rs e e s p e cifica n d o e n la lla m a d a a cs c o p cio n e s d e co m p ila ció n


a d icio n a le s q u e s ig a n la s in t a xis :

<indicadorOpción><opción>

El <indicadorOpción> p u e d e s e r e l ca rá ct e r / o e l ca rá ct e r -, a u n q u e e n a d e la n t e s ó lo h a re m o s u s o d e /.
Re s p e ct o a <opción>, p u e d e n in d ica rs e d o s t ip o s d e o p cio n e s :

● Fla g s : S o n o p cio n e s cu ya a p a rició n o a u s e n cia t ie n e n u n d e t e rm in a d o s ig n ifica d o p a ra e l


co m p ila d o r. S e in d ica n d e e s t a m a n e ra :

<nombreFlag><activado?>

<activado> e s o p cio n a l e in d ica s i s e d e s e a a ct iva r e l s ig n ifica d o d e l fla g . Pu e d e s e r e l ca rá ct e r +


p a ra in d ica r q u e s í o e l ca rá ct e r - p a ra in d ica r q u e n o , a u n q u e e n re a lid a d d a rle e l va lo r + e s
in n e ce s a rio p o rq u e e s lo q u e s e t o m a p o r d e fe ct o . Ta m b ié n h a y a lg u n o s fla g s q u e n o a d m it e n n in g u n o
d e lo s d o s ca ra ct e re s , p u e s s e co n s id e ra q u e s ie m p re q u e a p a re zca n e n la lla m a d a a l co m p ila d o r e s
p o rq u e s e d e s e a a ct iva r s u s ig n ifica d o y s i n o a p a re cie s e n s e co n s id e ra ría q u e s e d e s e a d e s a ct iva rlo .

A co n t in u a ció n s e m u e s t ra n a lg u n o s e je m p lo s d e u s o d e u n fla g lla m a d o /optimize a l co m p ila r . No


s e p re o cu p e p o r s a b e r a h o ra p a ra q u e s irve , s in o s im p le m e n t e fíje s e e n có m o s e u s a y n o t e q u e lo s
d o s p rim e ro s e je m p lo s s o n e q u iva le n t e s :

csc /optimize Fuente.cs


csc /optimize+ Fuente.cs
csc /optimize- Fuente.cs

● Op c io n e s c o n v a lo re s : A d ife re n cia d e lo s fla g s , s o n o p cio n e s cu ya a p a rició n n o e s vá lid a


p o r s í m is m a s in o q u e s ie m p re q u e s e u s e n h a n d e in clu ir la e s p e cifica ció n d e u n o o va rio s
va lo re s . La fo rm a e n q u e s e e s p e cifica n e s :

<nombreFlag>:<valores>

Lo s <valores> in d ica d o s p u e d e n s e r cu a le s q u ie ra , a u n q u e s i s e d e s e a e s p e cifica r va rio s h a y q u e


s e p a ra rlo s e n t re s í co n ca ra ct e re s d e co m a ( ,) ó p u n t o y co m a ( ;)

Co m o e s ló g ico , e n p rin cip io lo s <valores> in d ica d o s n o p u e d e n in clu ir ca ra ct e re s d e e s p a cio ya q u e


é s t o s s e in t e rp re t a ría n co m o s e p a ra d o re s d e a rg u m e n t o s e n la lla m a d a a cs c. S in e m b a rg o , lo q u e s í
s e p e rm it e e s in clu irlo s s i p re via m e n t e s e le s e n cie rra e n t re co m illa s d o b le s ( ")

Ob via m e n t e , co m o la s co m illa s d o b le s t a m b ié n t ie n e u n s ig n ifica d o e s p e cia l e n lo s a rg u m e n t o s d e cs c


t a m p o co s e rá p o s ib le in clu irla s d ire ct a m e n t e co m o ca rá ct e r e n <valores>. En e s t e ca s o , p a ra
s o lve n t a r e s t o lo q u e s e h a ce e s in t e rp re t a rla s co m o ca ra ct e re s n o rm a le s s i va n p re ce d id a s d e \ y co n
s u s ig n ifica d o e s p e cia l s i n o .

http://www.programacion.com/tutorial.csharp.21.html (2 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

De n u e vo , e s t o lle va a l p ro b le m a d e q u e e l s ig n ifica d o d e \ s i p re ce d e a " t a m b ié n p u e d e s e r e s p e cia l,


y p a ra s o lu cio n a rlo lo a h o ra q u e s e h a ce e s in clu irlo d u p lica d o ( \\) s i a p a re ce p re ce d ie n d o a u n " p e ro
n o s e d e s e a q u e t o m e s u s ig n ifica d o e s p e cia l.

Eje m p lo s e q u iva le n t e s d e có m o co m p ila r d a n d o va lo re s a u n a o p ció n /r s o n :

csc /r:Lib.dll /r:Lib2.dll Fuente.cs


csc /r:Lib1.dll,Lib2.dll Fuente.cs
csc /r:Lib1.dll;Lib3.dll Fuente.cs

Au n q u e e n lo s e je m p lo s m o s t ra d o s s ie m p re s e h a n in clu id o la s o p cio n e s a n t e s q u e lo s n o m b re s d e lo s
fu e n t e s a co m p ila r, e n re a lid a d e llo n o t ie n e p o rq u é s e r a s í y s e p u e d e n m e zcla r lib re m e n t e y e n cu a lq u ie r
o rd e n o p cio n e s y n o m b re s d e fu e n t e s a co m p ila r ( s a lvo e xce p cio n e s q u e e n s u m o m e n t o s e e xp lica rá n )

Op c io n e s d e c o m p ila c ió n

Un a ve z e xp lica d o có m o u t iliza r e l co m p ila d o r e n lín e a s g e n e ra le s e s e l m o m e n t o p ro p icio p a ra p a s a r a


e xp lica r cu á le s s o n e n co n cre t o la s o p cio n e s q u e a d m it e . Es t o s e h a rá d e s g lo s á n d o la s e n d ife re n t e s
ca t e g o ría s s e g ú n s u u t ilid a d .

An t e s d e e m p e za r e s p re cis o co m e n t a r q u e la m a yo ría d e e s t a s o p cio n e s d is p o n e n d e d o s n o m b re s


d ife re n t e s : u n n o m b re la rg o q u e p e rm it e d e d u cir co n fa cilid a d s u u t ilid a d y u n n o m b re co rt o m e n o s cla ro
p e ro q u e p e rm it e e s p e cifica rla s m á s a b re via d a m e n t e . Cu a n d o s e h a g a re fe re n cia p o r p rim e ra ve z a ca d a
o p ció n s e u t iliza rá s u n o m b re la rg o y e n t re p a ré n t e s is s e in d ica rá s u n o m b re co rt o ju s t o a co n t in u a ció n . El
re s t o d e re fe re n cia s a ca d a o p ció n s e h a rá n u s a n d o in d is t in t a m e n t e u n o u o t ro d e s u s n o m b re s .

Op c io n e s b á s ic a s

En e s t e e p íg ra fe s e e xp lica rá n t o d a s a q u e lla s o p cio n e s q u e s u e le n u s a rs e co n m a yo r fre cu e n cia a la h o ra d e


co m p ila r a p lica cio n e s . Co m o la m a yo ría ya s e e xp lica ro n e n d e t a lle e n e l Te m a 2 : In t ro d u cció n a C# , d ich a s
o p cio n e s a q u í s im p le m e n t e s e re s u m e n :

● / re c u rs e : S i e n ve z d e in d ica r e l n o m b re d e ca d a fich e ro a co m p ila r co m o s e h a d ich o s e


in d ica co m o va lo r d e e s t a o p ció n s e co n s ig u e q u e s i e l co m p ila d o r n o lo e n cu e n t ra e n la
ru t a in d ica d a lo b u s q u e e n lo s s u b d ire ct o rio s d e la m is m a .

Po r e je m p lo , la s ig u ie n t e lla m a d a in d ica q u e s e d e s e a co m p ila r e l fich e ro fu e n t e . cs u b ica d o d e n t ro d e l


d ire ct o rio c: \ Mis Do cu m e n t o s o a lg ú n s u b d ire ct o rio s u yo :

csc /recurse:"Mis Documentos"\fuente.cs

● / t a rg e t ( / t ) : Po r d e fe ct o a l co m p ila r s e g e n e ra u n e je cu t a b le cu ya e je cu ció n p ro vo ca la
a p e rt u ra d e u n a ve n t a n a d e co n s o la s i a l la n za rlo n o h u b ie s e n in g u n a a b ie rt a . Es t o p u e d e
ca m b ia rs e d a n d o u n o d e lo s va lo re s in d ica d o s e n la Ta b la 1 5 a e s t a o p ció n :
Va lo r Tip o d e fic h e ro a g e n e ra r
e x e ó n in g u n o Eje cu t a b le co n ve n t a n a d e co n s o la ( va lo r p o r d e fe ct o )
Eje cu t a b le s in ve n t a n a d e co n s o la . Út il p a ra e s crib ir a p lica cio n e s d e ve n t a n a s o s in
w in e x e
in t e rfa z
lib ra ry Lib re ría
m o d u le Mó d u lo d e có d ig o n o p e rt e n e cie n t e a n in g ú n e n s a m b la d o

Ta b la 1 5 : Va lo re s a d m it id o s p o r la o p ció n / t d e cs c

http://www.programacion.com/tutorial.csharp.21.html (3 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

Ta n t o la s lib re ría s co m o lo s e je cu t a b le s s o n s im p le s co le ccio n e s d e t ip o s d e d a t o s co m p ila d o s . La ú n ica


d ife re n cia e n t re e llo s e s q u e lo s s e g u n d o s d is p o n e n d e u n m é t o d o e s p e cia l ( Main()) q u e s irve d e
p u n t o d e e n t ra d a a p a rt ir d e l q u e p u e d e e je cu t a rs e có d ig o u s a n d o lo s m e ca n is m o o fre cid o s p o r e l
s is t e m a o p e ra t ivo ( e s crib ie n d o s u n o m b re e n la lín e a d e co m a n d o s , s e le ccio n á n d o lo g rá fica m e n t e ,
e t c. )

La d ife re n cia d e u n m ó d u lo co n lo s a n t e rio re s t ip o s d e fich e ro s e s q u e é s t e n o fo rm a p a rt e d e n in g ú n


e n s a m b la d o m ie n t ra s q u e lo s p rim e ro s s í. El CLR n o p u e d e t ra b a ja r co n m ó d u lo s p o rq u e e s t o s ca re ce n
d e m a n ifie s t o , p e ro cre a rlo s p e rm it e d is p o n e r d e có d ig o co m p ila d o q u e p u e d a a ñ a d irs e a e n s a m b la d o s
q u e s e g e n e re n p o s t e rio rm e n t e y q u e p o d rá n a cce d e r a s u s m ie m b ro s internal.

● / m a in : S i a l co m p ila r u n e je cu t a b le h u b ie s e m á s d e u n p u n t o d e e n t ra d a vá lid o e n t re lo s
t ip o s d e fin id o s e n lo s fu e n t e s a co m p ila r s e h a d e in d ica r co m o va lo r d e e s t a o p ció n cu á l e s
e l n o m b re d e l t ip o q u e in clu ye la d e fin ició n d e l Main() a u t iliza r, p u e s s i n o e l co m p ila d o r
n o s a b ría co n cú a l d e t o d a s q u e d a rs e .

Co m o e s ló g ico , lo q u e n u n ca p u e d e h a ce rs e e s d e fin ir m á s d e u n p u n t o d e e n t ra d a e n u n m is m o t ip o
d e d a t o , p u e s e n t o n ce s n i s iq u ie ra a t ra vé s d e la o p ció n /main p o d ría re s o lve rs e la a m b ig ü e d a d .

● / o u t ( / o ) : Po r d e fe ct o e l re s u lt a d o d e la co m p ila ció n d e u n e je cu t a b le e s u n fich e ro .exe


co n e l n o m b re d e l fu e n t e co m p ila d o q u e co n t e n g a e l p u n t o d e e n t ra d a , y e l d e la
co m p ila ció n d e u n m ó d u lo o lib re ría e s u n fich e ro co n e l n o m b re d e l p rim e ro d e lo s fu e n t e s
a co m p ila r in d ica d o s y e xt e n s ió n d e p e n d ie n t e d e l t ip o d e fich e ro g e n e ra d o ( .netmodule
p a ra m ó d u lo s y .dll p a ra lib re ría s ) S i s e d e s e a d a rle o t ro n o m b re b a s t a in d ica rlo co m o
va lo r d e e s t a o p ció n .

El va lo r q u e s e le d é h a d e in clu ir la e xt e n s ió n d e l fich e ro a g e n e ra r, lo q u e p e rm it e co m p ila r fich e ro s


co n e xt e n s io n e s d ife re n t e s a la s d e s u t ip o . Po r e je m p lo , p a ra cre a r u n m ó d u lo A.exe a p a rt ir d e u n
fu e n t e A.cs p u e d e h a ce rs e :

csc /out:A.exe /t:module A.cs

Ob via m e n t e , a u n q u e t e n g a e xt e n s ió n .exe e l fich e ro g e n e ra d o s e rá u n m ó d u lo y n o u n e je cu t a b le ,


p o r lo q u e s i s e in t e n t a e je cu t a rlo s e p ro d u cirá u n e rro r in fo rm a n d o d e q u e n o e s u n e je cu t a b le vá lid o .
Co m o p u e d e d e d u cirs e , ca m b ia r la e xt e n s ió n d e lo s fich e ro s g e n e ra d o s n o s u e le s e r ú t il y s ó lo p o d ría
ve n ir b ie n p a ra d ificu lt a r a p o s t a la co m p re n s ió n d e l fu n cio n a m ie n t o d e u n a a p lica ció n o p a ra id e n t ifica r
e n s a m b la d o s co n a lg ú n s ig n ifica d o o co n t e n id o e s p e cia l.

● / re fe re n c e ( / r) : Po r d e fe ct o s ó lo s e b u s ca n d e fin icio n e s d e t ip o s d e d a t o s e xt e rn a s a lo s
fu e n t e s a co m p ila r e n la lib re ría mscorlib.dll q u e fo rm a p a rt e d e la BCL. S i a lg u n o d e lo s
fu e n t e s a co m p ila r h a ce u s o d e t ip o s p ú b lico s d e fin id o s e n o t ro s e n s a m b la d o s h a y q u e
in d ica r co m o va lo re s d e /r cu á le s s o n e s o s e n s a m b la d o s p a ra q u e t a m b ié n s e b u s q u e e n
e llo s .

En mscorlib.dll s e e n cu e n t ra n lo s t ip o s d e u s o m á s fre cu e n t o s in clu id o s e n la BCL. En e l p o co


fre cu e n t e ca s o d e q u e h a ya d e fin id o s u p ro p ia ve rs ió n d e e llo s y n o d e s e e q u e s e u s e la d e la BCL,
p u e d e p u e d e p a s a r a l co m p ila d o r e l fla g /nostdlib p a ra in d ica rle q u e n o d e s e a q u e b u s q u e
im p lícit a m e n t e e n mscorlib.dll.

Pu e d e q u e t e rm in e d e s cu b rie n d o q u e e n re a lid a d t a m p o co h a ce fa lt a re fe re n cia r a la m a yo ría d e la s


re s t a n t e s lib re ría s q u e fo rm a n la BCL. Pu e s b ie n , e s t o n o s e d e b e a q u e t a m b ié n la s re fe re n cie
im p lícit a m e n t e e l co m p ila d o r, s in o a q u e s e in clu ye n e n u n fich e ro d e re s p u e s t a ( m á s a d e la n t e s e
e xp lica lo q u e s o n e s t e t ip o d e fich e ro s ) u s a d o p o r d e fe ct o p o r e l co m p ila d o r. S i n o d e s e a q u e u t ilice
e s t e fich e ro p u e d e p a s a rle e l fla g /noconfig.

http://www.programacion.com/tutorial.csharp.21.html (4 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

Cu a n d o s e d e n va lo re s a /r h a y q u e t e n e r e n cu e n t a q u e p o r d e fe ct o e l co m p ila d o r in t e rp re t a rá ca d a
ru t a a s í in d ica d a d e m a n e ra re la t iva re s p e ct o a l d ire ct o rio d e s d e e l q u e s e le lla m e . S i n o lo e n cu e n t ra
a llí lo h a rá re la t iva m e n t e re s p e ct o a l d ire ct o rio d o n d e e s t é in s t a la d o e l CLR, q u e e n lo s s is t e m a s
o p e ra t ivo s Win d o ws e s e l s u b d ire ct o rio Microsoft.NET\Framework\v1.0.2914 d e l d ire ct o rio d e
in s t a la ció n d e Win d o ws . Y s i t a m p o co lo e n cu e n t ra a llí la in t e rp re t a rá re s p e ct o a lo s d ire ct o rio s
in d ica d o s p o r la va ria b le d e e n t o rn o LIB d e s u s is t e m a o p e ra t ivo .

Es t a p o lít ica d e b ú s q u e d a p u e d e m o d ifica rs e in clu ye n d o o p cio n e s /lib a l lla m a r a l co m p ila d o r cu yo s


va lo re s le in d iq u e n e n q u é d ire ct o rio s h a d e b u s ca r a n t e s d e p a s a r a b u s ca r e n lo s in d ica d o s p o r la
va ria b le d e e n t o rn o LIB.

● / a d d m o d u le : Fu n cio n a d e fo rm a p a re cid a a / r p e ro s e u t iliza cu a n d o lo q u e u s a n lo s


fu e n t e s s o n t ip o s d e fin id o s e xt e rn a m e n t e e n m ó d u lo s e n ve z d e e n e n s a m b la d o s . In clu s o a
la h o ra d e b u s ca r m ó d u lo s s e s ig u e la m is m a p o lít ica q u e a l b u s ca r e n s a m b la d o s y s e
a d m it e e l u s o d e /lib p a ra m o d ifica rla .

S e in clu ye n o p cio n e s /r y /addmodule s e p a ra d a s p o rq u e a ñ a d ir u n m ó d u lo a u n a co m p ila ció n im p lica


d e cir q u e s e d e s e a q u e lo s t ip o s q u e in clu ye fo rm e n p a rt e d e l e n s a m b la d o a g e n e ra r, p o r lo q u e lo s
fu e n t e s a co m p ila r p o d rá n a cce d e r a s u s m ie m b ro s internal. S in e m b a rg o , cu a n d o s e re fe re n cia a
o t ro s e n s a m b la d o s co n /r e s t o n o o cu rre y lo s fu e n t e s co m p ila d o s n o p o d rá n a cce d e r a s u s m ie m b ro s
internal.

Es im p o rt a n t e s e ñ a la r q u e e l CLR e s p e ra q u e t o d o s lo s m ó d u lo s q u e s e a ñ a d a n a u n e n s a m b la d o s e
d is t rib u ya n d e n t ro d e l m is m o d ire ct o rio q u e la lib re ría o e je cu t a b le co rre s p o n d ie n t e a l m is m o . S i n o s e
h a cie s e a s í n o lo s p o d ría lo ca liza r y e n t ie m p o d e e je cu ció n s e p ro d u ciría u n a
System.TypeLoadException s i s e in t e n t a s e a cce d e r a lo s t ip o s d e fin id o s e n e llo s .

Au n q u e e n p rin cip io s e h a d ich o q u e n o im p o rt a có m o s e in t e rca le n o p cio n e s y n o m b re s d e fu e n t e s e n t re lo s


a rg u m e n t o s p a s a d o s a csc, h a y u n a e xce p ció n q u e co n s is t e e n q u e /out y /r s ie m p re h a n d e in d ica rs e
a n t e s d e a lg ú n fu e n t e . Es t o p e rm it e q u e e n u n a m is m a lla m a d a a l co m p ila d o r s e a p o s ib le s o licit a r la
g e n e ra ció n d e u n e n s a m b la d o y m ú lt ip le s m ó d u lo s d e có d ig o , p u e s s e co n s id e ra q u e ca d a a p a rició n d e la s
o p cio n e s a n t e rio re s h a ce re fe re n cia s ó lo a lo s fu e n t e s q u e le s ig u e n . Po r e je m p lo , d a d a :

csc /t:library /out:LibA.dll A.cs /t:module /out:ModB.netmodule B.cs

Es t a lla m a d a p ro vo ca rá la co m p ila ció n d e A.cs co m o lib re ría d e n o m b re LibA.dll y la d e B.cs co m o


m ó d u lo lla m a d o ModB.netmodule.

S in e m b a rg o , a l h a ce r a s í co m p ila cio n e s m ú lt ip le s h a y q u e t e n e r e n cu e n t a q u e s ó lo e s vá lid o s o licit a r q u e e l


p rim e r g ru p o d e fich e ro s in d ica d o s e co m p ile co m o e n s a m b la d o . Po r t a n t o , s e ría in co rre ct o h a ce r:

csc /t:module /out:ModB.netmodule B.cs /t:library /out:LibA.dll A.cs

Es t a lla m a d a e s in co rre ct a p o rq u e in d ica q u e s e d e s e a q u e e l s e g u n d o g ru p o d e fich e ro s d é lu g a r a u n


e n s a m b la d o y e llo s ó lo p u e d e h a ce rs e co n e l p rim e ro .

Po r o t ro la d o , t a m b ié n h a y q u e t e n e r e n cu e n t a q u e n o e s vá lid o q u e u n m is m o t ip o d e d a t o s e d e fin a e n
va rio s d e lo s g ru p o s d e fich e ro s in d ica d o s . Po r e je m p lo , s i s e q u is ie s e co m p ila r A.cs co m o e je cu t a b le y co m o
m ó d u lo p o d ría p e n s a rs e e n h a ce r:

csc A.cs /t:library A.cs

S in e m b a rg o , e s t a lla m a d a n o e s vá lid a p o rq u e lo s d o s g ru p o s d e fich e ro s in d ica d o s co n t ie n e n e l m is m o


fich e ro y p o r t a n t o d e fin icio n e s co m u n e s d e t ip o s d e d a t o s . La ú n ica s o lu ció n p o s ib le s e ría h a ce r d o s lla m a d a s
p o r s e p a ra d o a l co m p ila d o r co m o :

http://www.programacion.com/tutorial.csharp.21.html (5 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

csc A.cs
csc /t:library A.cs

Ma n ip u la c ió n d e re c u rs o s

Lo s fic h e ro s d e re c u rs o s s o n a rch ivo s q u e n o co n t ie n e n có d ig o s in o s ó lo d a t o s t a le s co m o co m o ca d e n a s d e


t e xt o s , im á g e n e s , víd e o s o s o n id o s . S u u t ilid a d e s fa cilit a r e l d e s a co p le e n t re la s a p lica cio n e s y lo s d a t o s
co n cre t o s q u e u s e n , d e m o d o q u e s e a fá cil re u t iliza rlo s e n m ú lt ip le s a p lica cio n e s , m o d ifica rlo s s in t e n e r q u e
re co m p ila r lo s fu e n t e s y d e s a rro lla r d ife re n t e s ve rs io n e s d e ca d a a p lica ció n e n la s q u e s ó lo va ríe n d ich o s
da tos.

Es t o s fich e ro s s o n e s p e cia lm e n t e ú t ile s a l h o ra d e in t e rn a cio n a liza r a p lica cio n e s , p u e s s i s e d e ja n t o d o s lo s


d a t o s q u e s e u t ilice n e n fich e ro s d e re cu rs o s in d e p e n d ie n t e d e l có d ig o , a la h o ra d e cre a r n u e va s ve rs io n e s
e n o t ro s id io m a s s ó lo s e rá n e ce s a rio ca m b ia r lo s fich e ro s d e re cu rs o s y h a b rá q u e t o ca r p a ra n a d a e l có d ig o .

El o b je t ivo d e e s t e t e m a n o e s e xp lica r có m o cre a r y a cce d e r a fich e ro s d e re cu rs o s , s in o e xp lica r e l


s ig n ifica d o d e la s o p cio n e s d e co m p ila ció n re la cio n a d a s co n e llo s . S i d e s e a a p re n d e r m á s s o b re re cu rs o s
p u e d e co m e n za r b u s ca n d o e n e l a p a rt a d o Vis u a l S t u d io . N ET - > . N ET Fra m e w o rk - > . N ET Fra m e w o rk
Tu t o ria ls - > Re s o u rc e s a n d Lo c a liz a t io n Us in g t h e . N ET Fra m e w o rk S D K d e la a yu d a d e l S DK.

Lo q u e s í e s im p o rt a n t e e s s e ñ a la r q u e a u n q u e e n la p la t a fo rm a . NET p u e d e n cre a rs e fich e ro s d e re cu rs o s


t a n t o e n fo rm a t o .txt co m o .resx, e l co m p ila d o r d e C# s ó lo lo s a d m it e s i e s t á n co m p ila d o s e n fo rm a t o
. re s o u rce s . Pa ra e llo , e n e l S DK s e in clu ye u n a u t ilid a d lla m a d resgen.exe q u e p e rm it e co m p ila r e n d ich o
fo rm a t o fich e ro s d e re cu rs o s e s crit o s e n cu a lq u ie ra d e lo s fo rm a t o s a n t e rio re s co n s ó lo p a s á rs e lo s co m o
a rg u m e n t o s . Po r e je m p lo , s i s e le lla m a a s í:

resgen misrecursos.resx

S u p o n ie n d o q u e e l co n t e n id o d e misrecursos.resx s e a e l d e u n fich e ro .resx vá lid o , t ra s e s t a lla m a d a s e


h a b rá g e n e ra d o e n e l d ire ct o rio d e s d e e l q u e s e le lla m ó u n fich e ro m is re cu rs o s . re s o u rce s co n e l co n t e n id o d e
misrecursos.resx.

Pa ra a ñ a d ir e s t e fich e ro a l e n s a m b la d o re s u lt a n t e d e u n a co m p ila ció n s e p u e d e u t iliza r la o p ció n


/linkresource ( /linkres) As í p o r e je m p lo , p a ra cre a r u n e n s a m b la d o fuente1.dll fo rm a d o p o r e l
có d ig o re s u lt a n t e d e co m p ila r fuente1.cs y lo s re cu rs o s d e misrecursos.resources p o d ría co m p ila rs e
co n :

csc /t:library fuente1.cs /linkres:misrecursos.resources

De e s t e m o d o e l fich e ro d e re cu rs o s fo rm a rá p a rt e d e l e n s a m b la d o g e n e ra d o p e ro p e rm a n e ce rá e n u n fich e ro
s e p a ra d o d e fuente1.dll. S i s e d e s e a s e in cru s t a rlo e n é l h a b ría q u e h a b e r co m p ila d o co n la o p ció n
/resource ( /res) e n ve z d e /linkres t a l y co m o s e m u e s t ra a co n t in u a ció n :

csc /t:library fuente1.cs /res:misrecursos.resources

Co m o u n t ip o e s p e cia l d e re cu rs o q u e co m ú m e n t e s u e le in cru s t a ra s e e n lo s e je cu t a b le s d e lo s p ro g ra m a s e s
e l ico n o ( fich e ro g rá fico e n fo rm a t o .ico) co n e l q u e d e s d e la s in t e rfa ce s g rá fica s d e lo s s is t e m a s o p e ra t ivo s
s e le s re p re s e n t a rá , csc o fre ce u n a o p ció n e s p e cífica lla m a d a /win32icon e n cu yo va lo r p u e d e in d icá rs e le
e l ico n o a in cru s t a r:

csc programa.cs /win32icon:programa.ico

En re a lid a d h a y q u e re co rd a r e l u s o d e fich e ro s d e re cu rs o s n o e s u n a s p e ct o in t ro d u cid o e n la p la t a fo rm a


. NET s in o d is p o n ib le d e s d e h a ce t ie m p o e n la p la t a fo rm a Win d o ws e n fo rm a d e fich e ro s .res. Po r
co m p a t ib ilid a d co n e s t e a n t ig u o fo rm a t o d e re cu rs o s , csc in co rp o ra u n a o p ció n /win32res q u e p e rm it e

http://www.programacion.com/tutorial.csharp.21.html (6 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

in cru s t a rlo s d e ig u a l fo rm a a co m o /res in cru s t a lo s n o ve d o s o s fich e ro s .resources.

En cu a lq u ie r ca s o , h a y q u e s e ñ a la r q u e s ie m p re q u e s e a ñ a d a u n fich e ro d e re cu rs o s a u n e n s a m b la d o la
vis ib ilid a d q u e s e co n s id e ra rá p a ra lo s re cu rs o s q u e in clu ya e s public.

Co n fig u ra c ió n d e m e n s a je s d e a v is o s y e rro re s

Ca d a ve z q u e e l co m p ila d o r d e t e ct a a lg ú n e rro r e n u n o d e lo s fu e n t e s a co m p ila r g e n e ra u n m e n s a je


in fo rm a n d o d e e llo e n e l q u e in d ica e n q u é fich e ro d e có d ig o fu e n t e y e n q u é p o s ició n e xa ct a d e l m is m o ( lín e a
y co lu m n a ) lo h a d e t e ct a d o . Po r e je m p lo , s i e n la co lu m n a 3 d e la lín e a 7 d e u n fu e n t e lla m a d o ej.cs s e
lla m a a u n m é t o d o co n n o m b re co m p le t o A.K() in e xis t e n t e , s e m o s t ra rá u n m e n s a je co m o :

ej.cs(7,3): error CS0117: 'A' does not contain a definition for 'K'

Nó t e s e q u e d e l fich e ro s ó lo s e d a s u n o m b re y e llo p o d ría n o id e n t ifica rlo u n ívo ca m e n t e s i s e co m p ila ro n a la


ve z va rio s co n e l m is m o n o m b re p e ro p e rt e n cie n t e s a d ire ct o rio s d ife re n t e s . Pa ra s o lu cio n a r e s t o p u e d e
u s a rs e la o p ció n /fullpaths, co n lo q u e d e lo s m e n s a je s d e e rro r in clu iría n s ie m p re la ru t a co m p le t a d e lo s
fich e ro s d e fe ct u o s o s . Po r e je m p lo , s i e l fich e ro d e l e je m p lo a n t e rio r s e e n co n t ra b a e n C:\Ejemplo, a l
co m p ila rlo co n e s t a o p ció n s e m o s t ra ría e l m e n s a je d e e rro r a s í:

C:\Ejemplo\ej.cs(7,3): error CS0117: 'A' does not contain a definition for 'K'

Ha y ve ce s q u e e l co m p ila d o r d e t e ct a q u e s e h a n e s crit o e n e l fu e n t e cie rt a s s e ccio n e s d e t a l m a n e ra q u e s in


s e r e rró n e a s s o n cu a n t o m e n o s s o s p e ch o s a s ( ya s e a p o r s e r a b s u rd a s , p o r p re s t a rs e a co n fu s ió n , e t c) , y e n
e s o s ca s o s lo q u e h a ce e s e m it ir m e n s a je s d e a vis o . Po r e je m p lo , s i e n la d e fin ició n d e l t ip o A d e l fu e n t e
p ru e b a . cs s e h u b ie s e in clu id o :

static void Main(int x)


{}

En p rin cip io e s u n a d e fin ició n d e m é t o d o p e rfe ct a m e n t e vá lid a . S in e m b a rg o , co m o s e p a re ce m u ch o a u n a


d e fin ició n d e p u n t o d e e n t ra d a p e ro n o e s vá lid a co m o t a l, e l co m p ila d o r g e n e ra rá e l m e n s a je d e a vis o q u e
s ig u e p a ra in fo rm a r d e e llo a l u s u a rio p o r s i a ca s o é s t e lo q u e q u e ría h a ce r e ra d e fin ir u n p u n t o d e e n t ra d a y
s e e q u ivo có :

prueba.cs(7,14): warning CS0028: 'A.Main(int)' has the wrong signature to be an


entry point

Co m o s e ve , la e s t ru ct u ra d e lo s m e n s a je s d e a vis o e s m u y s im ila r a la d e lo s m e n s a je s d e e rro r y s ó lo s e


d ife re n cia d e é s t a e n q u e in clu ye wa rn in g e n ve z d e e rro r t ra s e l in d ica d o r d e p o s ició n e n e l fu e n t e . In clu s o
co m o a e s t o s , la o p ció n /fullpaths t a m b ié n le s a fe ct a y p ro vo ca q u e s e m u e s t re n la s ru t a s d e lo s fu e n t e s
a l co m p le t o .

Un a d ife re n cia im p o rt a n t e e n t re a vis o s y e rro re s e s q u e la a p a rició n d e m e n s a je s d e lo s s e g u n d o s d u ra n t e la


co m p ila ció n a b o rt a la g e n e ra ció n d e l b in a rio , m ie n t ra s q u e la a p a rició n d e lo s p rim e ro s n o ( a u n q u e e n a m b o s
ca s o s n u n ca s e a b o rt a la co m p ila ció n s in o q u e t ra s m o s t ra rlo s s e s ig u e a n a liza n d o lo s fu e n t e s p o r s i p u d ie s e n
d e t e ct a rs e m á s e rro re s y a vis o s ) Ah o ra b ie n , t a m b ié n p u e d e fo rza rs e a q u e e llo o cu rra co n lo s d e a vis o
p a s a n d o a l co m p ila d o r e l fla g /warnaserror, co n lo q u e s e co n s e g u iría q u e t o d o m e n s a je d e a vis o s e
m u e s t ra s e co m o e rro r. Ello p u e d e re s u lt a r ú t il p o rq u e fu e rza a e s crib ir lo s fu e n t e s d e la m a n e ra m á s fia b le e
in t e lig e n t e m e n t e p o s ib le .

En e l la o d o p u e s t o , p u e d e q u e h a ya cie rt o s t ip o s d e m e n s a je s d e a vis o d e lo s q u e n o s e d e s e a s iq u ie ra q u e
s e in fo rm e e n t a n t o q u e la in fo rm a ció n q u e a p o rt a n ya s e co n o ce y s e s a b e q u e n o a fe ct a rá n e g a t iva m e n t e a l
p ro g ra m a . En e s o s ca s o s p u e d e u s a rs e la o p ció n /nowarn in d ica n d o co m o va lo re s s u yo s lo s có d ig o s
a s o cia d o s a lo s m e n s a je d e a vis o q u e n o s e d e s e a q u e s e re p o rt e n . El có d ig o a s o cia d o a ca d a t ip o d e
m e n s a je d e a vis o s e e s la p a la b ra d e la fo rm a CS<código> q u e s e m u e s t ra t ra s wa rn in g e n e l m e n s a je d e

http://www.programacion.com/tutorial.csharp.21.html (7 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

a vis o . As í, p a ra co m p ila r e l prueba.cs d e l e je m p lo a n t e rio r s in q u e s e g e n e re e l m e n s a je d e a vis o a rrib a


m o s t ra d o p u e d e h a ce rs e :

csc prueba.cs /nowarn:0028

En re a lid a d lo s ce ro s in clu id o s a la izq u ie rd a d e l có d ig o d e l a vis o e n lo s m e n s a je s d e a vis o s o n o p cio n a le s ,


p o r lo q u e la co m p ila ció n a n t e rio r e s e q u iva le n t e a :

csc prueba.cs /nowarn:28

S i d e s e a o b t e n e r la lis t a co m p le t a d e t o d o s lo s t ip o s d e m e n s a je d e a vis o y e rro r co n s u s re s p e ct ivo s có d ig o s


p u e d e co n s u lt a r d e n t ro d e la d o cu m e n t a ció n d e l . NET Fra m e wo rk S DK e n Vis u a l S t u d io . N ET - > Vis u a l
Ba s ic a n d Vis u a l C# - > Vis u a l C# La n g u a g e - > C# Co m p ile r Op t io n s - > Co m p ile r Erro rs CS 0 0 0 1 t o
CS 9 9 9 9

S i e n lu g a r d e d e s a ct iva r cie rt o s t ip o s d e a vis o s u n o p o r u n o d e s e a d e s a ct iva rlo s p o r g ru p o s s e g ú n s u


s e ve rid a d , e n t o n ce s p u e d e h a ce rlo a t ra vé s d e la o p ció n /warn. Es t a o p ció n t o m a co m o va lo r u n n ú m e ro
co m p re n d id o e n t re 0 y 4 q u e in d ica cu á l e s e l n ive l d e a vis o s co n e l q u e s e d e s e a t ra b a ja r. Po r d e fe ct o é s t e
va le 4 , lo q u e s ig n ifica q u e s e m o s t ra rá n t o d o s lo s a vis o s , p e ro p u e d e d á rs e le cu a lq u ie ra d e lo s d e la Ta b la
16:

N iv e l d e a v is o Av is o s m o s t ra d o s
0 Nin g u n o
1 S ó lo lo s m á s g ra ve s
Lo s m á s g ra ve s y a lg u n o s m e n o s g ra ve s co m o p o r e je m p lo lo s re la t ivo s a o cu lt a cio n e s d e
2
m ie m b ro s
Lo s d e n ive l 2 m á s a lg u n o s p o co g ra ve s co m o lo s re la t ivo s a l u s o d e e xp re s io n e s a b s u rd a s
3
q u e s ie m p re p ro d u zca n e l m is m o re s u lt a d o
4 To d o s

Ta b la 1 6 : Nive le s d e m e n s a je s d e a vis o

S i e s t á in t e re s a d o e n co n o ce r e n co n cre t o e l n ive l d e a lg ú n t ip o d e a vis o p u e d e re m it irs e a la d e s crip ció n


s o b re e l m is m o in clu id a e n la d o cu m e n t a ció n d e l S DK a n t e s co m e n t a d a

Fic h e ro s d e re s p u e s t a

La lín e a d e co m a n d o s n o e s la ú n ica fo rm a d e p a s a r in fo rm a ció n a l co m p ila d o r ( t a n t o fich e ro s a co m p ila r


co m o o p cio n e s d e co m p ila ció n ) , s in o q u e t a m b ié n e s p o s ib le a lm a ce n a r in fo rm a ció n d e e s t e t ip o e n u n
fich e ro y p a s á rs e le a l co m p ila d o r co m o a rg u m e n t o s o la m e n t e d ich o fich e ro y n o t o d a la in fo rm a ció n e n é l
co n t e n id a . De e s t e m o d o s e fa cilit a ría la la b o r d e p a s a r co m o p a rá m e t ro s la s o p cio n e s d e u s o m á s fre cu e n t e
ya q u e b a s t a ría s ó lo in d ica r cu á l e s e l n o m b re d e u n fich e ro q u e la s e s p e cifica .

A e s t e fich e ro s s e le s lla m a fic h e ro s d e re s p u e s t a , ya q u e a l p a s á rs e lo s a l co m p ila d o r s u co n t e n id o p u e d e


ve rs e co m o la re s p u e s t a a cu á le s s o n lo s a rg u m e n t o s a u s a r d u ra n t e la co m p ila ció n . La e xt e n s ió n d e e s t o s
fich e ro s s u e le s e r .rsp, y a u n q u e n a d a o b lig a a d á rs e la e s co n ve n ie n t e h a ce rlo co m o o cu rre co n t o d o
co n ve n io .

Al co m p ila r, p o r d e fe ct o e l co m p ila d o r s ie m p re le e u n fich e ro d e re s p u e s t a lla m a d o csc.rsp u b ica d o e n e l


d ire ct o rio d e l CLR, p o r lo q u e p a ra e n t e n d e r cu á l e s la s in t a xis a s e g u ir p a ra e s crib ir e s t o s fich e ro s n a d a
m e jo r q u e ve r cu á l e s s u co n t e n id o y a s í d e p a s o s a b e r cu á le s s o n la s o p cio n e s q u e p o r d e fe ct o s e a ñ a d ira n a
t o d a co m p ila ció n :

# This file contains command-line options that the C#

http://www.programacion.com/tutorial.csharp.21.html (8 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

# command line compiler (CSC) will process as part


# of every compilation, unless the "/noconfig" option
# is specified.
# Reference the common Framework libraries
/r:Accessibility.dll
/r:Microsoft.Vsa.dll
/r:System.Configuration.Install.dll
/r:System.Data.dll
/r:System.Design.dll
/r:System.DirectoryServices.dll
/r:System.dll
/r:System.Drawing.Design.dll
/r:System.Drawing.dll
/r:System.EnterpriseServices.dll
/r:System.Management.dll
/r:System.Messaging.dll
/r:System.Runtime.Remoting.dll
/r:System.Runtime.Serialization.Formatters.Soap.dll
/r:System.Security.dll
/r:System.ServiceProcess.dll
/r:System.Web.dll
/r:System.Web.RegularExpressions.dll
/r:System.Web.Services.dll
/r:System.Windows.Forms.Dll
/r:System.XML.dll

De l co n t e n id o d e e s t e fich e ro e s fá cil d e d u cir q u e la e s t ru ct u ra d e lo s fich e ro s d e re s p u e s t a e s s e n cilla : ca d a


o p ció n s e in clu ye e n u n a lín e a a p a rt e y p u e d e n in t e rca la rs e e n t re e lla s co m e n t a rio s d e u n a lín e a q u e
co m ie n ce n co n #. Ad e m á s , co m o p u e d e ve rs e e s t e fich e ro d e re s p u e s t a u s a d o p o r d e fe ct o a ñ a d e re fe re n cia s
a la s lib re ría s d e la BCL d e u s o m á s co m ú n , lo q u e e vit a t e n e r q u e in clu irla s co n s t a n t e m e n t e a l co m p ila r.

Tra s t o m a r la s o p cio n e s d e e s t e fich e ro , e l co m p ila d o r m ira s i e n e l d ire ct o rio d e s d e e l q u e s e le lla m a h a y


o t ro csc.rsp y s i e s a s í t o m a s u s o p cio n e s . S i p o r a lg u n a ra zó n n o n o s in t e re s a s e q u e s e t o m a s e n la s
o p cio n e s d e d ich o s fich e ro s ( p o r e je m p lo , p a ra u s a r n u e va s ve rs io n e s d e t ip o s in clu id o s e n la s lib re ría s q u e
re fe re n cia n ) b a s t a ría p a s a r e l fla g /noconfig a l co m p ila r p a ra d e s a ct iva r e s t a b ú s q u e d a p o r d e fe ct o e n
e llo s , a u n q u e h a y q u e s e ñ a la r q u e e s t e fla g n o a d m it e lo s s u fijo s + y - a d m it id o s p o r e l re s t o d e fla g s .

En re a lid a d , la e s t ru ct u ra d e l fich e ro d e re s p u e s t a csc.rsp n o e s la ú n ica p o s ib le , p u e s a d e m á s d e o p cio n e s


t a m b ié n e s vá lid o in clu ir n o m b re s d e fu e n t e s a co m p ila r e in clu s o p u e d e m e zcla rs e m ú lt ip le s o p cio n e s y
n o m b re s d e fu e n t e s e n ca d a lín e a d e l fich e ro .

Ah o ra b ie n , a l e s crib ir fich e ro s d e re s p u e s t a h a y q u e t e n e r cu id a d o co n d o s co s a s : n o e s p o s ib le co rt a r la s
o p cio n e s o n o m b re s d e fich e ro co n re t o rn o s d e ca rro q u e p ro vo q u e n q u e o cu p e n va ria s lín e a s ; y la s o p cio n e s
s o n p a s a d a s a l co m p ila d o r e n e l m is m o o rd e n e n q u e a p a re zca n e n e l fu e n t e , p o r lo q u e h a y q u e t e n e r
cu id a d o co n có m o s e co lo q u e n la s o p cio n e s /out y /t p o r lo ya co m e n t a d o s o b re la im p o rt a cia d e s u
co lo ca ció n .

Un a ve z e s crit o u n fich e ro d e re s p u e s t a , p a ra in d ica r a l co m p ila d o r q u e h a d e u s a rlo b a s t a p a s á rs e lo co m o u n


n o m b re d e fu e n t e m á s p e ro p re ce d ie n d o s u n o m b re d e l s u fijo @. Po r e je m p lo , p a ra co m p ila r A. cs u s a n d o la s
o p cio n e s a lm a ce n a d a s e n opc.rsp h a b ría q u e lla m a r a l co m p ila d o r co n :

csc @opc.rsp A.rsp

Ta m b ié n s e ría p o s ib le in d ica r m ú lt ip le s fich e ro s d e re s p u e s t a , ca s o e n q u e s e t o m a ría n la s o p cio n e s d e ca d a


u n o e n e l m is m o o rd e n e n q u e a p a re cie s e n e n la lla m a d a a csc. Po r e je m p lo , p a ra co m p ila r A.rsp t o m a n d o
la s o p cio n e s d e opc1.rsp y lu e g o la s d e opc2.rsp p o d ría lla m a rs e a l co m p ila d o r co n :

http://www.programacion.com/tutorial.csharp.21.html (9 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

csc @opc1.rsp @opc2.rsp A.rsp

Pu e d e o cu rrir q u e la s o p cio n e s in d ica d a s e n u n fich e ro d e re s p u e s t a co n t ra d ig a n a o p cio n e s in d ica d a s e n o t ro


fich e ro d e re s p u e s t a in d ica d o a co n t in u a ció n o a o p cio n e s d a d a s a l co m p ila d o r e n la lín e a d e co m a n d o s . Pa ra
re s o lve r e s t a s a m b ig ü e d a d e s e l co m p ila d o r s ie m p re va p ro ce s a n d o lo s a rg u m e n t o s q u e s e le p a s e n d e
izq u ie rd a a d e re ch a y s e q u e d a co n la ú lt im a e s p e cifica ció n d a d a a ca d a o p ció n . As í, e n e l e je m p lo a n t e rio r
la s o p cio n e s d e l csc.rsp d e l d ire ct o rio d e s d e e l q u e s e le lla m ó - s i e xis t ie s e - t e n d ría p re fe re n cia s o b re la s
d e l csc.rsp d e l d ire ct o rio d e l CLR, la s d e opc2.rsp t e n d ría n p re fe re n cia s o b re la s d e é s t e , y la s d e
opc1.rsp s o b re la s d e opc2.rsp.

Ta m b ié n p u e d e n in clu irs e e n lo s fich e ro s d e re s p u e s t a o p cio n e s @ q u e in clu ya n a o t ro s fich e ro s d e re s p u e s t a ,


co n lo q u e s e t o m a ría s u s o p cio n e s a n t e s d e co n t in u a r t o m a n d o la s s ig u ie n t e s d e l fich e ro q u e lo in clu yó ,
a u n q u e o b via m e n t e n u n ca s e a d m it irá q u e u n fich e ro in clu id o s e a e l m is m o q u e e l q u e lo in clu ye o q u e
a lg u n o q u e in clu ya a é s t e , p u e s e n t o n ce s s e fo rm a ría n ciclo s y n u n ca a ca b a ría la b ú s q u e d a d e o p cio n e s .

Op c io n e s d e d e p u ra c ió n

S in d u d a la o p ció n d e d e p u ra ció n m á s im p o rt a n t e e s e l fla g /debug, cu ya in clu s ió n in d ica a l co m p ila d o r q u e


h a d e g e n e ra r u n fich e ro .pdb co n in fo rm a ció n s o b re la re la ció n e n t re e l fich e ro b in a rio g e n e ra d o y la s lín e a s
d e lo s fu e n t e s a p a rt ir d e lo s q u e s e g e n e ró . Es t a in fo rm a ció n e s m u y ú t il p a ra d e p u ra r a p lica cio n e s , p u e s
p e rm it e m o s t ra r la in s t ru cció n d e có d ig o fu e n t e q u e p ro d u jo la s e xce p cio n e s e n lu g a r d e m o s t ra r la s
in s t ru ccio n e s d e có d ig o n a t ivo e n q u e fu e t ra d u cid a .

Pa ra e n t e n d e r m e jo r la u t ilid a d d e e s t e fich e ro .pdb p u e d e e s crib ir e l p ro g ra m a :

class A
{
public static void Main()
{throw new System.Exception();}
}

S i lo co m p ila co n :

csc A.cs

Al e je cu t a rlo s e p ro d u cirá u n a e xce p ció n y s u rg irá u n a ve n t a n a d e s e le cció n d e d e p u ra d o r. S i p u ls a No e n e lla


ve rá e n la co n s o la u n m e n s a je co m o e l s ig u ie n t e :

Unhandled Exception: System.Exception: Exception of type System.Exception was


thrown. at A.Main()

S in e m b a rg o , s i lo co m p ila co n :

csc A.cs /debug

Al e je cu t a rlo s e o b t e n d rá u n m e n s a je m u ch o m á s d e t a lla d o e n e l q u e s e in d ica rá cu á l e s la lín e a e xá ct a d e l


có d ig o fu e n t e d u ra n t e cu ya e je cu ció n s e p ro d u jo la e xce p ció n :

Unhandled Exception: System.Exception: Exception of type System.Exception was


thrown at A.Main() in E:\c#\Ej\A.cs:line 5

Co m o e s fá cil d e d u cir, a p a rt ir d e e s t a in fo rm a ció n e s fá cil cre a r h e rra m ie n t a s d e d e p u ra ció n - co m o e l


d e p u ra d o r d e Vis u a l S t u d io . NET o e l CLR De b u g g e r d e l S DK- q u e m u e s t re n la lín e a e xá ct a d e l có d ig o fu e n t e
d o n d e s e p ro d u jo la e xce p ció n la n za d a ; y o b via m e n t e e s t o s d a t o s t a m b ié n p u e d e n t e n e r m u ch o s o t ro s u s o s ,

http://www.programacion.com/tutorial.csharp.21.html (10 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

co m o p e rm it ir e je cu t a r p a s o a p a s o lo s p ro g ra m a s m o s t ra n d o e n ca d a m o m e n t o cu á l e s la lín e a d e l fu e n t e
q u e s e e je cu t a rá a co n t in u a ció n y co s a s s im ila re s .

Ta m b ié n p u e d e u s a rs e /debug co m o o p ció n co n a rg u m e n t o s e n ve z d e có m o fla g , lo q u e p e rm it e g e n e ra r


u n a ve rs ió n re co rt a d a d e la in fo rm a ció n d e d e p u ra ció n . S i d e e s t a fo rm a s e le d a e l va lo r full fu n cio n a rá
e xá ct a m e n t e ig u a l q u e a l a ct iva rla co m o fla g , p e ro s i s e le d a e l va lo r pdbonly e n t o n ce s la in fo rm a ció n d e
d e p u ra ció n g e n e ra d a s ó lo e s t a rá d is p o n ib le p a ra lo s d e p u ra d o re s d e s d e lo s q u e s e h a ya la n za d o la a p lica ció n
p e ro n o p a ra lo s q u e s e le h a ya n a d ju n t a d o d in á m ica m e n t e u n a ve z la n za d a .

Po r ú lt im o , re s p e ct o a la d e p u ra ció n d e a p lica cio n e s co n vie n e s e ñ a la r q u e p o r d e fe ct o e l co m p ila d o r s ie m p re


in t e n t a g e n e ra r e l có d ig o m á s co m p a ct o y e ficie n t e p o s ib le , lo q u e p ro vo ca q u e co m p ile m á s le n t a m e n t e . S in
e m b a rg o , co m o cu a n d o s e e s t á d e p u ra n d o s u e le n re a liza rs e m m u ch a s re co m p ila cio n e s d e lo s fu e n t e s p u e d e
q u e e n e s o s ca s o s in t e re s e d e s a ct iva r d ich a s o p t im iza cio n e s y a s í a s í co n s e g u ir re co m p ila r m á s rá p id o . Ello
p u e d e co n s e g u irs e lla m a n d o a l co m p ila d o r co n /optimize- ( /o-)

Co m p ila c ió n in c re m e n t a l

La c o m p ila c ió n in c re m e n t a l co n s is t e e n s ó lo re co m p ila r e n ca d a co m p ila ció n q u e s e h a g a d e u n p ro ye ct o


a q u e llo s m é t o d o s cu ya d e fin ició n h a ya ca m b ia d o re s p e ct o a la ú lt im a co m p ila ció n re a liza d a , co n lo q u e e l
p ro ye ct o p o d ría co m p ila rs e m á s rá p id o q u e h a cie n d o u n a co m p ila ció n co m p le t a n o rm a l.

Pa ra q u e e s t o s e a p o s ib le h a ce rlo h a y q u e lla m a r a l co m p ila d o r co n e l fla g /incremental ( /incr) , lo q u e


p ro vo ca rá la g e n e ra ció n d e u n fich e ro a d icio n a l co n e l m is m o n o m b re q u e e l b in a rio g e n e ra d o m á s u n a
e xt e n s ió n .incr. Po r e je m p lo , d a d o :

csc /out:fuente.exe /incremental Fuente.cs

S e g e n e ra rá u n e je cu t a b le fu e n t e . e xe y u n fich e ro a d icio n a l fuente.exe.incr. Au n q u e p u e d a p a re ce r


re d u n d a n t e in clu ir e n e l e je m p lo la o p ció n /out a l lla m a r a l co m p ila d o r, e s n e ce s a ria p o rq u e a l m e n o s e n la
ve rs ió n d e l co m p ila d o r in clu id a e n la b e t a 2 d e l e s o b lig a t o rio e s p e cifica rla s ie m p re q u e s e u t ilice /incr.

El fich e ro .incr g e n e ra d o in clu ye in fo rm a ció n s o b re la co m p ila ció n q u e p e rm it irá q u e p o s t e rio re s


co m p ila cio n e s q u e s e re a lice n co n /incr a ct iva d o p u e d a n h a ce rs e d e m a n e ra in cre m e n t a l. Ob via m e n t e , s i
e s t e fich e ro s e e lim in a s e rá re co n s t ru id o e n la s ig u ie n t e co m p ila ció n q u e s e h a g a co n /incr, p e ro d ich a
co m p ila ció n n o s e re a liza rá d e m a n e ra co m p le t a p o r n o d is p o n e rs e d e l fich e ro .incr d u ra n t e e lla .

S in e m b a rg o , e l h e ch o d e q u e e s t é d is p o n ib le u n fich e ro .incr a l co m p ila r u n p ro ye ct o n o im p lica q u e s e


u s e , p u e s e l co m p ila d o r p u e d e ig n o ra rlo y re a liza r u n a co m p ila ció n co m p le t a s i d e t e ct a q u e h a n ca m b ia d o la s
o p cio n e s d e co m p ila ció n e s p e cifica d a s o s i d e t e ct a q u e lo s fu e n t e s h a n ca m b ia d o t a n t o q u e e s a l m e n o s ig u a l
d e e ficie n t e h a ce rla a s í q u e d e m a n e ra in cre m e n t a l.

En re a lid a d n o e s b u e n o h a ce r s ie m p re la s co m p ila cio n e s in cre m e n t a lm e n t e s in o q u e s ó lo e s ú t il h a ce rlo e n


p ro ye ct o s fo rm a d o s p o r m ú t ilp le s fu e n t e s d e p e q u e ñ o t a m a ñ o , m in e t ra s q u e e n p ro ye ct o s co n p o co s y
g ra n d e s fich e ro s s e g a n a p o co o n a d a e n t ie m p o d e co m p ila ció n . Ad e m á s , lo s e je cu t a b le s g e n e ra d o s
in cre m e n t a lm e n t e p u e d e n o cu p a r m á s q u e lo s g e n e ra d o s p o r co m p ila ció n co m p le t a , p o r lo s ó lo e s
re co m e n d a b le co m p ila r in cre m e n t a lm e n t e la s ve rs io n e s d e p ru e b a d e lo s p ro ye ct o s p e ro n o la s d e fin it iva s .

Op c io n e s re la t iv a s a l le n g u a je

A lo la rg o d e lo s a n t e rio re s t e m a s s e h a id o d is e m in a n d o d ive rs a s o p cio n e s d e co m p ila ció n re la cio n a d a s d e


m a n e ra m á s o m e n o s d ire ct a co n e l le n g u a je C# . En e s t e p u n t o h a re m o s re ca p it u la ció n d e t o d a s e lla s
m is m a s y la s re s u m ire m o s :

● / d e fin e ( / d ) : En e l Te m a 3 : El p re p ro ce s a d o r ya s e in t ro d u jo e s t a o p ció n cu yo s va lo re s
re co rd e m o s q u e s e u t iliza n p a ra in t ro d u cir d e fin icio n e s d e s ím b o lo s d e p re p ro ce s a d o a l

http://www.programacion.com/tutorial.csharp.21.html (11 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

p rin cip io d e t o d o s lo s fu e n t e s a co m p ila r.

Po r e je m p lo , s i s e d e s e a co m p ila r lo s fu e n t e s A.cs y B.cs co m o s i a l p rin cip io d e e llo s s e h u b ie s e


in clu id o la s d ire ct iva s d e p re p ro ce s a d o #define PRUEBA y #define VERSION1 p o d ría lla m a rs e a l
co m p ila d o r co n :

csc /d:PRUEBA;VERSION1 A.cs B.cs

● / c h e c k e d : En lo s t e m a s 4 y 1 6 s e e xp licó q u e t o d o d e s b o rd a m ie n t o q u e o cu rra e n
o p e ra cio n e s a rit m é t ica s e n t re va ria b le s e n t e ra s e s t ra t a d o p o r d e fe ct o t ru n ca n d o e l
re s u lt a d o . Pu e s b ie n , la u t ilid a d d e a ct iva r e s t a o p ció n e s p re cis a m e n t e fo rza r a q u e s e
in clu ya n e n e l có d ig o g e n e ra d o la s co m p ro b a cio n e s n e ce s a ria s p a ra q u e e n ca s o d e
d e s b o rd a m ie n t o s e la n ce e n s u lu g a r u n a System.OverflowException.

Ob via m e n t e e l có d ig o co m p ila d o co n /checked s e e je cu t a rá m á s le n t o q u e e l q u e lo h a g a s in e lla ya


q u e in clu irá co m p ro b a cio n e s d e d e s b o rd a m ie n t o a d icio n a le s . S in e m b a g o , a ca m b io co n e llo s e
co n s ig u e d e t e ct a r co n fa cilid a d e rro re s d e riva d o s d e d e s b o rd a m ie n t o s q u e d e o t ra m a n e ra p o d ría n
p a s a r in a d ve rt id o s .

● / u n s a fe : En e l Te m a 1 8 : Có d ig o in s e g u ro ya s e e xp licó q u e la ú n ica u t ilid a d d e e s t a


o p ció n e s s e rvir a l co m p ila d o r d e m e ca n is m o d e s e g u rid a d g ra cia s a l q u e p u e d a a s e g u ra rs e
d e q u e e l u s a rio s a b e lo q u e h a ce a l co m p ila r có d ig o co n p u n t e ro s .
● / d o c : Es t a o p ció n ya s e in t ro d u jo e n e l Te m a 1 9 : Do cu m e n t a ció n XML, d o n d e s e e xp licó
q u e s e u s a p a ra in d ica r a l co m p ila d o r q u e e s d e s e a g e n e ra r u n fich e ro XML co n e l
co n t e n id o d e lo s co m e n t a rio s d e d o cu m e n t a ció n in clu id o s e n lo s fu e n t e s a co m p ila r. El
n o m b re d e e s e fich e ro s e rá e l q u e s e d é co m o va lo r a e s t a o p ció n .

Al u s a r e s t a o p ció n h a y q u e t e n e r e n cu e n t a u n a co s a , y e s q u e p a ra o p t im iza r e l t ie m p o q u e s e t a rd a
e n re a liza r co m p ila cio n e s in cre m e n t a le s , d u ra n t e e lla s e s t a o p ció n e s ig n o ra d a . Po r t a n t o , n o t ie n e
m u ch o s e n t id o co m b in a r /doc y /incr.

Ot ra s o p c io n e s

Ap a rt e d e la s o p cio n e s co m e n t a d a s , csc a d m it e u n a s cu a n t a s m á s a ú n n o d e s crit a s ya s e a p o rq u e s u u s o e s


m u y p o co fre cu e n t e o p o rq u e n o e n ca ja n co rre ct a m e n t e e n n in g u n o d e lo s s u b e p íg ra fe s t ra t a d o s . To d a s
e s t a s o p cio n e s s e re co g e n fin a lm e n t e a q u í:

● / file a lig n : Lo s va lo re s d a d o s a e s t a o p ció n in d ica n e l t a m a ñ o d e la s s e ccio n e s e n q u e s e


d ivid irá n lo s fich e ro s b in a rio s re s u lt a n t e s d e la co m p ila ció n . Pu e d e t o m a r lo s va lo re s 5 1 2 ,
1 0 2 4 , 2 0 4 8 , 4 0 9 6 , 8 1 9 2 ó 1 6 3 8 4 , y ca d a s e cció n e n lo s b in a rio s co m e n za rá e n u n p o s ició n
q u e s e a m ú lt ip lo d e l va lo r d a d o a e s t a o p ció n .

Po r d e fe ct o e l va lo r q u e s e le d é p u e d e va ria r d e p e n d ie n d o d e la im p le m e n t a ció n q u e s e h a g a d e l CLR,


a u n q u e d a rle u n va lo r a m e d id a p u e d e s e r ú t il e n e l d is e ñ o d e a p lica cio n e s p a ra d is p o s it ivo s
e m p o t ra d o s co n e s ca s a ca p a cid a d d e a lm a ce n a m ie n t o ya q u e p u e d e re d u cir e l t a m a ñ o d e lo s fich e ro s
g e n e ra d o s .

● / b u g re p o rt : Da d o q u e e s m u y d ifícil d is e ñ a r u n co m p ila d o r 1 0 0 % lib re d e e rro re s ,


Micro s o ft p ro p o rcio n a a t ra vé s d e e s t a o p ció n u n m e ca n is m o q u e fa cilit a a lo s u s u a rio s e l
e n vío d e in fo rm a ció n s o b re lo s e rro re s q u e d e s cu b ra n e n e l m is m o y fa cilit a a Micro s o ft la
la b o r d e in t e rp re t a rla p a ra s o lu cio n a rlo s lo a n t e s p o s ib le .

El va lo r q u e s e d é a e s t a o p ció n e s e l n o m b re d e co n e l q u e s e d e s e a q u e s e g e n e re e l fich e ro co n la
in fo rm a ció n re la t iva a l e rro r d e s cu b ie rt o d u ra n t e la co m p ila ció n . En d ich o fich e ro cs c in s e rt a rá
a u t o m á t ica m e n t e la s ig u ie n t e in fo rm a ció n :

http://www.programacion.com/tutorial.csharp.21.html (12 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

❍ Op cio n e s d e co m p ila ció n u t iliza d a s .


❍ Ve rs ió n d e l co m p ila d o r, CLR y s is t e m a o p e ra t ivo u s a d o .
❍ Co p ia d e t o d o s lo s có d ig o s fu e n t e s co m p ila d o s . Co m o e s ló g ico , p a ra fa cilit a r la
co rre ció n a Micro s o ft s e re co m ie n d a e n via r e l p ro g ra m a m á s co m p a ct o p o s ib le e n e l
q u e s e p ro d u zca e l e rro r d e s cu b ie rt o .
❍ Me n s a je s d e s a lid a m o s t ra d o s d u ra n t e la co m p ila ció n .

Ap a rt e d e t o d a e s t a in fo rm a ció n in s e rt a d a a u t o m á t ica m e n t e p o r e l co m p ila d o r, d u ra n t e la g e n e ra ció n


d e l fich e ro d e e rro r t a m b ié n s e p e d irá a l u s u a rio q u e in d iq u e u n a p e q u e ñ a d e s crip ció n s o b re e l e rro r
d e t e ct a d o y có m o cre e q u e p o d ría s o lu cio n a rs e . Dich a in fo rm a ció n t a m b ié n s e rá a ñ a d id a d e m a n e ra
a u t o m á t ica a l fich e ro d e e rro r q u e s e cre e .

Un e je m p lo có m o g e n e ra r in fo rm a ció n re la t iva a u n e rro r ve ríd ico q u e s e p ro d u ce a l co m p ila r u n


p ro g ra m a error.cs co n la Be t a 1 d e l . NET S DK Fra m e wo rk e s :

csc error.cs /bugreport:ErrorUsing.cs

Tra s co n t e s t a r a la s p re g u n t a s q u e e l co m p ila d o r h a rá a l u s u a rio s o b re e l e rro r e n co n t ra d o , e l


co n t e n id o d e l fich e ro g e n e ra d o e s e l s ig u ie n t e :

### C# Compiler Defect Report, created 07/12/00 20:14:36


### Compiler version: 7.00.9030
### Common Language Runtime version: 1.00.2914.16
### Operating System: Windows NT 5.0.2195 Service Pack 2
### User Name: Administrador
### Compiler command line
csc.exe error.cs /bugreport:ErrorUsing.cs
### Source file: 'e:\c#\ej\error.cs'
using System;

public class R1:IDisposable


{
public static void Main()
{
using (R1 r1 = new R1())
{
}
}

public void Dispose()


{}
}
### Compiler output
error.cs(7,3): error CS1513: } expected
error.cs(7,26): error CS1002: ; expected
error.cs(12,9): error CS1518: Expected class, delegate, enum,
interface, or struct
error.cs(14,1): error CS1022: Type or namespace definition, or
end-of-file expected
### User description
No detecta la instruccion using

### User suggested correct behavior


Posiblemente no haya sido implementada en esta version del compilador

http://www.programacion.com/tutorial.csharp.21.html (13 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

Nó t e s e q u e a u n q u e e l e rro r d e t e ct a d o e n e l e je m p lo e s ve ríd ico , e n ve rs io n e s d e l co m p ila d o r


p o s t e rio re s a la Be t a 1 n o s e p ro d u ce p o rq u e ya fu e co rre g id o .

● / b a s e a d d re s s : Es t a o p ció n s ó lo t ie n e s e n t id o cu a n d o s e s o licit a la g e n e ra ció n d e u n a


lib re ría e in d ica cu á l e s la d ire cció n d e m e m o ria e n q u e s e p re fie re q u e é s t a s e ca rg u e
cu a n d o s e a e n la za d a d in á m ica m e n t e . Nó t e s e q u e s e h a d ich o lib re ría , p u e s s i e l fich e ro
g e n e ra d o e s d e cu a lq u ie r o t ro t ip o s e rá ig n o ra d a .

El va lo r q u e s e d é a e s t a o p ció n p u e d e in d ica rs e t a n t o e n h e xa d e cim a l co m o e n o ct a l o d e cim a l


s ig u ie n d o la s re g la s u s a d a s e n C# p a ra la e s crit u ra d e lit e ra le s e n t e ro s . S in e m b a rg o , h a y q u e t e n e r
e n cu e n t a q u e lo s b it s m e n o s s ig n ifica t ivo s d e e s t a d ire cció n p u e d e n s e r re d o n d e a d o s . Po r e je m p lo , s i
e s crib im o s :

csc fichero.cs /baseaddress:0x11110001

El co m p ila d o r t ra t a rá e s t a lla m a d a t a l y co m o s i s e le h u b ie s e p a s a d o :

csc fichero.cs /baseaddress:0x11110000

S i n o s e d a va lo r a e s t a o p ció n , la s lib re ría s s e in s t a la rá n e n e l á re a d e m e m o ria q u e s e e s t im e


co n ve n ie n t e e n ca d a im p le m e n t a ció n d e l CLR.

● / c o d e p a g e : Po r d e fe ct o e l co m p ila d o r a ce p t a fu e n t e s e s crit o s e n Un ico d e , UTF- 8 o u s a n d o


la p á g in a d e có d ig o s p o r d e fe ct o d e l s is t e m a o p e ra t ivo . S i s e d e s e a co m p ila r fu e n t e s
e s crit o s e n o t ra s p á g in a s d e có d ig o h a y q u e in d ica r co m o va lo r d e e s t a o p ció n e l
id e n t ifica d o r d e e lla .

Un u s o t íp ico d e e s t a o p ció n e s p e rm it ir co m p ila r fu e n t e s e s crit o s e n e s p a ñ o l co n u n e d it o r d e t e xt o s


d e MS - DOS ( co m o edit.com) , ca s o e n q u e h a y q u e d a rle e l va lo r 4 3 7 p a ra q u e a ce p t e lo s ca ra ct e re s
e s p e cia le s t a le s co m o a ce n t o s o e ñ e s .

/ u t f8 o u t p u t : S u in clu s ió n in d ica q u e e l co m p ila d o r h a d e m o s t ra r lo s m e n s a je s u s a n d o e l ju e g o d e


ca ra ct e re s UTF- 8 , lo q u e e s ú t il cu a n d o s e u t iliza n cie rt o s s is t e m a s o p e ra t ivo s in t e rn a cio n a le s e n lo s
q u e p o r d e fe ct o n o s e m u e s t re n co rre ct a m e n t e d ich o s m e n s a je s p o r la ve n t a n a d e co n s o la .

Pa ra p o d e r le e rla e n e s o s ca s o s s e re co m ie n d a u s a r e s t e fla g a l co m p ila r y re d irig ir la s a lid a a u n


fich e ro co m o m u e s t ra e l s ig u ie n t e e je m p lo d o n d e s e co m p ila A. cs re d irig ie n d o lo s m e n s a je s d e
co m p ila ció n a s a lid a . t xt y m o s t rá n d o lo s e n UTF- 8 :

csc A.cs /utf8output > salida.txt

● / h e lp ( / ? ) : Mu e s t ra u n m e n s a je d e a yu d a re s u m ie n d o cu á le s s o n la s o p cio n e s a d m it id a s
p o r e l co m p ila d o r y p a ra q u é s irve n . To d a o p ció n o fich e ro a co m p ila r e s p e cifica d o ju n t o
o p ció n s o n t o t a lm e n t e ig n o ra d o s .
● / n o lo g o : In d ica q u e n o s e d e s e a q u e a l e je cu t a r e l co m p ila d o r s e g e n e re e l m e n s a je q u e
in clu ye in fo rm a ció n s o b re la ve rs ió n d e l co m p ila d o r y e l co p yrig h t d e Micro s o ft s o b re e l
m is m o q u e p o r d e fe ct o s e m u e s t ra .

S u e le u s a rs e cu a n d o la co m p ila ció n s e s o licit a d e s d e u n a a p lica ció n o fich e ro d e p ro ce s a m ie n t o p o r


lo t e s , p u e s o cu lt a la e je cu ció n d e l co m p ila d o r a l u s u a rio y e llo p u e d e ve n ir b ie n p a ra e vit a r q u e é s t e
co n o zca có m o fu n cio n a la a p lica ció n o p a ra co n s e g u ir u n fu n cio n a m ie n t o m á s e le g a n t e y t ra n s p a re n t e
d e la m is m a .

Ac c e s o a l c o m p ila d o r d e s d e Vis u a l S t u d io . N ET

http://www.programacion.com/tutorial.csharp.21.html (14 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

Co m o s e e xp licó e n s u m o m e n t o e n e l Te m a 2 : In t ro d u cció n a C# , a la s o p cio n e s d e co m p ila ció n d e u n


p ro ye ct o s e a cce d e d e s d e VS . NET a t ra vé s d e la s p á g in a s d e p ro p ie d a d e s d e l m is m o , la s cu a le s t ie n e e l
a s p e ct o m o s t ra d o e n la I lu s t ra c ió n 9 y s e o b t ie n e n s e le ccio n a n d o e l p ro ye ct o e n e l S o lu t io n Ex p lo re r y
p u ls a n d o s o b re Vie w - > P ro p e rt y P a g e s e n e l m e n ú p rin cip ia l d e Vis u a l S t u d io .

Pa ra la m a yo ría d e o p cio n e s a d m it id a s p o r cs c. e xe s e in clu ye e n e s t a s p á g in a s co n t ro le s t a le s co m o ca ja s d e


t e xt o y lis t a s d e s p le g a b le s q u e p e rm it e n co n fig u ra rla s d e u n a m a n e ra vis u a l, có m o d a e in t u it iva . En la Ta b la
1 7 s e re s u m e e n o rd e n a lfa b é t ico cu á l e s e l co n t ro l q u e e n co n cre t o s e a s o cia e n e s t a s p á g in a s a ca d a
o p ció n :

Op c ió n Co n t ro l v is u a l
/ b a s e a d d re s s Co n fig u ra t io n Pro p e rt ie s - > Ad va n ce d - > Ba s e Ad d re s s
/ ch e cke d Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Ch e ck fo r Arit h m e t ic Ove rflo w/ Un d e rflo w
/ debug Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Ge n e ra t e De b u g g in g In fo rm a t io n
/ d e fin e Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Co n d it io n a l Co m p ila t io n Co n s t a n t s
/ doc Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > XML Do cu m e n t a t io n File
/ file a lig n Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > File Alig n m e n t
/ in cre m e n t a l Co n fig u ra t io n Pro p e rt ie s - > Ad va n ce d - > In cre m e n t a l Bu ild
/ m a in Co m m o n Pro p e rt ie s - > Ge n e ra l - > S t a rt u p Ob je ct
/ o p t im ize Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Op t im ize co d e
/ out Co m m o n Pro p e rt ie s - > Ge n e ra l - > As s e m b ly Na m e
/ t a rg e t Co m m o n Pro p e rt ie s - > Ge n e ra l - > Ou t p u t Typ e
/ u n s a fe Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Allo w u n s a fe co d e b lo cks
/ wa rn Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Wa rn in g Le ve l b lo cks
/ wa rn a s e rro r Co n fig u ra t io n Pro p e rt ie s - > Bu ild - > Tre a t Wa rn in g s As Erro rs
/ win 3 2 ico n Co m m o n Pro p e rt ie s - > Ge n e ra l - > Ap p lica t io n Ico n

Ta b la 1 7 : Co n t ro le s a s o cia d o s a o p cio n e s d e co m p ila ció n

http://www.programacion.com/tutorial.csharp.21.html (15 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

Co m o p u e d e o b s e rva r, d e s d e VS . NET n o e s p o s ib le a cce d e r a m u ch a s d e la s o p cio n e s d e l co m p ila d o r e n lín e a


d e co m a n d o s . En lo s ca s o s d e /codepage, /fullpaths, /lib, /help, /nologo, /recurse y
/utf8output e s t o e s ló g ico ya q u e s o n o p cio n e s q u e p ie rd e n s u s e n t id o d e s d e d e n t ro e n u n a in t e rfa z
g rá fica . Ha y o t ro s ca s o s e n q u e e llo s e d e b e a q u e s e o fre ce n d e s d e e l m e n ú p rin cip a l d e VS . NET o t ro s
m e ca n is m o s a lt e rn a t ivo s p a ra e s p e cifica rla s , co m o s o n lo s in d ica d o s e n la Ta b la 1 8 :

Op c ió n Me c a n is m o d e a c c e s o
/ b u g re p o rt He lp - > Cu s t o m e r Fe e d b a ck
/ re s o u rce S e le ccio n a r e l re cu rs o e n Pro je ct - > Ad d Exis t in g It e m
/ re fe re n ce S e le ccio n a r la re fe re n cia e n Pro je ct - > Ad d Re fe re n ce

Ta b la 1 8 : Acce s o a o p cio n e s fu e ra d e la s p á g in a s d e p ro p ie d a d e s

Fin a lm e n t e , q u e d a u n g ru p o d e o p cio n e s q u e n o d is p o n ib le s s im p le m e n t e p o rq u e la im p le m e n t a ció n d e


VS . NET ( a l m e n o s e n la Be t a 2 ) n o la s co n t e m p la , y s o n @, /linkresource, /nostdlib, /noconfig,
/nowarn y /win32res. En e s t e s e n t id o , m e n ció n a p a rt e m e re ce e l va lo r module d e /t, q u e t a m p o co
p u e d e u s a rs e e n t a n t o q u e VS . NET n o s o p o rt a e l t ra b a jo co n m ó d u lo s .

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.21.html (16 de 16) [20/10/2002 18:23:34]


Programación en castellano. El lenguaje de programación C#

Añ a d ir u n a d ire cció n | Bu s ca d o r | Cu rs o s | Art ícu lo s | Fo ro s | Fo rm a ció n

El le n g u a je d e p ro g ra m a c ió n Nuestras zonas

C#

En e s t a p á g in a :

● Do cu m e n t a ció n d e re fe re n cia
❍ Bib lio g ra fía
❍ In fo rm a ció n e n In t e rn e t s o b re C#
❍ Po rt a le s
❍ Gru p o s d e n o t icia s y lis t a s d e co rre o

D o c u m e n t a c ió n d e re fe re n c ia

Bib lio g ra fía

En e l m o m e n t o d e e s crib ir e s t a s lín e a s n o h a y d is p o n ib le n in g u n a o t ra b ib lio g ra fía d e ca lid a d s o b re


C# e s crit a e n ca s t e lla n o , s in o q u e t o d a la d is p o n ib le lo e s t á e n in g lé s .

En t re la s fu e n t e s d e in fo rm a ció n s o b re C# e n in g lé s ca b e d e s t a ca r e l d o cu m e n t o "C# La n g u a g e
S p e cifica t io n " e s crit o p o r An d e rs He jls b e rg , S co t t Wilt a m u t h y Pe t e r Go ld e q u e Micro s o ft h a re m it id o
a l ECMA p a ra la e s t a n d a riza ció n d e l le n g u a je . Es t e d o cu m e n t o in clu ye la e s p e cifica ció n co m p le t a d e l
m is m o y Micro s o ft p e rm it e d e s ca rg a rlo g ra t u it a m e n t e d e s d e la d ire cció n
h t t p : / / www. m s d n . m icro s o ft . co m / n e t / e cm a .

S in e m b a rg o , s i lo q u e b u s ca s o n lib ro s q u e e xp liq u e n e l le n g u a je co n a lg o m e n o s d e rig u ro s id a d


p e ro d e m a n e ra m u ch o m á s fá cil d e e n t e n d e r y a p lica r, e n t o n ce s p u e d e co n s u t la r la s ig u ie n t e
b ib lio g ra fía :

● "A p ro g ra m m e r's in t ro d u ct io n t o C# " e s crit o p o r Eric Gu n n e rs o n y p u b lica d o p o r


Ap re s s e n 2 0 0 0 .
● C# a n d t h e . NET Fra m e wo rk", e s crit o p o r An d re w Tro e ls e n y p u b lica d o p o r Ap re s s
en 2001
● "C# Es s e n t ia ls ", e s crit o p o r Be b Alb a h a ri, Pe t e r Dra yt o n y Bra n d Me rril y p u b lica d o
p o r O'Re illy e n 2 0 0 0 .
● "C# Pro g ra m m in g wit h t h e Pu b lic Be t a ", e s crit o p o r Bu rt o n Ha rve y, S im o n

http://www.programacion.com/tutorial.csharp.22.html (1 de 4) [20/10/2002 18:23:43]


Programación en castellano. El lenguaje de programación C#

Ro b in s o n , Ju lia n Te m p le m a n y Ka rli Wa t s o n y p u b lica d o p o r Wro x Pre s s e n 2 0 0 0 .


● "In s id e C# ", e s crit o p o r To m Arch e r y p u b lica d o p o r Micro s o ft e n 2 0 0 0
● "Pre s e n t in g C# ", e s crit o p o r Ch ris t o p h Wille y p u b lica d o p o r S a m s Pu b lis h in g e n
2000.
● "Pro fe s s io n a l C# ", e s crit o p o r S im o n Ro b in s o n , Bu rt Ha rve y, Cra ig McQu e e n ,
Ch ris t ia n Na g e l, Mo rg a n S kin n e r, Ja y Glyn n , Ka rli Wa t s o n , Ollie Co rn e s , Je ro d
Mo e m e ka y p u b lica d o p o r Wro x Pre s s e n 2 0 0 1 .
● "Pro g ra m m in g C# ", e s crit o p o r Je s s e Lib e rt y y p u b lica d o p o r O'Re illy e n 2 0 0 1

De e n t re t o d o s e s t o s lib ro s q u izá s e l p rin cip a lm e n t e re co m e n d a b le t ra s le e r e s t a o b ra p u e d a s e r


"Pro fe s s io n a l C# ", p u e s e s e l m á s m o d e rn o y a b a rca n u m e ro s o s co n ce p t o s s o b re la a p lica ció n d e
C# p a ra a cce d e r a la BCL.

Po r o t ra p a rt e , e n re la ció n co n lo s lib ro s p u b lica d o s e n 2 0 0 0 h a y q u e s e ñ a la r q u e fu e ro n p u b lica d o s


p a ra e l co m p ila d o r d e C# in clu id o e n la Be t a 1 d e l S DK, p o r lo q u e n o t ra t a n lo s a s p e ct o s n u e vo s
in t ro d u cid o s a p a rt ir d e la Be t a 2 y p u e d e q u e co n t e n g a n có d ig o d e e je m p lo q u e h a ya q u e d a d o
o b s o le t o y a ct u a le m e n t e n o fu n cio n e .

I n fo rm a c ió n e n I n t e rn e t s o b re C#

Au n q u e la b ib lio g ra fía p u b lica d a s o b re C# a l e s crib ir e s t a s lín e a s e s re la t iva m e n t e e s ca s a , n o o cu rre


lo m is m o co n la ca n t id a d d e m a t e ria l o n lin e d is p o n ib le , q u e ca d a ve z va in u n d a n d o m á s la Re d . En
e s t a s e cció n s e re co g e n lo s p rin cip a le s p o rt a le s , g ru p o s d e n o t icia s y lis t a s d e d is t rib u ció n d e d ica d o s
a l le n g u a je . S e g u ra m e n t e cu a n d o le a e s t a s lín e a s h a b rá n s u rg id o m u ch o s m á s , p u e d e u s a r la lis t a
o fre cid a p a ra e n co n t ra r e n la ce s a lo s n u e vo s a p a rt ir d e lo s q u e a q u í s e re co g e n .

P o rt a le s

S i b u s ca u n p o rt a l s o b re C# e s crit o e n ca s t e lla n o e l ú n ico q u e le p u e d o re co m e n d a r e s "El Rin có n e n


Es p a ñ o l d e C# " ( h t t p : / / t d g . ls i. u s . e s / ~ cs h a rp ) , q u e e s e l p rim e ro d e d ica d o a e s t e le n g u a je e s crit o e n
ca s t e lla n o . Ha s id o d e s a rro lla d o p o r p ro fe s o re s d e la Fa cu lt a d d e In fo rm á t ica y Es t a d ís t ica d e
S e villa , y e n t re lo s s e rvicio s q u e o fre ce ca b e d e s t a ca r s u s a p lica cio n e s d e e je m p lo , FAQ, s e m in a rio
"o n - lin e " y lis t a d e d is t rib u ció n d e co rre o .

S i n o le im p o rt a q u e e l p o rt a l e s t é e n in g lé s , e n t o n ce s e s d e o b lig a d a vis it a e l ". NET De ve lo p e rs


Ce n t e r" ( h t t p : / / www. m s d n . m icro s o ft . co m / n e t ) d e Micro s o ft , ya q u e a l s e r lo s cre a d o re s d e l C# y la
p la t a fo rm a . NET s u in fo rm a ció n s o b re lo s m is m o s s u e le s e r la m á s a m p lia , fia b le y a ct u a liza d a .
En t re lo s s e rvicio s q u e o fre ce ca b e d e s t a ca r la p o s ib ilid a d d e d e s ca rg a r g ra t u it a m e n t e e l . NET
Fra m e wo rk S DK y Vis u a l S t u d io . NET, s u s n u m e ro s o s víd e o s y a rt ícu lo s t é cn ico s , y s u s e je m p lo s d e
d e s a rro llo d e s o ft wa re p ro fe s io n a l d e ca lid a d u s a n d o e s t a s t e cn o lo g ía s .

Ap a rt e d e l p o rt a l d e Micro s o ft , o t ro s p o rt a le s d e d ica d o s a C# q u e p u e b la n la Re d s o n :

● "C# Co rn e r" ( h t t p : / / www. c- s h a rp co rn e r. co m )


● "C# He lp "( h t t p : / / www. cs h a rp h e lp . co m )
● "C# S t a t io n " ( h t t p : / / www. cs h a rp - s t a t io n . co m )
● "Co d e h o u n d C# " ( h t t p : / / www. co d e h o u n d . co m / cs h a rp )
● "cs h a rp in d e x. co m " ( h t t p : / / www. cs h a rp in d e x. co m )
● "De ve lo p e rs d e x" ( h t t p : / / www. d e ve lo p e rs d e x. co m / cs h a rp )
● ". NET Wire " ( h t t p : / / www. d o t n e t wire . co m )

http://www.programacion.com/tutorial.csharp.22.html (2 de 4) [20/10/2002 18:23:43]


Programación en castellano. El lenguaje de programación C#

Gru p o s d e n o t ic ia s y lis t a s d e c o rre o

Micro s o ft h a p u e s t a a d is p o s ició n d e lo s d e s a rro lla d o re s n u m e ro s o s g ru p o s d e n o t icia s d e d ica d o s a


re s o lve r d u d a s s o b re C# , . NET y Vis u a l S t u d io . NET. Lo s o fre cid o s e n ca s t e lla n o s o n :

● m icro s o ft . p u b lic. vs n e t
● m icro s o ft . p u b lic. e s . cs h a rp

Re s p e ct o a lo s p ro p o rcio n a d o s e n in g lé s , s e ñ a la r q u e a u n q u e a lg u n o s d e e llo s s e re co g e n e n la
o p ció n On lin e Co m m u n it y d e la p á g in a d e in icio d e VS . NET, la lis t a co m p le t a d ía a d ía cre ce ca d a
ve z m á s y e n e l m o m e n t o d e e s crib ir e s t a s lín e a s e ra :

● m icro s o ft . p u b lic. d o t n e t . a ca d e m ic
● m icro s o ft . p u b lic. d o t n e t . d is t rib u t e d _ a p p s
● m icro s o ft . p u b lic. d o t n e t . fa q s
● m icro s o ft . p u b lic. d o t n e t . g e n e ra l
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. a d o n e t
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. a s p n e t
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. a s p n e t . m o b ile
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. a s p n e t . we b s e rvice s
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. clr
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. co m p o n e n t _ s e rvice s
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. d o cu m e n t a t io n
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. in t e ro p
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. o d b cn e t
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. p e rfo m a n ce
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. re m o t in g
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. s d k
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. s e t u p
● m icro s o ft . p u b lic. d o t n e t . fra m e wo rk. win d o ws fo rm s
● m icro s o ft . p u b lic. d o t n e t . la n g u a g e s . cs h a rp
● m icro s o ft . p u b lic. d o t n e t . la n g u a g e s . js crip t
● m icro s o ft . p u b lic. d o t n e t . la n g u a g e s . vb
● m icro s o ft . p u b lic. d o t n e t . la n g u a g e s . vb . u p g ra d e
● m icro s o ft . p u b lic. d o t n e t . la n g u a g e s . vc
● m icro s o ft . p u b lic. d o t n e t . la n g u a g e s . vc. lib ra rie s
● m icro s o ft . p u b lic. d o t n e t . s a m p le s
● m icro s o ft . p u b lic. d o t n e t . s crip t in g
● m icro s o ft . p u b lic. d o t n e t . vs a
● m icro s o ft . p u b lic. d o t n e t . xm l
● m icro s o ft . p u b lic. vs n e t . d e b u g g in
● m icro s o ft . p u b lic. vs n e t . d o cu m e n t a t io n
● m icro s o ft . p u b lic. vs n e t . e n t e rp ris e . t o o ls
● m icro s o ft . p u b lic. vs n e t . fa q s
● m icro s o ft . p u b lic. vs n e t . g e n e ra l
● m icro s o ft . p u b lic. vs n e t . id e
● m icro s o ft . p u b lic. vs n e t . s a m p le s
● m icro s o ft . p u b lic. vs n e t . s e rvice p a cks
● m icro s o ft . p u b lic. vs n e t . s e t u p

http://www.programacion.com/tutorial.csharp.22.html (3 de 4) [20/10/2002 18:23:43]


Programación en castellano. El lenguaje de programación C#

● m icro s o ft . p u b lic. vs n e t . vis u a l_ s t u d io _ m o d e le r


● m icro s o ft . p u b lic. vs n e t . vs a
● m icro s o ft . p u b lic. vs n e t . vs ip
● m icro s o ft . p u b lic. vs n e t . vs s

En re a lid a d , d e e n t re t o d o s e s t o s g ru p o s d e n o t icia s s ó lo e s t á n e xclu s iva m e n t e d e d ica d o s a C#


m ic ro s o ft . p u b lic . e s y c s h a rp m ic ro s o ft . p u b lic . d o t n e t . la n g u a g e s . c s h a rp , p e ro a m e d id a q u e
va ya a d e n t ra n d o s e e n e l le n g u a je d e s cu b rirá q u e lo s d e d ica d o s a lo s d ife re n t e s a s p e ct o s d e . NET y
VS . NET t a m b ié n le re s u lt a rá n d e in ca lcu la b le u t ililid a d .

En lo re fe re n t e a lis t a s d e co rre o , s i b u s ca u n a lis t a e n ca s t e lla n o la m á s re co m e n d a b le e s la d e l


"Rin có n e n Es p a ñ o l d e C# " ( h t t p : / / t d g . ls i. u s . e s / cs h a rp ) a n t e s m e n cio n a d a ; m ie n t ra s q u e s i n o le
im p o rt a q u e e s t é n e n in g lé s , e n t o n ce s p u e d e co n s u lt a r la s o fre cid a s p o r "De ve lo p Me n t o r"
( h t t p : / / www. d is cu s s . d e ve lo p . co m )

Prin cip io Pá g in a
© 1 9 9 9 - 2 0 0 2 , Pro g ra m a ció n e n ca s t e lla n o , s . l.
Co n t a ct o - Da t o s le g a le s

http://www.programacion.com/tutorial.csharp.22.html (4 de 4) [20/10/2002 18:23:43]

También podría gustarte