You are on page 1of 28
‘Argentina: $590 (recacgo a interior $30 Microsoft Curso tedrico y practico de programacion Desarrollador : ay @ia Con toda la potencia ome de Visual Basic .NET y C# diel : tl La mejor forma de aprender vf sues a programar desde cero Basado en el programa Desarrollador Cinco Estrellas de Microsoft Visual Basic Funciones propias y primeros ejercicios practicos C# desde cero Sintaxis basica; sintaxis, derclase y funciones propias Re Sea DE NUESTROS NEWSLETTE! Pm) FLECTRONICO TODA LA MeN TECNOLOGIGO ACTUALIZADA ee ba WY ers eee nS) J ' — PS 51) 3.) HOPI oO eo 7e2 _ in L S i ' 1 op i ail aay ‘Seguinas en: [Gj wwfacebook.com/redusers €B rEAUSETS.COM fb rrttrecmrcases {iy wwwyoutube.com/redusersvideos Procedimientos y funciones Aprenderemos a utilizar herramientas que nos permitiran agilizar nuestra practica de programador. Cuando escribimos programas, normalmente nos encontramos con porciones de cédigo que se repiten. En estos casos, resulta una buena prictica escribitlas una sola vez y, luc~ go, referenciarlas en cada ocasi6n en que necesarias. En el mundo de la progeamacién estructurada, estas porciones de cédigo se de~ nominan procedimientos o funciones. Si bien la motivacién de ambos es la misma, tie- nen entre si semintica diferentes. Los proce- dimientos estin destinados a realizar tateas, que no necesiten devolver nada a quien las indic6 (por ejemplo, el resultado es imprimir algo en pantalla), en tanto que las funciones devuelven un valor a quien las llama (por ejemplo, realizar un calculo sobre la base de datos proporcionados y brindar el resultado). Procedimientos En Visual Basie .NET, los procedimientos se implementan usando la palabra clave Sub. Cada uno posee un nombre y un bloque de cédigo que sexi el c6digo por cjecutar cuan- do éste sea invocado, Fl blogue de cédigo se delimita por las palabras Sub y End Sub. Dentzo dal procedimicnto podemos escribie cualquier sentencia que necesitempspindlusoy Tamar a otros procedimientos. Un procedi- miento se llama, simplemente, escribiendo su nombre, De manera opeional, se puede utili- zat la palabra clave Call mas el Nombre- DelMetodo, pero no es obligatorio hacerlo (esto se mantiene asi por compatibilidad con versiones anteriores del lenguaje). Veamos tun ejemplo de procedimiento. Supongamos que estamos trabajando en una aplicacién de consola con varias salidas por pantalla y que queremos dividir las distintas salidas con una secuencia de 80 guiones, Para lograrlo, esctibimos un procedimiento que imprima los guiones y, luego, lo invoca- mos cada ver que sea necesatio: Sub Inprimircuiones() For i as Integer=t To a0 Console.trite(*-") Next End Sub Luego, en el cédigo de la aplicacién, podemos usar este procedimiento cuantas veces preci- semos, escribiendo las siguientes lin« Iaprinircuiones() Congode.tiexteLine (debe) Coneole.tiesteline(haber) Inprinircuiones() Console.wirsteLine(saldo) InprinirGuiones () OCALA PrECediMichtO PSsBOUn nombre y un bloque de cédigo que sera el que se deba ejecutar cuando éste sea invocado. 49 Los parametros permiten que un procedimiento se comporte cada vez de manera diferente. Parametros Los procedimientos como al visto anterior mente son titles, pero muchas veces necesita- mos que uno de ellos haga distintas cosas de- pendiendo del contexto donde se lo esté utili: zando. Por ejemplo, siguiendo con el procedi- miento ImprimirGuiones, quizés haya situacio- nes en las que tengamos que imprimir los guiones, peto no exactamente 80. Entonces surge un planteo interesante: zeseribimos wn nuevo procedimiento que imprima la cantidad de guiones necesaria?, 0 modificamos el que ya tenemos para indicar cudntos guiones que- remos imprimir? Obviamente, la primera alter- nativa no es la mejor, ya que estarfamos dupli- cando cédigo y, ademas, solucionando un caso particular, que luego quiz4 no nos sirva otra ver y tengamos que escribir otro método mas La segunda alternativa, en cambio, es practica ble y nos permitira ahorrar cédigo. La herramienta con la que contamos para indi carle al procedimiento eudntos guiones quere mos imprimir son los parimetsos. Un paréme file ///d:Desarrollo/Pruebas/CursoNet/Curso/Curso/bin/Debu| FIGURA 001 | Mediante el uso de pardmetros, podemos varlar el comportamiento de los procedimientos. 50 to es un valor que podemos pasarle al proce dimiento, y que éste recibe como si fuese una ariable. Al ver el parimetro como una varia- ble, el procedimiento puede utilizarto para alte rar su.comportamiento, Modlifiquemos el procedimiento ImprimirGuio- nes para que acepre un parimetro que le indique la cantidad de puiones que se deben imprimir: ‘Sub InprinirGuiones(ayval cantidad As Inte For 4 As Integer=1 To cantidad Console.Write("-") Noxt End sup En este ejemplo, el procedimiento recibe un pa rimetto que representa la cantidad de caracteres por imprimis, y lo utiliza como limite superior del ciclo For. Modifiquemos el ejemplo de uso para imprimir separadores de distinta longitud: ImprimirGuiones(80) console.linitet ine (debe) Console.liniteL ine (haber) Inmprimirguiones (40) iritoLino(saldo) Imprimirgutones (so) console, Parametros por valor y por referencia Visual Basic NET brinda dos formas de pasaje de parimettos a un procedimiento 0 fancién: por valot o por referencia, Cuando se pasa un parmetro por valor, lo que se le pasa al proce- Sid dimiento es una copia del valor origin procedimiento modifica el valor del parimetro, solo afectaré ala copia. Cuando se pasa. un v2 I+ por referencia, lo que en sealidad se esta pat sando es la direccién de memoria donde se al- macena el valor, Si se pasa un parimetro por referencia, cualquier modificacién que el proce- dimiento o funcién haga, se hari sobre el valor original, ya que se tiene la direccién de memoria donde esti, Los parimettos por referencia son una herramienta para hacer que un procedi- miento se comunique con quien lo invoos, da- do que puede devolver valores mediante los pa rimetros por referencia (también conocidos co- mo parimettos de salida) En Visual Basic NET los parimetros por va Jor se especifican mediante el modificador ByVal, micateas que aquellos por referencia son especificados a través del modificador ByRef, Podemos ilustrar este concepto con un cjemplo simple. Supongamos que quere~ mos esctibir un procedimiento al que le pase- mos un nombre de persona, y nos devuelva, en un parimetro, un saludo para ella, Esto se hace de la siguiente manera: ‘Sub Salucar(ByVal nonbre As String, ByRer saludo As String) Saludo = “Hola " & nonbre Ena sub Los parametros permiten devolver valores a quien llama a un procedimiento o funcién, pero no se recomienda su uso. En este caso, como el parimetro “saludo” es por feferencia, al ser modificado dentro del pro- cedimiento, también cambiata su valor original Funciones Las fanciones son bloques de cédigo que siempre devuelven un valor a quien Tas Tla- ma, En Visual Basic NET las funciones se definen mediante la palabra clave Funetion. Ademés, luego de Ia lista de parametros (si Tipos de parametros Procedimiento Sub A (ByVal (Al, End Sub 004 Llamador Dim C, D as String A(C.D) 003 002 ool FIGURA 002 | Cuando se pasa un parimetro por valor, en la pla se coloca una copia, fen tanto que si es por referencia, se coloca la direccién de memoria del valor original 51 Hay que tener en cuenta que los parametros opcionales deben estar siempre al final de la lista de parametros. cs que tiene), se debe indicar el tipo de dato del valor devuelto, mediante la palabra As seguida de un nombre de tipo. Orra diferen- cia importante con los procedimicntos es que las fanciones deben incluir la instrue- cién Return al menos una vez. Esta se en- carga, bisicamente, de devolver el valor de Ja funcién al lamador, Veamos un ejemplo para ilustear el uso y la eseritura de las fun- ciones. Supongamos que queremos escribir tuna funcién que reciba dos valores y devuel- va la diferencia entre el mayor y el menor de ellos. Fl eddigo sera el siguiente: Function Sunaéjeaplo(BvWal @ As Intener, Byval b as Integer) As Integer Hf a> b Then Return a — 6 cise Return ba End Function Como podemos ver, en este ejemplo la fun- cién recibe dos parimetros de tipo Integer eens use a eae uae e ay OS en a ok a CORR at er Sa acsouN cig rege del Return; de lo contrario, nunca se ejecutara Tee Rete) 52 y devuelve un valor del mismo tipo. Tam- bién podemos ver que hay dos instrucciones Return. Es importante saber que podemos usar todas las instrucciones Return que qu ramos 0 necesitemos, pero debemos tener siempre, por lo menos, una. Pardmetros opcionales ‘A veces ocusre que ya tenemos un procedi- miento escrito y se nos presenta una situa- i6n en la que puede servienos, pero nece tasfamos pasarle un parimetto mas para re- solver ese caso en particular. El problema es que deberemos buscar todos los lugares donde utilizamos el procedimiento para agrepar cl parimetro en la llamada. Ademis, como el auevo parimetro se usa para resol- ver un problema que antes no teniamos, no asatle. Para resolver es- nos da la posibilidad sabremos qué valor to, Visual Basic NE de crear parimetros opciona necesario pasar. Para declarar un parimetro como opcional, recurtimos ala palabra clave Optional, pero hay que tener en cuenta que los parimetzos opcionales deben estar siempre al final de la lista de parimetros. Bs que si queremos agregar un parimetro més, éste deberé ser también opcional o insertar~ se antes del primero de este tipo. Para termi nat de comprender bien cémo hay que utili- zarlo, veamos un breve ejemplo referido al uso de parimetros opcionales: que no es o es importante, por- Sub Procedintento(OvVel @ As Integer, Ontione! byval b as Integer) PFreser Meyer, te eramr9 Ot. CO End Sub “Ejomplo de uso: Procedimienta(3,5) Procediniento(3) WITT SNS Sintaxis de clases Los siguientes constructores nos permitiran escribir aplicaciones orientadas a objetos desde Visual Basic invic NE soporte completo para Una de las grandes diferenci ménticas entre Visual es que VBNET brin programacién orientada a objetos. Si bien en su versi6n 6 intentd incluir soporte de orientacién a sas y se objetos, recién con la legada de NET ésta se hi- zo mis s6lida y formal. A continuaci6n, veremos Jos constructores que oftece Visual Basic NET para escribir aplicaciones orientadas a objetos. Creacién de clases Los dos conceptos mas importantes y usados en la programacién orientada a objetos son las clases y los objetos: + Las clases son abstracciones de objetos de la realidad que se quieren modelar. + Los objetos son instancias particulares de las clases; cada uno pertenece a una clase (agru pados por propiedades comunes) pero tiene identidad propia. La definicién de una clase esti comprendida por Ja asignacidin de un nombte de clase utilizado pa 1 agrupar sus métodos y propiedades. Fin Visual Basic NE'T, la forma de definir una clase es a tra- y End Class vés de las palabras clave Class (Chass tombrebeLaciase Aqui van los nétodos y propiededes Eng Class Todo el cédigo (métodos o propiedades con diferentes modificadores de aleance) sera par- y su predecesor Visual Basic .NET tiene soporte completo para programacién orientada a objetos. te de la clase y est do por sus instancias. Las clases son conside- radas como tipos de datos, en el sentido de que desde el punto de vista sintictico, las ins- tancias son variables cuyo tipo de dato es la clase a la que pert Para crear una instancia de una clase, debe ‘mos definir el objeto como si fuese una varia- bie, utilizando la palabra clave Dim. Sin embar- 20. diferencia de los tipos basicos, para usar un objeto, ademas de declararlo, es preciso Teen et ae ee Cina eee Se ee Cae San ee aU ao oe EP etn eee es eon Public: Todo lo definido como Public sera acce- A ERS ee Rea Re cea ace Ceres CMe eet} GeO I Ceo sibles dent Coens Gree OR aOR Pe eae Lea Cue s que hereden de ella Cees urea tec c 53 54 En Visual Basic .NET podemos crear variables de instancia tal como si fuesen variables comunes. tear Ja instancia, utilizando la palabra seservada New, de esta manera im objeto As Clase ‘Oefininos el objeto objeto = New Clase() ‘Cresnos 1a instancis Seménticamente, cl operador New reserva un espacio en memoria para guardar el nuevo obje~ to y llamar a un método especial de la clase, de nominado Constructor. “Toda clase hereda autométicamente de una clase dd framework NE‘T Hamada Object, que tiene un constructor utiizado en la mayoria de Tos casos, Sin embargo, cuando definimos una clase, tal vez alguna accién interna a ella al momento de etear una instancia, Para hacerlo, de- finimos un constructor propio, usando la palabra clave New como nombte de método, y cuando creemos una nueva instancia de un objeto de cla- se Fjemplo, se invocari el método New creado: necesitemos realizai less Ejenplo ‘sub Hew’) “Aqui podenos hacer alguna accién Eng sub Variables de/instancia Un objeto puede contencr variables que deter- minen su estado. Fin Visual Basic NET pode- mos crear variables de instancia tal como si fue sen variables comunes, con la diferencia de que podemos reemplazar la palabra clave Dim por un modificador de alcance. Si utiizamos Dim, la variable tendré un aleance privado. Supongamos que estamos modelando cuentas bancarias. Una cuenta bancaria tiene un saldo, que podemos mantener como variable de ins- tancia, de la siguiente forma: Class CuentaBancaria Private stldo Ae Oouble End Chass En el ejemplo, la variable saldo es una variable de instancia y, en este caso, ¢s privada a la clase. Propiedades Los objetos tienen propiedades. Por ejemplo, si estamos modclando figuras geométricas, po- demos identificar propiedades tales como la cantidad de lados y la Iongitud de cada uno de los. En una elase, debemos modelar las pro- piedades. Al hacerlo, estamos diciendo que las instancias de la clase contarin con esas propie~ dades, pero atin no les damos valor. Luego, cuando creamos instancias, cada una tendri ‘sus propios valores para las propiedades. En Visual Basic .NET, las propiedades de las clases se definen utilizando la palabra clave Property. A esta altura, el lector pue~ de pensar que las propiedades y las variables de instancia son lo mismo, pero no es ast La diferencia esta en que, al escribir una propiedad, podemos escribir cédigo pasa cuando ésta recibe el valor y para cuando al- guicn consulta ¢l valor, con Jo cual podte: mos hacer validaciones 0 calculos. Ademas, vung de los objetivos de la programacién ‘orientada a objetos es lograr un alto grado, de encapsulamiento para faeilitar el manteni- miento del cédigo. Se entiende por encapsu- Iamiento cl hecho de ocultar la implementa cién real de partes de la clase a quien la usa. Para ilustrar el uso de propiedades, suponga- ‘mos que queremos que quien usa la clase En Visual Basic .NET, las CuentaBaneatia pueda conocer y modificar el A saldo, que actualmente esti como una variable propledades de las clases se privada de instancia. Para esto, debemos escri- definen utilizando la palabra bir una propiedad con alcance piiblico que de clave Property. vuelve y asigne valor a la variable de instancia. El c6digo, entonces, quedara asit End Property Stas GuentaBancaria end class Private _saldo As Double Analicemos un poco este cédigo de ejemplo. Public Property Saldo As Double Las palabras Public Property Saldo As oct Double indican que se esta definiendo una Return _saldo propiedad piblica llamada en este caso “Sal- End Get do”, de tipo Double. A continuacién, viene ‘Set(SyVal value As Double) Jo que se denomina getter, que es la porcién aldo = value de cédigo que se ejecutara cuando alguien lea End set el valor de la propiedad. Invocar el setter y el getter Con Coma ‘Dim evensa As CuentaBancaria Ss nao New cuenta = New CueneaBianearia() Ed So tse As Oovble cuenta Sado = 1000 Publ Proper aldo As Double Pease Set pl value As Double) Double a Sad eg ees end Ser xe owen ldo na Gee End Property Ene Cues @ Cuando creamos una instancia de clase, se ejecuta el método New, ‘mado Constructor. @ Cuando asigramos valor a a propiedad se invoca el setter de la clase El pardmetro del setter recibe aucométicamente el valor que se encuentra ala derecha del operador de aignacin. @ Cuando censutanronel valoh de ypropledsdisednvoanlelgeeeraus. |i] OC Spot.com.ar acta como una funcién devolviendo el valor de la propiedad. FIGURA 003 | Cuando alguien lee el valor de la propiedad, se invoca el getter: ¥ cuando se asigna un valor, se invoca el setter 55 56 Esta porcidn de eédigo se comporta como tuna funcién, que debe tener, al menos, una instruecién Return para devolver el valor de la propiedad. De manera similar, sigue una porcién de c6cli- go llamada setter, que indica el cédigo por ejecutar cuando alguien asigne valor a la pro- piedad. Fl setter debe tener un parimetto del mismo tipo de la propiedad. Desde el lado del cliente de Ia clase, el acceso ala propiedad es totalmente transparente y se puede ver como si fuese una variable de ins- tancia normal: Dim cuenta As CuentaBancaria cuenta * New Guentabancaria() cuenta.saldo = 1000 ‘console. WriteLine cventa.Saldo) Las propiedades no siempre deben tener un getter y un setter, tes de la clase s6lo conozcan el valor de la propiedad pero no puedan modificarlo, po- demos hacerla de slo lectura, Para lograrlo, agregamos el modificador Readonly antes de la palabra Property y, ademas, omitimos, cl setter. Para ilustrar i queremos que los elien- te caso, modificamos la clase CuentaBancaria para no guardar el saldo en una variable de instancia, sino que queremos calcularlo como la diferencia entre el haber y el debe de la cuenta, que son va- tiables de instancia, Ademas, no queremos que el saldo sea modificado. Los métodos se,escriben.como. cualquier procedimiento 0 funcidn, y su visibilidad depende de los modificadores de alcance. “Ha Lainica forina de me ‘Nuestra clase quedari asi cass CuentaBancaria Private _debe, + ber As Double Public Reaconly Property Salda As Double oot Return haber - End Get debe End Property End Chass En el ejemplo, el getter se ocupa de hacer el cileulo del saldo y de devolverlo como valor de la propiedad. Como una propiedad puede ser de sélo lectura, también puede ser de slo escritura, mediante el modificador Wri- tconly y omitiendo el getter: Asi, el cliente de la clase podré asignarle valores a la pro- piedad, pero no podea consultarla, Métodos Los objetos se caracterizan por su estado y por su comportamiento. Bl estado esti da- do por las propiedades y variables de i tancia, mientras que el comportamiento es- ti dado por los métodos. Los métodos son los procedimientos y funciones que un ob- jeto puede realizar y que pueden modificar su estado. En Visual Basic NET los méto. dos se eseriben como cualquier procedi miento fancién, y su visibilidad depende de los modificadores de alcance empleados. Continuando con la clase CuentaBancaria que hemos definido, ya que el saldo nos ha guedado como una propiedad de sélo lecru- leading diante depésitos y extracciones, que serin sendos métodos de la clase y que cambiarin el valor de las vatiables de instancia (_debe y haber). Fl cédigo es el siguiente. ‘lass CuentaBancaria tiebe, haber As Double Priva Public Readonly Property Saldo As Double eet Return haber - _debe End Get End Property Public Sub Depositar(nonte AS Double) haber = haber + monte End sub Public Sub Extraer(nonto As Double) _lebe = debe + nonto End Sub End Class Herencia Una de las caracteristicas mis titles e interesan- tes de la programacién orientada a objetos es la reutilizacién de cédigo mediante la herencia. La herencia permite especificar una relacin entre dos clases, mediante la cual la clase he- redera recibe los atributos y el comportamien- to de su clase padre. La herencia puede ser vista como una relacién “es un”. Por ejemplo, un tridngulo es una figura, un cuadrado es una figura; por lo tanto, podemos decir que el triangulo y el cuadrado heredan de figura. En Visual Basic NET la herencia se especifica usilizando Ia palabra clave Inherits, seguida del nombre de la clase de la que se hereda. Para continuar con el ejemplo de la figura geo- méirica, podemos escribir el siguiente eédigo. En este ejemplo, estamos especificando que la chase Triangulo hereda de la clase Figura Public Class Figura Public Lados As Integer End Class Public Class Teiangulo Inherits Figura *Gbdigo de 1a clase tridngulo End Class Jerarquia de objetos Cuadrado rapect FIGURA 004 | Mediante la herencia se establecen jerarquias de objetos, {que pueden verse grificamente mediante un Arbol similar a los Arboles genealégicos. g27Racemlum.blogspot.com.ar 58 LA HERENCIA PUEDE SER VISTA COMO UNA RELACION “ES UN”. POR EJEMPLO, UN TRIANGULO ES UNA FIGURA, UN CUADRADO ES UNA FIGURA; POR LO TANTO, PODEMOS DECIR QUE EL TRIANGULO Y EL CUADRADO HEREDAN DE FIGURAS. También podemos decir que la clase Trian- gulo es una “subclase” de Figura, Como ‘Triangulo hereda de Figusa, contiene tam- bién el atriburo Lados, con lo cual ya hemos logrado reutilizar parte del cédigo. ‘creamos una instancia de la clase Triangu- lo, podremos escribir lo siguiente: Dim mitriangulo As New Triangulo() miTrianguio-Lados = 3 Redefinicisn de métodos La herencia no seria muy valiosa si cada cla- se derivada quedara atada al comportamien- to de la clase padee. En cualquier lenguaje orientado a objetos, una clase hija debe po- der redefinir el comportamiento de su pa- dre, para adaptarlo a sus propias necesidades y caracteristicas. En Visual Basic NET la forma de redefinir y reseribir métodos es mediante la palabra clave Overrides, pero para que un método pueda ser redefinido, en la clase base debe contenet la palabra Overridable (que se puede escribir). La técnica consiste en identificar aquellos métodos que clases hijas y colocarles la palabra cave Overtidable, Luegoy cada chase hija puede redefinir estos métodos (no es obligatorio hacerlo), proveyendo el cddigo necesario pa- ra actuar de acuerdo con sus necesidades Para ilustrar este concepto, imaginemos que tenemos una clase Mamifero con un método Hamado EmitirSonido. Como el sonido que se emita dependeri de cada tipo de mamifero en particular, podemos hacer que cada clase deri- vada tenga su propia implementacién del mé- todo, imprimiendo en pantalla la onomatope- ya del sonido, Vamos a verlo en cédigo: Public Class Manitero Public Overridable Sub EnitirSonido() end ub End Class Public Class Perro Innersts uanstero Public Overrides Sub EnitirSoniéo() Console.Westeline(“Guau_") nd sup End Chass Publi Class Gato Innorate wanitero Public Overrides Sub Enitirsonido() Console.writeLine(“Miau.") End sub End Class Ejercicios Antes de pasar a algunos ejercicios resueltos pata afirmar los conceptos estudiados, veamos tuna serie de instrucciones y herramientas que FIGURA 005 | Para crear lun nuevo proyecto | wns de consol, elegimos Ia plantila correspondiente a ‘cuandoVVisual Seudio | a a3 3 - sgn nono mast “on Aplicaciones de consola Para los ejercicios, vamos a hacer unas senci- Ilas aplicaciones de consola, Fistas son peque- fos programas con una interfax. muy simple (sin ventanas), muy similar aun programa de DOS, pero basadas en la consola del sistema operativo Windows 2000 o superior. Para crear una aplicacién de consola con ‘Visual Studio 2005, debemos ir al meni Ar- chivo/Nuevo/Proyecto. Al hacerlo, se desple: ‘gard una ventana donde tenemos que elegir el ti- po de proyecto que queremos hacer, que seri “Aplicacién de Consola”. Por tltimo, en la parte inferior de esta ventana, ingresamos el nombre que le quetemos dar a nuestro proyecto, La clase Console BI framework NET nos prove de una clase llamada Console, con métodos para acceder Ja consola en este tipo de aplicaciones. Los dos métodos que mas vamos a usar son WriteLine y ReadLine. Fl primero nos per mite escribir mensajev GHA Gonsoll, ienttakS E que el segundo sitve para leer una cadena de texto que el usuario ingres6 en ella, En algunos cjercicios, necesitaremos intexpretar 1 texto leido con el método ReadLine como un angimero entero, pata lo cual utilizaremos el mé- todo Parse del tipo de dato Integer, haciendo Integer.Parse. Fiste método recibe una cadena de texto y devuelve el valor numérico adecuado, 6 dispara una excepcion si el texto no corres- ponde a un entero vilido. El método Main ‘Toda aplicacién de consola debe tener un método llamado Main, que es el punto de entrada de la aplicacién. Al momento de eje- cutar una aplicacién de consola, el primer método que se ejecuta es Main; es decir que ahi debemos colocar todo el cédigo y las Ila- madas que necesitemos hacer sll comienzo de a aplicacién. Al crear una nueva aplicacién de consola con Visual Studio 2005, automiti camente se ctea un método Main vacio, para que podamos empezar a trabajar. re eat ed eee Se ad ee cee ea ee a eee OA es Cee NN eeu ere ee ee ae ue Rcd Petre ecu ge Ee eect 59 Ejercicios practicos A continuacién, desarrol mos Ic en los que aplicar Veamos nuestro primer ejemplo utilizando el entorno de Visual Basic. En este caso, vamos a escribir u lla los mumeros impares entre el 1 y el 20, usando un ciclo For pero sin usar Step. Para aplicacién que muestre por panta realizar este ejercicio, vamos a escribir un ciclo For que cuente desde 1 hasta 20, y como no podemos usar el Step para ir de dos en dos so- bre los niimeros impares, vamos a usar un If para determinar si el valor de la variable conta. dora del For es par o impar. Como todos los iniimetos pares son divisibles por 2, para saber si un niimero es impar, podemos preguntar si no es divisible por 2; es decir, si el resto de di- vidielo por 2 es 1 ‘Vayamos entonces al cédiga, Dentro del méto, do Main creado cuando generamos el proyecto con Visual Studio, escribimos el eédigo: Dim 4 As Integer For i= To 20 Console.tiriteLine(i) ena If exe Recordemos que cl operador Mod devuelve el resto de dividis el primer operando por el Console.ReadKéy() ‘hard queel | programa se quede esperando la presion de una tecla. 1cep ndidos segundo (con divisién entera, por supuesto) Al ejecutar la aplicacién (presionando ), veremos que se ejecuta pero se cierra inme- diatamente, sin que aleancemos a ver I sultados. Esto es asi porque el IDE crea la consola para ejecutar la aplicacién, y cuando ésta termina, la consola se cierra en forma automitica, Para evitarlo, y poder ver la salida de nuestro programa, agregamos una llamada a Console.ReadKey() luego de la palabra Neat. Esto hard que el programa se quede esperando la presién de una tecla Si presionamos cualquiera, Ia aplicaci6n ter minard, pero si ejecutamos la aplicacién, vere- mos la consola con los miimeros impares en. tre el 1 y el 19. Vemos cémo Ia aplicacién de consola se queda en espera, mostrando los resultados obtenidos. El mes correspondiente ‘Veamos Sito ejemplo. Fin este caso, Vamos res. cribir una aplicacién que pida un niimero de mes y mues In operacidn hasta que el usuario ingrese un cero fe el nombre correspondiente. Repetimos como ntimero de mes. Para concretar este ejercicio, debemos wilizar dos de las estructuras de control que hemos aprendido: While para repetir hasta que el usuario ingrese un cero, y Select Case para seleccionar el nombre del mes segtin el niime- 10 ingresado. En este ejercicio necesitamos usar el método ReadLine de la clase Console, para leer cl valor ingresado por el usuatio y asignarlo a una variable de tipo entero. En una nueva aplicacién de consola, agregamos el si guiente cédigo dentro del método Main: Din wes As Integer = + Dim nonbreves As String =" Wnite nes <> 0 Console.Write(“Ingrese el ninero de me ines = Console ReadLine() SeESE La Select Case m case 1 noubraties = “Enero” case 2 osbraties = “Febrero” case 9 nonbreties = “Marzo” case 4 owbreties = “abril case § nowbroties = “Mayo” case 6 nowbreties = “Junio” case 7 nonbresies = “Julio” case 8 owbreties = “Agosto” case 9 Roaaraaa SI SeCameae om www.red nonbreties = “Octubre” case 11 nonbreties = “Novienbre* case 12 RIT rnombreties = *Dicienore* End select, Console-WriteLing(*El nes ingresado 5 (0)", nonbreties) end If End White Al final, se usa el método WriteLine, que no habiamos empleado ain, con un parimetro adicional al texto que queremos imprimir, Es- ta sintaxis implica que el texto {0} se reem- plazara por el valor del segundo parametro dentro de la cadena por imprimit. Si tenemos otto valor que quetemos imprimir, podemos. agregar el parimetro y referenciarlo como {1} dentro de la cadena, Ahora veamos una variante del ejercicio ante- riot, escribiendo una funcién que devuelva el nombre del mes que se le pasa como parime- tro, Simplemente, debemos crear una funcién de tipo String, con un parimetzo por valor y de tipo Integer, colocar dentro de ella el Se- lect Case que escribimos en el ejercicio ante- ior y reemplazar el Select Case por el llama do a la funcién, El encabezado de la funcién puede ser éste: Function Obtenerwombrelies(ByvaL mes AS Integer) As String No debemos olvidarnos de colocar fa instruccién, Return al final de la funcién, porque, de no ha- cerlo, la funcién devolvers una cadena vacta. Podemos asighar un valor © una variable a otra, sin hacer la conversion explicita de tipos. Reemplazando el Select por la llamada a la fun- «én, cl cédigo del procedimiento Main queda: La forma mas sencilla de agregar una nueva clase es utilizando la plantilla que nos brinda Visual Studio. sub aint) im mes As Integer = 1 Dim nonbreties As string = Wnile mes <> 0 Console.tirite(“Ingrese el nimero de wes: “) La forma més sencilla de agregar una nueva mes = Console.Readtine() ‘clase es utilizando la plantilla que nos brinda 1f mes <> 0 Then ‘Visual Studio, Para esto, basta con hacer clic ronbreltes = Obtenertonbreties (nes) con el botén derecho sobre el icono de pro- Console .irseLine “EL 0 yecto en el Fxplorador de Soluciones, seleccio- es (0}", nonbrottes) nar la opcién Apregar y, luego, Clase. Visual end Tf Studio nos pediri que escribamos el nombre End white de la clase, y después de aceptar, agregar un Consote.feackey() nuevo archivo al proyecto, con la definicién End sub (aunque vacia por ahora) de la nueva clase: Public Class Fraccion End class FIGURA 007 | Reemplazando el Select Case por una funcién, nuestro programa se sigue comportando coma debe, pero el cédigo es mis claro. Numeros fraccionarios En este caso, veremos cémo crear una clase para representar ntimeros fraccionarios. La cla- se deberi tener dasiyariables de-inselhi-h(pti © Si repagirads losironteptos aprendidot sobre vadas) para mantener el valor del numerador y _creacién de clases, recordaremos que la pala- del denominador de la fraccién, ademas de bra clave fundamental aqui es Class. sendas propiedades para hacer puiblicas las va-__A continuacién, debemos agregar las variables riables de instancia de instancia para cl numerador y el denominador, FIGURA 008 | Visual Seudio nos brinda ‘una plantila para agregar una nueva clase. RIT ademas de las propiedades para exponerla blicamente. En este caso, s6lo mostraremos cémo escribir el cédigo para el numerador, y Para asociar variables con propiedades podemos nombrarlas igual, colocando un guién al nombre de la variable. el lector deber completar el ejercicio agregan. do el denominador: Hasta ahora, €l cédigo de la clase queda de este modo: Public Glass Fraccion ; —— se FraccionConConsola tiene una propiedad lla- = Z ‘mada Numerador y otra llamada Denominador. Lo que nos queda por hacer, entonces, es Public Property Numerador() As Integer crear el constructor como pide el enunciado oot del ejercicio, Recordemos que el constructor poturn _runerador : es un método especial llamado New: End cet Set(ByVal value As Integer) _nunerador = value End set End Property End Class Ahora bien, tratemos de crear una nueva clase para representar ntimeros fraccionasios, como la del ejercicio anterior, y que tenga un cons- tructor que pida al usuario que ingrese en la consola los valores para el numerador y el de nominador. Para cumplir con este objetivo, va- mos a escribir realmente muy poco cédigo, ya que usaremos la herencia para aprovechar la clase escrita en el Bjercicio 4. Con Visual Stu dio creamos una nueva clase llamada Fraccion ConConsola y la hacemos heredat de la clase Fraccion, mediante la palabra clave Inherits: Public Class Fracctonconconsola Inherits Fraccion End Class Con esto, como vimos antes, estamos heredan- do las caracteisticas (propiedades y comporta miento) de la clase Fraccion, es decie que la ea CeO ee ease Re CCE e a tate ic Re aot ra que devuelva el valor real de la fraccién (la divi- See eee Ret pas cacy) eee: een a Seca Mc atc de divisi6n por 0 al usar la propiedad definida en el Det ete eee ee We Ce Re OC ey Doce toe ea Cou arn ie On ee) COCs eC ayuda, el setter de la propiedad puede contener oe a ere eee nd Funcion) llamado Multipli- Poe ey Sere) rec oon Cac a Ci Con nce Son Toe ets Dee me ete a Geer ec eae a CORT ara Deed et Cae ee) Conor es ractica practica bene ea a Mea RoE Pa CR GEC aN on ee atc: ome CT Ute aC Eh soa elon a Con) Ree esate rt eae ere ere eae ts se Obrero para que muestre en la consola el Cae CCUM co a Res eke Pee ese Ue Ejercicio 5:Siguiendo con el Ejercicio 4, en e! JB modulo donde esta el método Main, escribir un De ee cs ac Roe ao Mt Wc ceca Cone ec ete eta Me Norco UMS eM a Re Ole bel ae clase Gerente, e invocar el método MostrarTra- boo CC lo ee eal el ee eee ee eae eee On ue org) Ejercicio 6: Redefinir el método ToString de la re arto rie Rete Ma Men es iter | Boer ere aren crc) Pca Re el) RCL las demas clases heredan por defecto (aun- FB que no se haga explicitamente mediante la CAEN eo uae Rue ert ete ne eke eRe an eee} Nombre y escribir la siguiente linea: Console.vriteLine(obrerot) eee ec Cuba uci ene cs Coorong tui scot Escribamos el cédigo del constructor pa 1a pedir los valores: sub few() Console.Weite(“Ingrese €1 numerador: *) Nunerador = Console.Readline() console. wrste( “Ingres 1. cenominador: *) Denaminador jonsole.ReadLine() End sub Asignamos valor a las variables de instancia mediante las propiedades porque las variables de instancia estan como privadas, y con ese alcance sdlo la clase que las contiene puede acceder a ellas. Lo que estamos haciendo en el eonstrue- les al usuario tor es mostrar un par de ca para que ingrese los valores y asignarlos a las variables privadas, pero haciendo uso de las propiedades de la Esto es todo lo que necesitamos hacer para este ejercicio, Mediante este ejemplo, pode- mos ver algo de la potencia que nos oftece lode Ia clase Fraccion, deberiamos haber escrito otra vez el cédigo de las propiedades y de la herencia. Si no hubiésemos here Jas variables de instancia, 3s conveniente a esta altura del curso re- pasar los conceptos desarrollados en el li bro Introducciin a la programaciin, para refor- zat los temas mas complejos. mar Microsoft Visual C# 2005 C# se esta perfilando como “el lenguaje” de desarrollo de Microsoft .NET. Conozcamos el poder que nos ofrece. Hasta ahora conocimos el entorno de Visual, Studio NET 2005, sus principales caracteris- componentes y modo de funcionamien- 0, Ahora llega el urno de C# 2008. EI lenguaje C# C# fue creado por Microsoft con el propé- sito de ser el mejor lenguaje de programa- cién que exista para escribir aplicaciones destinadas a la plataforma NET. Combina Ja facilidad de desarrollo propia de Visual Basic con el poderio del lenguaje C++, un lenguaje con cl cual se ha escrito la mayor parte de la historia del software y de los sis. temas operativos de todos los tiempos. Ea. lineas generales, podemos decir que es un lenguaje de programacién orientado a obje- tos simple y poderoso, Una muestra de esto es que las aplicaciones desarrolladas en él podein funcionar tanto en Windows como en dispositivos méviles, ya sea un teléfono celular o una PDA Caracteristicas fundamentales Lo primero que debemos saber es que po- dremos crear una gran diversidad de progea- mas utilizando este lenguaje: desde aplica- ciones de consola, aplicaciones para Win- dows o aplicaciones Web, hasta software pa- ta dispositivos méviles, drivers y librerias para Windows. C# ha evolucionado notable- mente desde sus primeras versiones, al in- corporar funcionalidades que mejoran y fa- Giliran la escritura de cédigo, la seguridad de tipos y el manejo automatico de memoria Sintaxis basica del lenguaje La sintaxis de Ci es muy paecida a la de C, C++ y Java. Para el dis Microsoft decidié modificar o afiadir tnica- 10 de este lenguaje, mente aquellas cosas que en C no tienen una equivalencia, Por ejemplo, un dato para tener en cuenta es que en C# todas las instrucciones y declaraciones deben terminar con “” (punto y coma), salvo cuando se abra un bloque de cédigo. A diferencia de lo que sucede en Visual Basic, una instruceién que sea muy larga puede ponerse en varias If- reas, sin ingresar ningtin tipo de signo espe- cial al final de cada una. F1 compilador comprende que todo forma parte de la misma instruccién, hasta que en- ccuentra el punto y coma: relati ‘A Netodo(argumentot, argunento2, argumentos + argunentos, argunentos, argunentos, + argunento7, argumento8) ; Diferencias de sintaxis con Visual Basic En el siguiente fragmento de cédigo, veremos las diferencias de una misma funci6n eserita en Visual Basie y en C#: C# es un lenguaje~ de programacién orientado a objetos simple y poderoso. 65 FUNCION ESCRITA EN VISUAL BASIC Public Function NunerollayordueCinco(nuner as integer) as boolean ‘Compara si el parénetro numer contione un valor mayor a § Af numer > 5 then NumerollayordueCince = true one at End Function FUNCION ESCRITA EN C# public bool NunerolayorueCinco(int numer} JiGoupare sie) parénetro nuner contiene tun valor mayor a 5 4 (numer > 5) ‘ return true; ) return false; y En la funcida eserita en Visual Basic NET. encontramos dos bloques de cédigo. El pri meto es el contexto que crea la funcién, es decir, la linea donde se declara la funcién del tipo public (Public Function NumeroMa- Oya Le) ont ay athe Remo s aie eee tne ae arte | das y utilizadas Pesce nee eu ee te is eee he eee eee arts Cree care} 66 yorQueCinco), la linea donde termina dicha funcién (End Function). El otto bloque co- rresponde al contexto If, compuesto por la Xinica linea que hay entre el principio de di- cho contexto (If numer > 5 then) y la que indica su final (End Tf). Este tipo de bloque en Visual Basic que marca el principio y el fin de la funcién y el cédigo contenido hace ‘que la legibilidad sea clara y sencilla. ‘La misma funcién escrita en C# marca que los bloques estin claramente delimitados por llaves, {y }, ambos del mismo modo, Detris de la I nea en donde se declara el método, no esti el punto y coma, igual que en la linea del If, lo cual indica que la lave de apertura del blogue corres pondiente se podria haber esctito a continua- ‘idm, y no en la linea siguiente. Para comentar el cédigo utilizamos //, a di- ferencia de Visual Basic NET, donde se usa una comilla simple Operadores C# proporciona un conjunto de operadores, simbolos que especifican las operaciones que deben realizarse en una expresion. Por lo ge- neral, en las enumeraciones se permiten las ‘operaciones de tipos integrales, como = <, >, <=, >, binary +, binary -, 4, & |, ~, ++, —y sizeof), ‘Veamos algunos ejemplos de los operadores mis comune cansele.WriteLine(6 + 9); EES aT premicum-zionspot.col ee Console. Writetine(2.0 +” 11 operador de suna 1/ operador de coxparacién Console.riteLine(@ > 12); 11 operador de division congole.uiriteLane(i4 / 2)3 operador de nultiplicacion Console.uriteLine(s * 6) Estos son los resultados obtenidos a partir de! uso de los operadores: 2 20 Faise 20 Variables Muchos de los lenguajes orientados a objetos proporcionan los tipos agrupindolos de dos formas: los tipos primitivos del lenguaje, como niimeros 0 cadenas, y el resto de tipos creados En C# todas las instrucciones y declaraciones deben terminar con “;” (punto y coma). a partir de clases. C# cuenta con un sistema de tipos unificado, el CTS (Common Type S)sfem), que proporciona todos los tipos de da- tos como clases derivadas de la clase de base System.Object. Fl framework NET divide los tipos en dos grandes grupos: los tipos valor los tipos referencia. Cuando se declara una va- rlable que es de un tipo valor, se esti reservan do un espacio de memoria en la pila para que almacene los datos reales que contiene esa va rlable. Por ejemplo, en la declaracion: int_nun =10; Tabla 2 | Resumen del sistema de tipos 67 Cuando se declara una variable que es de tipo valor, se esta reservando un espacio de memoria en la pila para que almacene los datos que contiene. Cuando queremos declarar una variable de uno de estos tipos en C#, tenemos que colo- cat el alias que le corresponde; luego, el nom- bre de la variable y, por dltimo, opcionalmen te, le asignamos su valor. C# distingue entre mayasculas y mimisculas, Jo que se conoce como case sensitive. Bsto sig- nifica que PERSONA, Persona y persona constituyen tres tipos de datos distintos. Un tipo que admite valores de coma flotante ad- mite valores con un niimero de decimales que no esta fijado previamente; es decir, miimeros enteros 0 con un decimal, © con dos, 0 con diez, Decimos que la coma es flotante porque no esta siempre en la misma posicién con res pecto al ntimero de decimales (el separador decimal en el cddigo siempre es el punto). double nun=10.75; dovole nun=10.7508; Las eadenas son una consecucién de carncteres —ya sean numéricos, alfabéticos o alfanuméricos— y son definidas de la siguiente manerx: FIGURA 009 | Ejemplo can variables, string palabrat = “05/08/2007: Suenos”; string palabraz = " dias"; string palabras = ~ 09:38"; string saludo = (palabrat + palabraz + palabras); Console.esteL ine (saludo); Consoie-Reackey (); Arrays Un array es una estructura de datos que con- ticne vatiables del mismo tipo, Se declara de la siguiente manera: TipodeDato {] NonbreDeLArray; EI siguiente ejemplo muestra cémo dec diferentes tipos de arrays: static void usin(stringl] aras) t con lugar pi 17 Deolara un array de una dimension 8 elementos Ant [] arraybenumaros = nem intial; arrayDeNuneros[0] = 6; arraybeNuneros[1] = 95; arrayeNuneros 2} 1) EL miso array, 80 pus 375 Lenar durante a deelaracion 401 wisno Ant] arrayaDenuaeros = { 6, 95, 97 5 11 0 de esta nanera Ant(] arrayaDeNuseros = new inti { 6, 35, 97 35 [mostrar tos ol for “tint #484 © arraybeltimeros Léhothy tos del array ise) Console esteLine(): // Es pasibie utilizar foreach pare sterar 17 sobre 10s foreach (int a in array2Dettumeros) ¢ Console.WriteLine ( 8 ); » smentos. de un array Console.Read (); » Sentencias de control En C# disponemos de dos tipos de sentencias de control: de bifurcacién condicional y de iter cién. La primera consiste en evaluar una expre- sidn ejecutando un bloque de eédligo sila expre- sién es verdadera; de lo contrario, un segundo blogue de cédigo puede ser ejecurado. Tenemos, entonces, dos elementos para manejar la bifur- cacién condicional en C#: if y switch. Sentencia if {) utilizacion ae it if (a> 6) \gue entre maytsculas y mintsculas, lo que se conoce como case sensitive. 4 1/ bloque de codigo que se ejecuta cuando & es WAYOR que b d else ‘ 17 bioque para 2 WENOR que b y Es posible utilizar los siguientes operadores: Bye Se ee =, E] fragmento de eédigo que se muestea a con- tinuacién ejemplifica cémo hacerlo: if (a> by c [#8 a es mayor que ® d Construccion else if FIGURA 010 | Podemos notar que else if es una construccién que se utiliza para realizar milkples evaluaciones. 69 70 (a<) es menor que b fassb) 2 igual ab (a=) If si aes mayor > else if ‘ 1 si a os squat > else it ‘ aes > © igual ab (a=) (a i=) distinto que b { 11 alguna opcion > no contemplads :) Sentencia switch En ocasiones, necesitaremos comparar una va- riable con una cantidad de valores posibles, a fin de determinar el rumbo por seguir. Para hacetlo, utilizamos el switeh: ‘switeh (a) ‘ case 1 SPAN: E018 One: 1 codigo sis == 1 break; case 2: Jf codigo si a == 2 breaks case 3: case 4: case S: ff codigo si a= 30405 break; efault: ff codigo si a tiene un valor distinto a 1,2,9,4 0 5. break; } Con esto podemos decir que switeh es compa- rable con Ia sentencia Select Case, vista ante- siormente en Visual Basic NET. La bifureacién ocurte en el switch sin evaluar todas las opciones, mientras que en un blo- que if-else if todas las opciones son evalua- das, Por este motivo, si sabemos que la varia ble que vamos a evaluar tomar sdlo uno de los valores posibles (en forma excluyente), y que la cantidad de valores por evaluar es més grande que tres (repla de dedo), utilizar switch en vez de bloques if-else if es mas efi- ciente en términos de procesamiento. Sentencia de bucle En algunas oportunidades, necesitaremos que determinada porcién de cédigo de un progra- ‘ma se repita una cierta cantidad de veces 0 VALUAR TOMARA SOLO UNO DE LOS VALORES POSIBLES (EN FORMA EXCLUYENTE),Y LA CANTIDAD DE VALORES POR EVALUAR ES MAS GRANDE QUE TRES, ES ACONSEJABLE UTILIZAR SWITCH EN VEZ DE BLOQUES IF ELSE. hasta que ocurra una condicién determina- da, C# cuenta con varias sentencias para que esto se cumpla La sentencia while Esta sentencia, que significa mientras, indi- ca que una sentencia o grupo de sentencias se repetira cn tanto una condicion asociada a clla sea verdadera. A continuacién, veamos un ejemplo de cédi. go cn cl cual, micntras no se ingrese un texto determinado, ¢l programa no terminani: string Palabra = while (Palabra t Console.WriteLine(*Ingrese una pelabra:*); Palabra = Console. tn.Readtine(); + Console.riteline(*Palabra correcta para erminar*) Analizando el cédigo, vemos en la primera I nea que declaramos una variable del tipo ca- dena, y la inicializamos, Fin esta variable se al- macenari el texto que ingresemos por teclado cuando probemos el sistema. Luego, iniciamos la sentencia while, y eva- luamos la expresién encerrada entre parén. te sia: “mientras la variable Palabra sea distin. ta de “terminar”... Si al evaluar la expresion obtenemos como resultado Verdadero, en- tonces entra en el cuerpo del bucle while; de otra manera, saltaremos a la linea siguien- te después del cuerpo. Dentro del while enviamos 2 la salida de la consola el texto “Ingrese una palabra: programa vuelve a capturar en la variable Pa- labra el texto que se ingresa en el teclado. Asi, cada vez que ingresemos un texto en la sa~ lida de la consola, éste seri analizado, evaluan- do la expresién Palabra != salir. Cusndo la sn dicha sentencia, que en este caso se- do Ucepresisn avhile-utilizande La i condicién del texto que hayamos ingresado dé ‘como resultado Falso, el sistema finalizara La sentencia do Con Ia sentencia while vimos que el bloque de cédigo que se debe repetir no seri ejecu- tado nunca si la expresién es falsa la primera ver. E cesitaremos que se ¢jecute dicho eédigo al algunas ocasiones, seguramente ne- ‘menos una vez, para luego hacer una evalua cién de la expresisn. Para estos casos existe la sentencia do. String Palabra; ao 4 Console.Write(“ingrese 1a palabra\n"); Palabra = Console.tn.AeadLine(); } white (Palabra t= “terminar); Console.tirite (*Es 1a palabra corrects") La sentencia while, que significa mientras, indica que una sentencia © grupo de sentencias se repetira mientras una condicién asociada a ella sea verdadera. A diferencia de la insteuccién while, un bucle do-while se ejecuta una vex antes de que se evalie la expresi6n condicional En cualquier punto dentro del bloque do- while, se puede salit del bucle utilizando Ta insttuccién break. Se puede pasar directa- mente a la instrucci6g de evaluacién de la ion se evahia como continue; sila expr true, la ejecucién contintia en la primera ins- ¢ evalia como false, truceidn del bucle. la cjecucidn contintia en la primera instruc cién detris del bucle do-while 7 [cariruo2] | Los lenguajes en iteracion y para procesar de manera se Iii fi: ///c:/Ms Documentos/ Visual Studio 2005/Prajects/C#/Cons cuencial. Ein el ejemplo siguiente el valor de i se imprimit cen pantalla mientras se incre menta de a uno: t for (int 4 = 0; 4 < 6; 444) Console.tiesteLine(}; Console. Reaskey (5 ? | El resultado de la sentencia for ER CADRRCRE NESE GEE RCE] Andlizando cl cddigo, vemos que se evihia el lor inicial de la variable i. A continuacién, tras el valor de i es menor o igual qu la condicidn se evalia como true, se ejecuta la instruccién Console:WiteLine y se vuelve a evaluar i, Cuando i es mayor que 5, la condi- cidn se convierte en false, y ¢l control se transfiere fuera det bucle. | El resultado de la sentencia foreach, La sentencia foreach Ciertas coleeciones de objetos uuilizan una for La sentencia for ma de estructurar la coleccién que permite la El bucl for ¢jecuta una instruccidn © un blo- _extraccidn de exda uno de Tos elementos de que de instrucciones repetidamente hasta que manera controlada desde la clase contenedosa tuna determinada expresidn se evalia como fal- Esto permite mantener el encapsulamiento se. Bl bucle for es dil para recorrer matrices dentro de la clase para ev far que el cliente co- ‘nozca los detalles internos a la implementaci6n, Por ejemplo, el siguiente fragmento de cédigo © La condicién cia a yom ee de terminacién del bucle steingl] nonbres = ( “Oabriei*, “Rafael” ; F tiarcelo", “Pablo" ) La expresién booleana del bucle “mi CORO aC Crean foreach (string s in nombres) { circunstancias y luego, en algn momento, «OUTS EUS Se em ota Se ee ee ee ae bucle. Si la expresién SIEMPRE fuese verdadera, OTe RRL oS Ha it a ser recorridas con la sentencia foreach, Fs tas podrian entregat la lista ordenada alfabé- Es posible construis colecciones que puedan ticamente, por ejemplo. n2 Lo = INTENSIVOS Los temas mas importantes del universo de la tecnologia desarrollados con la mayor profundidad y con un desplieque visual de alto impacto: Explicaciones tedricas, procedimientos paso a paso, videotutoriales, infografias y muchos recursos mas. Ce cee eT Wc Ce Ramey EM SGA cso ae cee Stud ee Pe nue een Cosco een) eres ete acer came IAT) ee le ech as ea) eet ae eee G00PAginas 53 ¥ conocer los mejores secretos pare cisener de manera profesional, deal vara quienes se desernpeiian en diserio, ry Es ea oe cee cts iS °) Ee Hy Gee CMe ee ty te eet ed a Rei enh ae eee (efectos especiales). Sear eT ee ae ree eee : eign ane en eee dit eens eet eer ent Be eee nr ais TELUS ROT (OCA selena el usershop@redusers.com +54 (011) 4110-8700 @® usershop.redusers.com.ar “ Vldo en todo el rund excepte Argentine. * Sél valid para a Replica Argentina ‘Argentina: $590 (recacgo a interior $30 Microsoft Curso tedrico y practico de programacion Desarrollador : ay @ia Con toda la potencia ome de Visual Basic .NET y C# diel : tl La mejor forma de aprender vf sues a programar desde cero Basado en el programa Desarrollador Cinco Estrellas de Microsoft Visual Basic Funciones propias y primeros ejercicios practicos C# desde cero Sintaxis basica; sintaxis, derclase y funciones propias

You might also like