curso.de.introducción.net.con.visual.basic.2010

Upload: hboveri

Post on 31-Oct-2015

227 views

Category:

Documents


1 download

TRANSCRIPT

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    1/449

    http://visualinformatica.blogspot.com/
  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    2/449

    Bienvenido al curso de Introduccin a .NET con Visual Basic 2010

    En este curso podrs aprender a desarrollar aplicaciones Windows con Visual Studio2010, y terminaremos desarrollando una aplicacin real con los conceptos aprendidos. Alfinal de cada leccin tendrs disponible un video en el que podrs ver los conceptosexplicados de forma prctica sobre el entorno de Visual Studio 2010.

    Este curso le ensear entre otras cosas:

    Las caractersticas fundamentales del lenguaje Visual BasicCmo crear aplicaciones Windows con Visual Studio 2010Utilizar controles en sus aplicacionesTrabajar con imgenes y grficos en 2D y 3DDesplegar las aplicaciones que desarrolleUtilizar las clases que se incluyen en la l ibrera de .NETAcceder a datos provenientes de una base de datosConocer en qu consiste LINQ y como utilizarlo en Visual BasicCmo exponer funcionalidad a otras aplicaciones mediante servicios Web.

    Te recomendamos tambin que veas la aplicacin MSDN Video, que desarrollaremos alfinalizar el curso y de la que podrs consultar su cdigo fuente y videos explicativos.

    Recuerda que si quieres poner en prctica este curso tienes disponible una versin sinlimitaciones de Visual Basic 2010 Express, que incluye la base de datos SQL Server 2005Express. Puedes descargarla en el rea de versiones Express.

    Disfruta del curso!

    Acerca de los autores

    Guillermo SomGuillermo Som, ms conocido como "el Guille", es Microsoft

    MVP (Most Valuable Professional) de Visual Basic desde1997. Mantiene el sitio web www.elguille.info dedicado a laprogramacin con Visual Basic y todo lo relacionado conpunto NET. Tambin es autor de varios libros sobre VisualBasic .NET y C#, y escribe para revistas y otros mediosespecializados en programacin. Tambin es miembro deIneta Speakers Bureau Latin Amrica y Mentor de SolidQuality Mentors.

    Unai Zorrilla

    Lleva 10 aos desarrollando software como consultorindependiente y en diversas empresas privadas, realizandolas tareas de arquitectura de software bajo la plataforma.NET, abarcando desde el desarrollo con dispositivosmviles y entornos web, hasta el desarrollo con WindowsForms. Es Microsoft MVP de Compact Framework, colaboraactivamente con Microsoft en eventos de formacin y esautor de numerosos artculos tcnicos en revistasespecializadas como MTJ.NET, MSDN Online y DotNetMana.Actualmente trabaja como consultor de gran empresa enPlain Concepts empresa de la cul es socio fundador.

    http://msdn.microsoft.com/es-es/express/default.aspxhttp://www.plainconcepts.com/http://www.plainconcepts.com/http://msdn.microsoft.com/es-es/express/default.aspx
  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    3/449

    Jorge SerranoJorge Serrano es MVP de Visual Basic y trabaja activamentecon la comunidad de desarrollo en Espaa y Andorra.Mantiene el sitio web www.portalvb.com y es escritor devarios libros sobre Internet y tecnologas de desarrolloMicrosoft adems de colaborador asiduo de las revistasespecializadas del sector.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    4/449

    Este mdulo presenta con carcter general la plataforma .NET y cmo sta se diferencia deotros sistemas de desarrollo tradicionales, como ASP.

    Leccin 1: Introduccin a la plataforma .NET

    Qu es la plataforma .NET?El entorno de ejecucin CLR

    Leccin 2: El lenguaje intermedio y el CLSEl lenguaje intermedioLa especificacin comn de los lenguajes .NET

    El sistema de tipos comunesLeccin 3: La biblioteca de clases de .NET

    La BCLLos espacios de nombres

    Leccin 4: Acceso a datos con ADO.NETADO.NETLa arquitectura de ADO.NETCapa conectada de datosCapa desconectada

    Leccin 5: LINQIntroduccin a LINQ

    Leccin 6: Aplicaciones Windows FormsIntroduccinWPF

    Leccin 7: Aplicaciones Web FormsIntroduccinSilverlight

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    5/449

    Simplificando mucho las cosas para poder dar una definicin corta y comprensible, se podradecir que la p l a t a f o r m a .N E T es un amplio conjunto de bibliotecas de desarrollo que puedenser utilizadas por otras aplicaciones para acelerar enormemente el desarrollo y obtener demanera automtica caractersticas avanzadas de seguridad, rendimiento, etc...

    En realidad .NET es mucho ms que eso ya que ofrece un entorno gestionado de ejecucinde aplicaciones, nuevos lenguajes de programacin y compiladores, y permite el desarrollode todo tipo de funcionalidades: desde programas de consola o servicios Windows hastaaplicaciones para dispositivos mviles, pasando por desarrollos de escritorio o para Internet.

    Son estos ltimos de los que nos ocuparemos en este curso. Pero antes conviene conocerlos fundamentos en los que se basa cualquier aplicacin creada con .NET, incluyendo las quenos interesan.

    El entorno de ejecucin CLR

    .NET ofrece un entorno de ejecucin para sus aplicaciones conocido como CommonLanguage Runtime o CLR. El CLR es la implementacin de Microsoft de un estndar llamadoCommon Language Infrastructure o CLI. ste fue creado y promovido por la propia Microsoftpero desde hace aos es un estndar reconocido mundialmente por el ECMA.

    El CLR/CLI esencialmente, define un entorno de ejecucin virtual independiente en el quetrabajan las aplicaciones escritas con cualquier lenguaje .NET. Este entorno virtual se ocupade multitud de cosas importantes para una aplicacin: desde la gestin de la memoria y lavida de los objetos, hasta la seguridad y la gestin de subprocesos.

    Todos estos servicios unidos a su independencia respecto a arquitecturas computacionales,convierten al CLR en una herramienta extraordinariamente til puesto que, en teora,cualquier aplicacin escrita para funcionar segn la CLI puede ejecutarse en cualquier tipode arquitectura de hardware. Por ejemplo Microsoft dispone de implementaciones de .NETpara Windows de 32 bits, Windows de 64 bits e incluso para Windows Mobile, cuyo hardwareno tiene nada que ver con la arquitectura de un ordenador comn.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    6/449

    Al contrario que otros entornos, la plataforma .NET no est atada a un determinadolenguaje de programacin ni favorece a uno determinado frente a otros. En la actualidadexisten implementaciones para varias decenas de lenguajes que permiten escribiraplicaciones para la plataforma .NET. Los ms conocidos son Visual Basic .NET o C#, peroexisten implementaciones de todo tipo, como F#, Python, Fortran, e incluso COBOL.

    Lo mejor de todo es que cualquier componente creado con uno de estos lenguajes puede serutilizado de forma transparente desde cualquier otro lenguaje .NET. Adems, como ya se hacomentado, es posible ejecutar el cdigo .NET en diferentes plataformas y sistemas

    operativos.

    Cmo se consigue esta potente capacidad?

    Dentro del CLI, existe un lenguaje llamado I L (Intermediate Language o LenguajeIntermedio) que est pensado de forma independiente al procesador en el que se vaya aejecutar. Es algo parecido al cdigo ensamblador pero de ms alto nivel y creado para unhipottico procesador virtual que no est atado a una arquitectura determinada.

    Cuando se compila una aplicacin escrita en un lenguaje .NET cualquiera (da igual que seaVB, C# u otro de los soportados), el compilador lo que genera en realidad es un nuevocdigo escrito en este lenguaje intermedio. As, todos los lenguajes .NET se usan como capa

    de ms alto nivel para producir cdigo IL.

    Un elemento fundamental del CLR es el compilador JIT (just-in-time). Su cometido es el decompilar bajo demanda y de manera transparente el cdigo escrito en lenguaje intermedio alenguaje nativo del procesador fsico que va a ejecutar el cdigo.

    Al final, lo que se ejecuta es cdigo nativo que ofrece un elevado rendimiento. Esto es ciertotambin para las aplicaciones Web escritas con ASP.NET y contrasta con las aplicacionesbasadas en ASP clsico que eran interpretadas, no compiladas, y que jams podran llegar alnivel de desempeo que ofrece ASP.NET.

    La siguiente figura muestra el aspecto que tiene el cdigo intermedio de una aplicacinsencilla y se puede obtener usando el desemsamblador que viene con la plataforma .NET.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    7/449

    Figura 1.1. Cdigo en lenguaje intermedio obtenido con ILDASM.exe

    La especificacin comn de los lenguajes y el sistema de tipos

    comunes

    Para conseguir la interoperabilidad entre lenguajes, no slo se llega con el lenguajeintermedio, sino que es necesario disponer de unas "reglas del juego" que definan unconjunto de caractersticas que todos los lenguajes deben incorporar y cumplir. A esteconjunto regulador se le denomina Common Language Specification (CLS) o, en castellano,especificacin comn de los lenguajes.

    Entre las cuestiones que regula el CLS se encuentran la nomenclatura, la forma de definirlos miembros de los objetos, los metadatos de las aplicaciones, etc... Una de las partes msimportantes del CLS es la que se refiere a los tipos de datos.

    Si alguna vez ha programado la API de Windows o ha tratado de llamar a una DLL escrita enC++ desde Visual Basic 6, habr comprobado lo diferentes que son los tipos de datos deVB6 y de C++. Para evitar este tipo de problemas y poder gestionar de forma eficiente ysegura el acceso a la memoria, el CLS define un conjunto de tipos de datos comunes(Common Type System o CTS) que indica qu tipos de datos se pueden manejar, cmo sedeclaran y se utilizan stos, y de qu manera se deben gestionar durante la ejecucin.

    Si nuestras bibliotecas de cdigo utilizan en sus interfaces hacia el exterior datos definidosdentro de la CTS no existirn problemas a la hora de utilizarlos desde cualquier otro cdigoescrito en la plataforma .NET.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    8/449

    Cada lenguaje .NET utiliza una sintaxis diferente para cada tipo de datos. As, por ejemplo,el tipo comn correspondiente a un nmero entero de 32 bits (Sy st em .I n t 3 2) se denominaI n t e g e r en Visual Basic .NET, pero se llama i n t en C#. En ambos casos representan elmismo tipo de datos que es lo que realmente cuenta (Sy st em .I n t 3 2).

    Nota:En ASP 3.0 se suele usar VBScript como lenguaje de programacin. En estelenguaje interpretado, al igual que en VB6, un Integer representaba unentero de 16 bits. Los enteros de 32 bits eran de tipo Long. Es un fallo muy

    comn usar desde Visual Basic .NET el tipo Integerpensando que es de 16bits cuando en realidad es capaz de albergar nmeros mucho mayores.Tngalo en cuenta si usted est familiarizado con Visual Basic 6 o anteriorescuando empiece a programar.

    Existen tipos por valor (como los enteros que hemos mencionado o las enumeraciones) ytipos por referencia (como las clases). En el siguiente mdulo se profundiza en todas estascuestiones.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    9/449

    Todo lo que se ha estado comentando hasta ahora en el curso constituye la base de laplataforma .NET. Si bien es muy interesante y fundamental, por s mismo no nos servira demucho para crear programas si debisemos crear toda la funcionalidad desde cero.

    Obviamente esto no es as, y la plataforma .NET nos ofrece infinidad de funcionalidades "defbrica" que se utilizan como punto de partida para crear las aplicaciones. Existenfuncionalidades bsicas (por ejemplo todo lo relacionado con la E/S de datos o la seguridad)y funcionalidades avanzadas en las que se fundamentan categoras enteras de aplicaciones(acceso a datos, creacin de aplicaciones Web...).

    Toda esta funcionalidad est implementada en forma de bibliotecas de funciones quefsicamente se encuentran en diversas DLL (bibliotecas de enlazado dinmico). A suconjunto se le denomina Base Classes Library(Biblioteca de clases base o BCL ), y formanparte integral de la plataforma .NET, es decir, no se trata de aadidos que se deban obtenero adquirir aparte.

    La siguiente figura ilustra a vista de pjaro la arquitectura conceptual general de laplataforma .NET. En ella se pueden observar los elementos que se han mencionado enapartados anteriores (lenguajes, CLR, CLS...) y en qu lugar se ubican las bibliotecas declases base:

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    10/449

    Figura 1.2. Distintos elementos de la plataforma .NET y cmo se relacionan entres.

    Resulta muy til para comprender lo explicado hasta ahora. No se preocupe si hayelementos que no conoce u otros elementos que echa en falta en este grfico, ms adelanteestudiaremos todos los elementos y algunos que no aparecen aqu como por ejemplo LINQ,y el cual veremos ms adelante.

    Todo lo que se encuentra en la BCL forma parte de la plataforma .NET. De hecho existe tal

    cantidad de funcionalidad integrada dentro de estas bibliotecas (hay ms de 4000 clases)que el mayor esfuerzo que todo programador que se inicia en .NET debe hacer es elaprendizaje de las ms importantes, aumentando el conocimiento del resto a base deprctica. De todos modos Visual Studio ofrece mucha ayuda contextual (documentacin,Intellisense...) y una vez que se aprenden los rudimentos resulta fcil ir avanzando en elconocimiento de la BCL a medida que lo vamos necesitando.

    Los espacios de nombres

    Dada la ingente cantidad de clases con la que podemos trabajar, debe existir alguna formade organizarlas de un modo coherente. Adems hay que tener en cuenta que podemosadquirir ms funcionalidades (que se traducen en clases) de otros fabricantes, por nomencionar que crearemos continuamente nuevas clases propias.

    Para solucionar este problema existen en todos los lenguajes .NET los es p ac io s d en o m b r eso n am esp ace s.

    Un espacio de nombres no es ms que un identificador que permite organizar de modoestanco las clases que estn contenidas en l as como otros espacios de nombres.

    As por ejemplo, todo lo que tiene que ver con el manejo de estructuras de datos XML en laplataforma .NET se encuentra bajo el espacio de nombres Sy st em .X m l. La funcionalidadfundamental para crear aplicaciones Web est en el espacio de nombres Sy s t em .W e b. ste

    a su vez contiene otros espacios de nombres ms especializados comoSy s t em .W e b .Ca c h i n g para la persistencia temporal de datos,Sy s t em .W eb .U I .W e b Co n t r o l s, que contiene toda la funcionalidad de controles Web parainterfaz de usuario, etc...

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    11/449

    No obstante, en nuestros desarrollos internos crearemos nuestras propias clases dentro denombres de espacio concretos. Esto nos ayudar a localizar e interpretar rpidamente ladivisin y subdivisin de nuestros objetos. Un aspecto a tener en cuenta, es tratar de evitarcrear nuestros nombres de espacio de forma idntica a la que Microsoft ha utilizado la losnombres de espacio de .NET Framework, pero esto es algo que iremos solventando conprctica y atencin.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    12/449

    El acceso a fuentes de datos es algo indispensable en cualquier lenguaje o plataforma dedesarrollo. La parte de la BCL que se especializa en el acceso a datos se denomina de formagenrica como A DO. N ET.

    Si usted ha programado con Visual Basic 6.0 con ASP, ha empleado en su cdigo con totalseguridad la interfaz de acceso a datos conocida como ADO (ActiveX Data Objects), yposiblemente lo ha combinado adems con ODBC (Open Database Connectivity). Si ademses usted de los programadores con solera y lleva unos cuantos aos en esto, es probableque haya usado RDO o incluso DAO, todos ellos mtodos mucho ms antiguos.

    ADO.NET ofrece una funcionalidad completamente nueva, que tiene poco que ver con loexistente hasta la fecha en el mercado. Sin embargo, con el nimo de retirar barreras a suaprendizaje, Microsoft denomin a su nuevo modelo de acceso a datos con un nombresimilar y algunas de sus clases recuerdan a objetos de propsito anlogo en el vetusto ADO.

    ADO.NET es un modelo de acceso mucho ms orientado al trabajo desconectado de lasfuentes de datos de lo que nunca fue ADO. Si bien este ltimo ofreca la posibilidad dedesconectar los Recordsets y ofreca una forma de serializacin de estos a travs de lasdiferentes capas de una aplicacin, el mecanismo no es ni de lejos tan potente como el quenos ofrece ADO.NET.

    El objeto ms importante a la hora de trabajar con el nuevo modelo de acceso a datos es elD at aSe t. Sin exagerar demasiado podramos calificarlo casi como un motor de datosrelacionales en memoria. Aunque hay quien lo asimila a los clsicos Recordsets sufuncionalidad va mucho ms all como se ver en el correspondiente mdulo.

    Arquitectura de ADO.NET

    El concepto ms importante que hay que tener claro sobre ADO.NET es su modo defuncionar, que se revela claramente al analizar su arquitectura:

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    13/449

    Figura 1.3.- Arquitectura de ADO.NET

    Existen dos capas fundamentales dentro de su arquitectura: la ca p a co n ec t ad a y lad e sc o n e ct ad a.

    Capa conectada

    La primera de ellas contiene objetos especializados en la conexin con los orgenes de

    datos. As, la clase genrica Co n n e ct i o nse utiliza para establecer conexiones a los orgenesde datos. La clase Com m an dse encarga de enviar comandos de toda ndole al origen dedatos. Por fin la clase D at aRe ad er est especializada en leer los resultados de loscomandos mientras se permanece conectado al origen de datos.

    La clase D at aA d ap t erhace uso de las tres anteriores para actuar de puente entre la capaconectada y la desconectada.

    Estas clases son abstractas, es decir, no tienen una implementacin real de la que se puedahacer uso directamente. Es en este punto en donde entran en juego los p r o v ee d o r es d ed a t o s. Cada origen de datos tiene un modo especial de comunicarse con los programas quelos utilizan, adems de otras particularidades que se deben contemplar. Un proveedor dedatos de ADO.NET es una implementacin concreta de las clases conectadas abstractas quehemos visto, que hereda de stas y que tiene en cuenta ya todas las particularidades delorigen de datos en cuestin.

    As, por ejemplo, las clases especficas para acceder a SQL Server se llamanSq lCo n n e ct i o n, Sq l Co m m an d, Sq l D a t aRe ad e ry Sq lD at aA d ap t ery se encuentran bajoel espacio de nombres Sy st em .D at a.Sq l Cli en t. Es decir, al contrario que en ADO clsico nohay una nica clase Connection o Commandque se use en cada caso, si no que existenclases especializadas para conectarse y recuperar informacin de cada tipo de origen dedatos.

    Nota:El hecho de utilizar clases concretas para acceso a las fuentes de datos nosignifica que no sea posible escribir cdigo independiente del origen dedatos. Todo lo contrario. La plataforma .NET ofrece grandes facilidades de

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    14/449

    escritura de cdigo genrico basadas en el uso de herencia eimplementacin de interfaces. De hecho la versin 2.0 de .NET ofrecegrandes novedades especficamente en este mbito.

    Existen p r o v e e d o r e s n a t i v o s, que son los que se comunican directamente con el origen dedatos (por ejemplo el de SQL Server o el de Oracle), y p r o v e e d o r e s " p u e n t e ", que seutilizan para acceder a travs de ODBC u OLEDB cuando no existe un proveedor nativo paraun determinado origen de datos.

    Nota:Estos proveedores puente, si bien muy tiles en determinadascircunstancias, ofrecen un rendimiento menor debido a la capa intermediaque estn utilizando (ODBC u OLEDB). Un programador novel puede sentirla tentacin de utilizar siempre el proveedor puente para OLEDB y asescribir cdigo compatible con diversos gestores de datos de forma muysencilla. Se trata de un error y siempre que sea posible es mejor utilizar unproveedor nativo.

    Capa desconectada

    Una vez que ya se han recuperado los datos desde cualquier origen de datos que requierauna conexin sta ya no es necesaria. Sin embargo sigue siendo necesario trabajar con losdatos obtenidos de una manera flexible. Es aqu cuando la capa de datos desconectada entraen juego. Adems, en muchas ocasiones es necesario tratar con datos que no han sidoobtenidos desde un origen de datos relacional con el que se requiera una conexin. A vecesnicamente necesitamos un almacn de datos temporal pero que ofrezca caractersticasavanzadas de gestin y acceso a la informacin.

    Por otra parte las conexiones con las bases de datos son uno de los recursos ms escasoscon los que contamos al desarrollar. Su mala utilizacin es la causa ms frecuente decuellos de botella en las aplicaciones y de que stas no escalen como es debido. Esta

    afirmacin es especialmente importante en las aplicaciones Web en las que se puedenrecibir muchas solicitudes simultneas de cualquier parte del mundo.

    Finalmente otro motivo por el que es importante el uso de los datos desconectado de suorigen es la transferencia de informacin entre capas de una aplicacin. stas puedenencontrarse distribuidas por diferentes equipos, e incluso en diferentes lugares del mundogracias a Internet. Por ello es necesario disponer de algn modo genrico y eficiente depoder transportar los datos entre diferentes lugares, utilizarlos en cualquiera de ellos yposteriormente tener la capacidad de conciliar los cambios realizados sobre ellos con elorigen de datos del que proceden.

    Todo esto y mucho ms es lo que nos otorga el uso de los objetos D at aSe t. Es obvio que nose trata de tareas triviales, pero los objetos DataSetestn pensados y diseados con estosobjetivos en mente. Como podremos comprobar ms adelante en este curso es bastantesencillo conseguir estas funcionalidades tan avanzadas y algunas otras simplemente usandode manera adecuada este tipo de objetos.

    Nota:Otra interesante caracterstica de los DataSet es que permiten gestionarsimultneamente diversas tablas (relaciones) de datos, cada una de unorigen diferente si es necesario, teniendo en cuenta las restricciones y lasrelaciones existentes entre ellas.

    Los DataSet, como cualquier otra clase no sellada de .NET, se pueden extender medianteherencia. Ello facilita una tcnica avanzada que consiste en crear tipos nuevos de DataSetespecializados en la gestin de una informacin concreta (por ejemplo un conjunto de tablas

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    15/449

    relacionadas). Estas nuevas tipos clases se denominan genricamente D a t aS e t T i p ad o s, ypermiten el acceso mucho ms cmodo a los datos que representan, verificando reglas denegocio, y validaciones de tipos de datos ms estrictas.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    16/449

    LINQ es quizs una de las caractersticas ms novedosas introducidas en Microsoft .NETFramework en los ltimos aos.No cejar en animarle a usar LINQ siempre que pueda, no porque sea mejor que otrasformas de trabajar que encontrar en Microsoft .NET Framework, sino porque simplifica elcdigo, acorta los tiempos de desarrollo, y bajo mi particular punto de vista, permite que eldesarrollador desarrolle aplicaciones ms productivas.

    LINQ significa Language INtegrated Query, o lo que es lo mismo, lenguaje integrado deconsultas.

    Se trata de una de las novedades incluidas en Microsoft .NET Framework 3.5 y continuadaen Microsoft .NET Framework 4.0, y representa una forma nueva de desarrollo tal y como laconocamos hasta ahora.

    LINQ est pensado desde la orientacin a objetos, pero su objetivo fundamental es lamanipulacin y trabajo con datos.Cuando hablamos de datos siempre pensamos en bases de datos, pero LINQ tiene unaimplicacin mucho ms generalista, de hecho, podemos trabajar con colecciones, matrices,etc.

    Para que comprenda ms an la importancia de LINQ, diremos que la inmensa mayora delas novedades introducidas en Microsoft .NET Framework 3.5 tienen su razn de ser graciasa LINQ, y que LINQ juega un importante papel en las novedades de Microsoft .NETFramework 4.0 y en las prximas novedades de Microsoft .NET Framework.

    A la hora de trabajar con datos, con LINQ tenemos la posibilidad de seleccionar, manipular yfiltrar datos como si estuviramos trabajando con una base de datos directamente.Evidentemente, podemos usar LINQ con bases de datos, pero tambin con matrices,colecciones de datos, etc como decamos antes.En todo esto, Intellisense juega un papel muy importante evitando que cometamos errores ala hora de escribir nuestras aplicaciones, errores como por ejemplo seleccionar el datoerrneo o el tipo de dato inadecuado, ya que el compilador nos avisara de estos y otroserrores.

    Por lo tanto, el desarrollo de aplicaciones con LINQ, permite disear aplicaciones msseguras a la hora de trabajar con datos y sus tipos.

    Orgenes de datos

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    17/449

    Dentro de LINQ encontramos diferentes orgenes de datos dentro de Microsoft .NETFramework 3.5 posterior.

    Estos orgenes de datos son los siguientes:

    LINQ to Objects: representa el uso de LINQ sobre objetos.LINQ to XML: representa el uso de LINQ sobre documentos XML.ADO.NET y LINQ: dentro de este grupo encontramos los diferentes orgenes de datosde LINQ que tienen relacin directa con datos relacionales. Los orgenes de datos de

    LINQ y ADO.NET son:LINQ to DataSet: representa el uso de LINQ sobre DataSet.LINQ to SQL: representa el uso de LINQ sobre orgenes de datos de SQL Server.LINQ to Entities: representa el uso de LINQ sobre cualquier origen de datos, SQLServer, Oracle, MySql, DB2, etc.

    Como vemos, LINQ abarca ms que el propio trabajo con datos de bases u orgenes dedatos.As, con LINQ podemos manipular y trabajar con datos de objetos o de documentos XML.Este ltimo representa una importante ventaja para los desarrolladores de VB respecto a losdesarrolladores de C#, ya que el equipo de trabajo de VB ha hecho especial nfasis al

    trabajo de LINQ con documentos XML motivado por el feedback recibido por la Comunidadde desarrolladores de todo el mundo.

    De todas las maneras, cabe recordar que no existen grandes diferencias entre los equiposde Microsoft encargados de dotar de novedades o mejoras a VB y a C#, ya que Microsoft haempeado sus esfuerzos ms recientes en que los avances de ambos lenguajes vayan de lamano.

    Ms adelante en este curso, veremos como utilizar LINQ y como aprovechar todas lasventajas que nos ofrece.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    18/449

    Las aplicaciones de escritorio son aquellas basadas en ventanas y controles comunes deWindows que se ejecutan en el sistema local. Son el mismo tipo de aplicaciones que antesconstruiramos con Visual Basic 6 u otros entornos similares.

    En la plataforma .NET, el espacio de nombres que ofrece las clases necesarias para construiraplicaciones de escritorio bajo Windows se denomina W in d o w s Fo r m s. Este es tambin elnombre genrico que se le otorga ahora a este tipo de programas basados en ventanas.

    Windows Forms est constituido por multitud de clases especializadas que ofrecen

    funcionalidades para el trabajo con ventanas, botones, rejillas, campos de texto y todo estetipo de controles habituales en las aplicaciones de escritorio.

    Visual Studio ofrece todo lo necesario para crear visualmente este tipo de programas, de unmodo similar aunque ms rico al que ofreca el entorno de desarrollo integrado de VisualBasic.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    19/449

    Figura 1.4.- Diseador de interfaces de aplicaciones de escritorio con WindowsForms en Visual Studio.

    Al contrario que en en VB6, .NET proporciona control sobre todos los aspectos de lasventanas y controles, no dejando nada fuera del alcance del programador y otorgando por lotanto la mxima flexibilidad. Los formularios (ventanas) son clases que heredan de la clase

    base Fo r m, y cuyos controles son miembros de sta. De hecho se trata nicamente decdigo y no es necesario (aunque s muy recomendable) emplear el diseador grfico deVisual Studio para crearlas.

    Este es el aspecto que presenta parte del cdigo que genera la interfaz mostrada en laanterior figura:

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    20/449

    Figura 1.5.- Cdigo autogenerado por Visual Studio para crear la interfaz de lafigura anterior.

    Al contrario que en Visual Basic tradicional, en donde siempre existan instancias pordefecto de los formularios que podamos usar directamente, en .NET es necesario crear un

    objeto antes de poder hacer uso de los formularios:

    Di m f r m As New Mi For mul ari of r m. Show( )

    Todos los controles heredan de una clase Co n t r o l por lo que conservan una serie defuncionalidades comunes muy interesantes, como la capacidad de gestionarlos en eldiseador (movindolos, alinendolos...), de definir mrgenes entre ellos o hacer que seadapten al tamao de su contenedor.

    WPF

    Sin embargo, en los ltimos aos Microsoft ha estado trabajando intensamente en lo que seha denominado como WPF, o lo que es lo mismo, Windows Presentation Foundation.

    WPF es "otra forma" de crear aplicaciones de escritorio con un enriquecimiento en laexperiencia del usuario.

    Con la aparicin de Windows Vista, se hizo mucho ms presente que antes la presentacintridimensional de grficos, imgenes, as como efectos multimedia muy variados.Windows 7 por su parte, contina la ruta marcada por Windows Vista para la creacin deaplicaciones Windows ricas.

    WPF facilita al desarrollador la creacin de aplicaciones de escritorio ms ricas, aportando alusuario una experiencia nunca vista en las aplicaciones de este tipo.

    El origen de WPF no obstante, hay que buscarlo en Microsoft .NET Framework 3.0, y es a

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    21/449

    partir de Microsoft .NET Framework 3.5 sobre todo, cuando esta tecnologa ha empezando acrearse un hueco de referencia dentro del mercado de desarrollo de aplicaciones Software.

    Quiere aprender WPF?Recuerde que tiene la posibilidad de acceder gratuitamente a un cursodedicado en exclusiva a WPF.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    22/449

    Tradicionalmente las aplicaciones Web se han desarrollado siguiendo un modelo mixto queintercalaba cdigo HTML y JavaScript propio de pginas Web (parte cliente), junto concdigo que se ejecutara en el servidor (parte servidora). Este modelo contrastaba porcompleto con el modelo orientado a eventos seguido por las principales herramientas dedesarrollo de aplicaciones de escritorio.

    En el modelo orientado a eventos se define la interfaz de usuario colocando controles en uncontenedor y se escribe el cdigo que actuar como respuesta a las interacciones de losusuarios sobre estos controles. Si conoce el diseador de VB6 o de Windows Forms

    mencionado en el apartado anterior sabe exactamente a qu nos referimos.

    Hacer esto en una aplicacin de escritorio no tiene mayor dificultad ya que todo el cdigo seejecuta en el mismo lugar. La principal caracterstica de las aplicaciones Web sin embargoes que se la interfaz de usuario (lo que los usuarios de la aplicacin ven) se ejecuta en unlugar diferente al cdigo de la aplicacin que reside en un servidor. Para mayor desgraciaestas aplicaciones se basan en el uso del protocolo HTTP que es un protocolo sin estado yque no conserva la conexin entre dos llamadas consecutivas.

    Por ejemplo, el siguiente cdigo ilustra el cdigo que es necesario escribir en ASP paradisponer de una pgina que rellena una lista de seleccin con unos cuantos nombres(podran salir de una base de datos y an sera ms complicado), y que dispone de un botnque escribe un saludo para el nombre que se haya elegido de la lista.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    23/449

    Figura 1.6.- Cdigo ASP sencillo que genera una lista de seleccin y saluda alpresionar un botn.

    Obviamente se podra haber simplificado sin enviar el formulario al servidor usandoJavaScript en el cliente para mostrar el saludo, pero la intencin es ilustrar la mezcla decdigo de cliente y de servidor que existe en este tipo de aplicaciones.

    Las principales desventajas de este tipo de codificacin son las siguientes:

    No e x i s t e s e p a r a c i n e n t r e e l d i s eo y l a l g i c a d e l a s a p l i c a c i o n e s . Si queremoscambiar sustancialmente la apariencia de la aplicacin Web lo tendremos bastantecomplicado puesto que el cdigo del servidor est mezclado entre el HTML.

    1.

    En A SP c ls i co n o e x i s t e e l c o n c e p t o d e c o n t r o l para la interfaz de usuario. Lonico que hay es HTML y JavaScript que se deben generar desde el servidor. En elejemplo de la figura para generar un control de lista con unos elementos no podemosasignar una propiedad de la lista (porque no existe tal lista), sino que tenemos quecrear un bucle que genere los elementos HTML necesarios para generarla. Tampocodisponemos de un diseador visual que nos permita gestionar los controles yelementos HTML existentes, y menos cuando stos se encuentran mezclados con elcdigo del servidor.

    2.

    N o d i s p o n em o s d e f o r m a d e d e t e c t a r e n e l s er v i d o r q u e s e h a r e a l iz a d o a lg o e n

    e l c l i e n t e . El cliente se encuentra desconectado desde el momento en que se terminade devolver la pgina. Slo se recibe informacin en el servidor cuando se solicita una

    nueva pgina o cuando se enva un formulario tal y como se hace en el ejemplo,debindonos encargar nosotros de averiguar si la peticin es la primera vez que sehace o no, y de dar la respuesta adecuada. En cualquier caso es mucho menos intuitivoque el modelo de respuesta a eventos de una aplicacin de escritorio.

    3.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    24/449

    No existe constancia del estado de los controles de cada pgina entre lasllamadas. En cada ejecucin de la pgina tendremos que recrear completamente lasalida. Por ejemplo si presionamos en el botn Di Hola tenemos que escribir ademsde la etiqueta Hola, nombre el resto de la pantalla, incluyendo la lista con todos losnombres dejando seleccionado el mismo que hubiese antes. Si estos nombres viniesende una base de datos esto puede ser todava ms ineficiente y tendremos que buscarmtodos alternativos para generarlos ya que en ASP tampoco se deben almacenar enlos objetos de sesin y/o aplicacin Recordsets resultado de consultas.

    4.

    N o e x i st e e l c o n c ep t o d e P r o p i e d a d d e l o s c o n t r o l es . En una aplicacin Windows

    asignamos el texto de un campo usando una propiedad (por ejemplo Text1.Text ="Hola") y sta se asigna y permanece en la interfaz sin que tengamos que hacer nada.En una aplicacin Web clsica tenemos que almacenarlas en algn sitio (una variablede sesin o un campo oculto) para conservarlas entre diferentes peticiones de unamisma pgina.

    5.

    L o s c o n t r o l e s co m p l e j o s n o t i en e n f o r m a d e e n v i a r s u s v a l o r e s a l s e r v i d o r . Siintentamos crear una interfaz avanzada que utilice tablas y otros elementos que noson controles de entrada de datos de formularios de HTML tendremos que inventarnosmecanismos propios para recoger esos datos y enviarlos al servidor.

    6.

    La principal aportacin de ASP.NET al mundo de la programacin es que ha llevado a la Web

    el paradigma de la programacin orientada a eventos propia de aplicaciones de escritorio,ofreciendo:

    Separacin entre diseo y lgica.Componentes de interfaz de usuario, tanto estndar como de terceras empresas opropios.Diseadores grficos.Eventos.Estado.Enlazado a datos desde la interfaz.

    Silverlight

    Al igual que para el desarrollo de aplicaciones de escritorio o Windows Forms tenamos laposibilidad de crear aplicaciones de escritorio de una forma natural o con WPF, en lasaplicaciones Web tenemos la posibilidad de abordar aplicaciones Web de forma tradicional(la que conocemos hasta ahora) y tambin con lo que se ha denominado Silverlight.

    Silverlight, conocido en fase de diseo como WPF/E o WPF extendido, es al igual que ocurracon WPF, "otra forma" de crear aplicaciones Web aportando al usuario un enriquecimientomucho mayor en lo que a la experiencia del usuario se refiere.

    La posibilidad de que el usuario interacte con la aplicacin Software aportndole unaexperiencia de uso y funcionalidad mucho ms agradable y rica, aporta ventajas a lasaplicaciones Web de Silverlight sobre las aplicaciones Web tradicionales, y ms an cuandose tratan aspectos como por por ejemplo la famosa Web 2.0 o SOA.

    El origen de Silverlight es el mismo que WPF, y hay que encontrarlo por lo tanto enMicrosoft .NET Framework 3.0. Sin embargo, al igual que ocurra con WPF, es a partir deMicrosoft .NET Framework 3.5 sobre todo cuando Silverlight est empezando a ser tenida encuenta.

    Silverlight como tal ha evolucionado rpidamente en poco tiempo, pasando de Silverlight1.0 a Silverlight 1.1, y de Silverlight 1.1 a una gran evolucin con Silverlight 2.0.

    Sin embargo, Microsoft ha continuado evolucionando a Silverlight de las caractersticasdemandadas por la comunidad de desarrollo, y as, ha sacado una nueva actualizacin conimportantes mejoras, hablamos de Silverlight 3.0.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    25/449

    Quiere aprender ms acerca de los Servicios Web?Recuerde que existe un curso gratuito complementario a este, que leensear aspectos relacionados nicamente con los Servicios Web y SOA engeneral.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    26/449

    Visual Basic 2010 introduce una novedad aplicable en todos los desarrollos Software querealicemos y en cualquier momento, por ese motivo y antes de empezar a desarrollar elcurso, creo conveniente que lo tenga en consideracin.

    Esa novedad, recibe el nombre de continuacin de lnea implcita.

    En el siguiente ejemplo, podemos ver como usar la antigua forma de realizar unacontinuacin de lnea en Visual Basic:

    Di m sampl e As St r i ng = "Ej empl o con Vi sual Basi c 2010" & _ Envi r onment . NewLi ne & _ "Con sal t o de l i nea"

    Esta antigua forma, que consiste en continuar la lnea utilizando el caracter _al final de lamisma, continua siendo vlido. Sin embargo, a partir de Visual Basic 2010, tambinpodremos continuar la lnea sin necesidad de utilizar dicho caracter.

    Un ejemplo de cdigo compatible con lo que estamos diciendo, sera el siguiente:

    Di m sampl e As St r i ng = "Ej empl o con Vi sual Basi c 2010" &Envi r onment . NewLi ne &"Con sal t o de l i nea"

    Como vemos, la nica diferencia reside en utilizar u omitir el caracter de salto de lnea _que ha sido usado desde que apareciera la primera versin de Visual Basic antes incluso dela plataforma .Net.

    Leccin 1: El sistema de tipos

    Tipos primitivosVariables y constantesEnumeracionesArrays (matrices)

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    27/449

    Leccin 2: Clases y estructuras

    ClasesDefinir una claseInstanciar una claseEstructurasAccesibilidadPropiedadesInterfaces

    Leccin 3: Manejo de excepciones

    Manejo de excepciones

    Leccin 4: Eventos y delegados

    EventosDefinir y producir eventos en una claseDelegadosDefinir un evento bien informado

    Leccin 5: Atributos

    Atributos

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    28/449

    En esta primera leccin veremos los tipos de datos que .NET Framework pone a nuestradisposicin y cmo tendremos que usarlos desde Visual Basic 2010.

    A continuacin daremos un repaso a conceptos bsicos o elementales sobre los tipos dedatos, que si bien nos sern familiares, es importante que lo veamos para podercomprender mejor cmo estn definidos y organizados los tipos de datos en .NET.

    Visual Basic 2010 est totalmente integrado con .NET Framework, por lo tanto, los tipos dedatos que podremos usar con este lenguaje sern los definidos en este "marco de trabajo",por este motivo vamos a empezar usando algunas de las definiciones que nosencontraremos al recorrer la documentacin que acompaa a este lenguaje deprogramacin.

    Los tipos de datos que podemos usar en Visual Basic 2010 son los mismo tipos de datosdefinidos en .NET Framework y por tanto estn soportados por todos los lenguajes que usanesta tecnologa. Estos tipos comunes se conocen como el Common Type System, (CTS), quetraducido viene a significar el sistema de tipos comunes de .NET. El hecho de que los tiposde datos usados en todos los lenguajes .NET estn definidos por el propio Framework nosasegura que independientemente del lenguaje que estemos usando, siempre utilizaremos elmismo tipo interno de .NET, si bien cada lenguaje puede usar un nombre (o alias) parareferirse a ellos, aunque lo importante es que siempre sern los mismos datos,independientemente de cmo se llame en cada lenguaje. Esto es una gran ventaja, ya quenos permite usarlos sin ningn tipo de problemas para acceder a ensamblados creados conotros lenguajes, siempre que esos lenguajes sean compatibles con los tipos de datos de.NET.

    En los siguientes enlaces tenemos los temas a tratar en esta primera leccin del mdulosobre las caractersticas del lenguaje Visual Basic 2010.

    Tipos primitivos

    Sufijos o caracteres y smbolos identificadores para los tiposTipos por valor y tipos por referenciaInferencia de tipos

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    29/449

    Variables y constantes

    Consejo para usar las constantesDeclarar variablesDeclarar variables y asignar el valor inicialEl tipo de datos CharObligar a declarar las variables con el tipo de datosAplicar Option Strict On a un fichero en particularAplicar Option Stict On a todo el proyecto

    Ms opciones aplicables a los proyectosTipos NullablesTipos annimosPropiedades autoimplementadasInicializacin de colecciones

    Enumeraciones: Constantes agrupadas

    El nombre de los miembros de las enumeracionesLos valores de una enumeracin no son simples nmeros

    Arrays (matrices)

    Declarar arraysDeclarar e inicializar un arrayCambiar el tamao de un arrayEliminar el contenido de un arrayLos arrays son tipos por referenciaLiterales de arrays (o matrices)

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    30/449

    Veamos en la siguiente tabla los tipos de datos definidos en .NET Framework y los aliasutilizados en Visual Basic 2010.

    .NET Framework VB 2010

    System.Boolean Boolean

    System.Byte Byte

    System.Int16 Short

    System.Int32 Integer

    System.Int64 LongSystem.Single Single

    System.Double Double

    System.Decimal Decimal

    System.Char Char

    System.String String

    System.Object Object

    System.DateTime Date

    System.SByte SByte

    System.UInt16 UShort

    System.UInt32 UInteger

    System.UInt64 ULong

    Tabla 2.1. Tipos de datos y equivalencia entre lenguajes

    Debemos tener en cuenta, al menos si el rendimiento es una de nuestra prioridades, que lascadenas en .NET son inmutables, es decir, una vez que se han creado no se puedenmodificar y en caso de que queramos cambiar el contenido, .NET se encarga de desechar laanterior y crear una nueva cadena, por tanto si usamos las cadenas para realizarconcatenaciones (unin de cadenas para crear una nueva), el rendimiento ser muy bajo, sibien existe una clase en .NET que es ideal para estos casos y cuyo rendimiento es superioral tipo String: la clase StringBuilder.

    Las ltimas filas mostradas en la tabla son tipos especiales que si bien son parte del sistemade tipos comunes (CTS) no forman parte de la Common Language Specification (CLS), es

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    31/449

    decir la especificacin comn para los lenguajes "compatibles" con .NET, por tanto, siqueremos crear aplicaciones que puedan interoperar con todos los lenguajes de .NET, esostipos no debemos usarlos como valores de devolucin de funciones ni como tipo de datosusado en los argumentos de las funciones, propiedades o procedimientos.

    Los tipos mostrados en la tabla 2.1 son los tipos primitivos de .NET y por extensin deVisual Basic 2010, es decir son tipos "elementales" para los cuales cada lenguaje define supropia palabra clave equivalente con el tipo definido en el CTS de .NET Framework. Todosestos tipos primitivos podemos usarlos tanto por medio de los tipos propios de Visual Basic,

    los tipos definidos en .NET o bien como literales. Por ejemplo, podemos definir un nmeroentero literal indicndolo con el sufijo I: 1 2 3 4 5 I o bien asignndolo a un valor de tipoIntegero a un tipo Sytem.Int32 de .NET. La nica excepcin de los tipos mostrados en latabla 1 es el tipo de datos Object, este es un caso especial del que nos ocuparemos en laprxima leccin.

    Sufijos o caracteres y smbolos identificadores para los tipos

    Cuando usamos valores literales numricos en Visual Basic 2010, el tipo de datos que leasigna el compilador es el tipo Double, por tanto si nuestra intencin es indicar un tipo dedatos diferente podemos indicarlos aadiendo una letra como sufijo al tipo, esto es algo que

    los ms veteranos de VB6 ya estarn acostumbrados, e incluso los ms noveles tambin, enVisual Basic 2010 algunos de ellos se siguen usando, pero el tipo asociado es el equivalenteal de este nuevo lenguaje (tal como se muestra en la tabla 1), por ejemplo para indicar unvalor entero podemos usar la letra I o el signo %, de igual forma, un valor de tipo enterolargo (Long) lo podemos indicar usando L o &, en la siguiente tabla podemos ver loscaracteres o letra que podemos usar como sufijo en un literal numrico para que elcompilador lo identifique sin ningn lugar a dudas.

    Tipo de datos Smbolo Carcter

    Short N.A. S

    Integer % I

    Long & LSingle ! F

    Double # R

    Decimal @ D

    UShort N.A. US

    UInteger N.A. UI

    ULong N.A. UL

    Tabla 2.2. Sufijos para identificar los tipos de datos

    El uso de estos caracteres nos puede resultar de utilidad particularmente para los tipos dedatos que no se pueden convertir en un valor doble.

    Nota:Los sufijos pueden indicarse en minsculas, maysculas o cualquiercombinacin de mayscula y minscula.Por ejemplo, el sufijo de un tipo ULong puede ser: UL, Ul, ul, uL, LU, Lu, lUo lu.Para evitar confusiones, se recomienda siempre indicarlos en maysculas,independientemente de que Visual Basic no haga ese tipo de distincin.

    Por ejemplo, si queremos asignar este valor literal a un tipo Decimal:1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 , tal como vemos en la figura 1, el IDE de Visual Basic 2010 nosindicar que existe un error de desbordamiento (Overflow) ya que esa cifra es muy grandepara usarlo como valor Double, pero si le agregamos el sufijo D o @ ya no habr dudas de

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    32/449

    que estamos tratando con un valor Decimal.

    Figura 2.1. Error de desbordamiento al intentar asignar un valor Double a unavariable Decimal

    Tipos por valor y tipos por referencia

    Los tipos de datos de .NET los podemos definir en dos grupos:

    Tipos por valorTipos por referencia

    Los tipos por valor son tipos de datos cuyo valor se almacena en la pila o en la memoria"cercana", como los numricos que hemos visto. Podemos decir que el acceso al valorcontenido en uno de estos tipos es directo, es decir se almacena directamente en lamemoria reservada para ese tipo y cualquier cambio que hagamos lo haremos directamentesobre dicho valor, de igual forma cuando copiamos valores de un tipo por valor a otro,estaremos haciendo copias independientes.

    Por otro lado, los tipos por referencia se almacenan en el "monto" (heap) o memoria

    "lejana", a diferencia de los tipos por valor, los tipos por referencia lo nico que almacenanes una referencia (o puntero) al valor asignado. Si hacemos copias de tipos por referencia,realmente lo que copiamos es la referencia propiamente dicha, pero no el contenido.

    Estos dos casos los veremos en breve con ms detalle.

    Inferencia de tipos

    Una de las caractersticas nuevas en Visual Basic 2008 y Visual Basic 2010 es la inferenciade tipos.

    Se conoce como inferencia de tipos a la caracterstica de Visual Basic para inferir el tipo deun dato al ser inicializado.

    Para que la inferencia de tipos sea efectiva, deberemos activar la opcin Option Infer aTrue, aunque por defecto, ese es el valor que tiene el compilador de Visual Basic. Sinembargo, si se hace una migracin de una aplicacin de Visual Basic a Visual Basic 2010, elvalor de esta opcin ser False.

    Supongamos por lo tanto, la siguiente declaracin:

    Di m datoDecl ar ado = 2010

    En este ejemplo, la variable datoDeclarado, ser una variable de tipo Integer (Int32).

    Si deseamos cambiar el tipo de dato a un tipo Int64 por ejemplo, el compilador nosdevolver un error. As, el siguiente ejemplo no ser vlido en Visual Basic 2010 con la

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    33/449

    opcin de inferencia activada:

    Di m datoDecl ar ado = 2010

    dat oDecl ar ado = I nt64. MaxVal ue

    Ahora bien, si cambiamos el valor de Option Infer a False, el mismo ejemplo sercorrecto.

    Dnde est la diferencia?.

    En este ltimo caso, el caso de tener desactivada la opcin de inferencia, la declaracin dela variable datoDeclarado nos indica que es un tipo de dato Object en su origen, y que aldarle un valor Integer, sta funciona como una variable entera. Al cambiar su valor aLong, esta variable que es de tipo Object, cambia sin problemas a valor Long.En todo este proceso, hay un problema claro de rendimiento con acciones de boxing yunboxing que no seran necesarias si tipramos la variable con un tipo concreto.Eso es justamente lo que hace la opcin Option Infer por nosotros. Nos permite declararuna variable con el tipo inferido, y ese tipo de datos se mantiene dentro de la aplicacin,por lo que nos da la seguridad de que ese es su tipo de dato, y que ese tipo de dato no va avariar.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    34/449

    Variables y constantes

    Disponer de todos estos tipos de datos no tendra ningn sentido si no pudiramos usarlos dealguna otra forma que de forma literal. Y aqu es donde entran en juego las variables y constantes,no vamos a contarte qu son y para que sirven, salvo en el caso de las constantes, ya que no todoslos desarrolladores las utilizamos de la forma adecuada.

    Consejo para usar las constantes

    Siempre que tengamos que indicar un valor constante, ya sea para indicar el mximo o mnimopermitido en un rango de valores o para comprobar el trmino de un bucle, deberamos usar unaconstante en lugar de un valor literal, de esta forma si ese valor lo usamos en varias partes denuestro cdigo, si en un futuro decidimos que dicho valor debe ser diferente, nos resultar ms

    fcil realizar un solo cambio que cambiarlo en todos los sitios en los que lo hemos usado, ademsde que de esta forma nos aseguramos de que el cambio se realiza adecuadamente y no tendremosque preocuparnos de las consecuencias derivadas de no haber hecho el cambio en todos los sitiosque deberamos.

    Las constantes se definen utilizando la instruccin Constseguida del nombre, opcionalmentepodemos indicar el tipo de datos y por ltimo una asignacin con el valor que tendr. Comoveremos en la siguiente seccin, podemos obligar a Visual Basic 2010 a que en todas lasconstantes (y variables) que declaremos, tengamos que indicar el tipo de datos.Para declarar una constante lo haremos de la siguiente forma:

    Const maxi mo As I nt eger = 12345678

    Declarar variables

    La declaracin de las variables en Visual Basic 2010 se hace por medio de la instruccin Dimseguida del nombre de la constante y del tipo de datos que esta contendr. Con una mismainstruccin Dim podemos declarar ms de una variable, incluso de tipos diferentes, tal y comoveremos a continuacin.

    La siguiente lnea de cdigo declara una variable de tipo entero:

    Di m i As I nt eger

    Tal y como hemos comentado, tambin podemos declarar en una misma lnea ms de una variable:

    Di m a, b, c As I nt eger

    En este caso, las tres variables las estamos definiendo del mismo tipo, que es el indicado al final de

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    35/449

    la declaracin.

    Nota:Como hemos comentado, en Visual Basic 2010 se pueden declarar las constantes yvariables sin necesidad de indicar el tipo de datos que contendrn, pero debido aque eso no es una buena prctica, a lo largo de este curso siempre declararemoslas variables y constantes con el tipo de datos adecuado a su uso.

    Declarar variables y asignar el valor inicial

    En Visual Basic 2010 tambin podemos inicializar una variable con un valor distinto alpredeterminado, que en los tipos numricos es un cero, en las fechas es el 1 de enero del ao 1 alas doce de la madrugada (#01/01/0001 12:00:00AM#) y en la cadenas es un valor nulo(Nothing), para hacerlo, simplemente tenemos que indicar ese valor, tal como veremos es muyparecido a como se declaran las constantes. Por ejemplo:

    Di m a As I nt eger = 10

    En esa misma lnea podemos declarar y asignar ms variables, pero todas deben estar indicadascon el tipo de datos:

    Di m a As I nt eger = 10, b As I nt eger = 25

    Por supuesto, el tipo de datos puede ser cualquiera de los tipos primitivos:

    Di m a As I nt eger = 10, b As I nt eger = 25, s As Str i ng = "Hol a"

    Aunque para que el cdigo sea ms legible, y fcil de depurar, no deberamos mezclar en unamisma instruccin Dim ms de un tipo de datos.

    Nota:Es importante saber que en las cadenas de Visual Basic 2010 el valor de unavariable de tipo String no inicializada NO es una cadena vaca, sino un valor nulo

    (Nothing).

    El tipo de datos Char

    En Visual Basic 2010 podemos declarar valores de tipo Char, este tipo de datos es un carcterUnicode y podemos declararlo y asignarlo a un mismo tiempo. El problema con el que nos podemosencontrar es a la hora de indicar un carcter literal.Podemos convertir un valor numrico en un carcter o bien podemos convertir un carcter en sucorrespondiente valor numrico.

    Di m c As Charc = Chr ( 65)

    Di m n As Byt en = Asc( c)

    En Visual Basic 2010 los tipos Charse pueden asignar a variables de tipo String y se har unaconversin automtica sin necesidad de utilizar funciones de conversin.

    Si nuestra intencin es asignar un valor Chara una variable, adems de la funcin Chr, podemoshacerlo con un literal, ese valor literal estar encerrado entre comillas dobles, (al igual que unacadena), aunque para que realmente sea un carcter debemos agregarle una c justo despus delcierre de las comillas dobles:

    Di m c As Char = "A"c

    Obligar a declarar las variables con el tipo de datos

    Visual Basic 2010 nos permite, (lamentablemente de forma predeterminada), utilizar las variables

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    36/449

    y constantes sin necesidad de indicar el tipo de datos de estas, pero, como comentbamos alprincipio, podemos obligar a que nos avise cuando no lo estamos haciendo, ya que como decamosen la nota, es una buena costumbre indicar siempre el tipo de datos que tendrn nuestrasvariables y constantes.Esa obligatoriedad la podemos aplicar a todo el proyecto o a un mdulo en particular, para ellotenemos que usar la instruccin Option Strict On, una vez indicado, se aplicar a todo el cdigo, nosolo a las declaraciones de variables, constantes o al tipo de datos devuelto por las funciones ypropiedades, sino tambin a las conversiones y asignaciones entre diferentes tipos de datos.

    No debemos confundir Option Strictcon Option Explicit, este ltimo, sirve para que siempretengamos que declarar todas las variables, mientras que el primero lo que hace es obligarnos a queesas declaraciones tengan un tipo de datos.

    Tanto una como la otra tienen dos estados: conectado o desconectado dependiendo de queagreguemos On u Offrespectivamente.

    Insistimos en la recomendacin de que siempre debemos "conectar" estas dos opciones, si bienOption Explicit On ya viene como valor por defecto, cosa que no ocurre con Option Strict, que pordefecto est desconectado.

    Aplicar Option Strict On a un fichero en particular

    Cuando agregbamos un nuevo fichero a nuestro proyecto de Visual Basic 2010 si ya tenemospredefinida las opciones "estrictas", como es el caso de Option Explicit On, estas no se aadirn adicho fichero, (en un momento veremos cmo hacerlo para que siempre estn predefinidas), peroeso no significa que no se aplique, aunque siempre podemos escribir esas instrucciones (con elvalor On al final) en cada uno de los ficheros de cdigo que agreguemos a nuestro proyecto. Si nosdecidimos a aadirlas a los ficheros, esas lneas de cdigo deben aparecer al principio del fichero ysolamente pueden estar precedidas de comentarios.

    En la figura 2.1 mostrada en la leccin anterior, tenemos una captura del editor de Visual Basic2010 en la que hemos indicado que queremos tener comprobacin estricta.

    Aplicar Option Stict On a todo el proyecto

    Tambin podemos hacer que Option Strictfuncione igual que Option Explicit, es decir, que estactivado a todo el proyecto, en este caso no tendramos que indicarlo en cada uno de los ficherosde cdigo que formen parte de nuestro proyecto, si bien solamente ser aplicable a los que notengan esas instrucciones, aclaremos esto ltimo: si Option Strict(u Option Explicit) est definidode forma global al proyecto, podemos desactivarlo en cualquiera de los ficheros, para ellosimplemente habra que usar esas declaraciones pero usando Offen lugar de On. De igual forma, siya est definido globalmente y lo indicamos expresamente, no se producir ningn error. Loimportante aqu es saber que siempre se usar el estado indicado en cada fichero,independientemente de cmo lo tengamos definido a nivel de proyecto.

    Para que siempre se usen estas asignaciones en todo el proyecto, vamos a ver cmo indicarlo en el

    entorno de Visual Basic 2010.

    Abrimos Visual Studio 2010 y una vez que se haya cargado, (no hace falta crear ningn nuevoproyecto, de este detalle nos ocuparemos en breve), seleccionamos la opcinHerramientas>Opciones... se mostrar un cuadro de dilogo y del panel izquierdo seleccionamosla opcin Proyectos y soluciones, la expandimos y seleccionamos Valores predeterminados deVB y veremos ciertas opciones, tal como podemos comprobar en la figura 2.2:

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    37/449

    Figura 2.2. Opciones de proyectos (opciones mnimas)

    De la lista despegable Option Strict, seleccionamos On. Por defecto ya estarn seleccionadas lasopciones On de Option Explicit y Binary de Option Compare, por tanto no es necesario realizarningn cambio ms, para aceptar los cambios y cerrar el cuadro de dilogo, presionamos en elbotn Aceptar.

    Si en la ventana de opciones no aparece toda la configuracin podemos hacer que se muestrentodas las disponibles. Para hacerlo, debemos marcar la casilla que est en la parte inferiorizquierda en la que podemos leer: Mostrar todas las configuraciones, al seleccionar esa opcinnos mostrar un nmero mayor de opciones, tal como podemos ver en la figura 2.3:

    Figura 2.3. Opciones de proyectos (todas las opciones)

    Desde este momento el compilador de Visual Basic se volver estricto en todo lo relacionado a lasdeclaraciones de variables y conversiones, tal como vemos en la figura 2.4 al intentar declarar unavariable sin indicar el tipo de datos.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    38/449

    Figura 2.4. Aviso de Option Strict al declarar una variable sin tipo

    Nota:Una de las ventajas del IDE (Integrated Development Environment, entorno dedesarrollo integrado) de Visual Basic 2010 es que nos avisa al momento decualquier fallo que cometamos al escribir el cdigo, este "pequeo" detalle, aunque

    alguna veces puede llegar a parecer fastidioso, nos facilita la escritura de cdigo,ya que no tenemos que esperar a realizar la compilacin para que tengamosconstancia de esos fallos.

    Ms opciones aplicables a los proyectos

    Aunque en estos mdulos no trataremos a fondo el entorno de desarrollo, ya que la finalidad deeste curso online es tratar ms en el cdigo propiamente dicho, vamos a mostrar otro de los sitiosen los que podemos indicar dnde indicar que se haga una comprobacin estricta de tipos y, comoveremos, tambin podremos indicar algunas "nuevas peculiaridades" de Visual Basic 2010, todasellas relacionadas con el tema que estamos tratando.

    Cuando tengamos un proyecto cargado en el IDE de Visual Studio 2010, (pronto veremos cmocrear uno), podemos mostrar las propiedades del proyecto, para ello seleccionaremos del menProyecto la opcin Propiedades de y tendremos un cuadro de dilogocomo el mostrado en la figura 2.5.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    39/449

    Figura 2.5. Ficha Compilar de las opciones del proyecto actual

    Seleccionando la ficha Compilar, adems de las tpicas opciones de Option Strict, OptionExplicit,Option Compare y Option Infer, (estas asignaciones solo sern efectivas para elproyecto actual), tendremos cmo queremos que reaccione el compilador si se cumple algunas delas condiciones indicadas. Entre esas condiciones, tenemos algo que muchos desarrolladores deVisual Basic siempre hemos querido tener: Que nos avise cuando una variable la hemos declaradopero no la util izamos (Variable local no utilizada). Al tener marcada esta opcin (normalmentecomo una Advertencia), si hemos declarado una variable y no la usamos en el cdigo, (siempreque no le hayamos asignado un valor al declararla), nos avisar, tal como podemos ver en la figura2.6:

    Figura 2.6. Aviso de variable no usada

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    40/449

    Tipos Nullables

    Otra interesantsima caracterstica introducida en Visual Basic 2008 y utilizable en Visual Basic2010 que conviene conocer, es lo que se denominan tipos Nullables o anulables.

    Los tipos anulables no son nuevos en Visual Basic, de hecho su origen lo encontramos en VisualStudio 2005, aunque eso s, implementando la clase Nullable(Of T).

    Con Visual Basic 2008 y Visual Basic 2010 no es necesario declarar ninguna clase paraimplementar tipos anulables dentro de nuestras aplicaciones, y podemos declararlos de forma

    directa.

    Un tipo de dato anulable nos permitir declarar una variable que podr tener un tipo de dato nulo.

    Si hemos estado atentos hasta ahora, hemos podido ver que las variables numricas por ejemplo,se inicializan a 0.Si quisiramos por la razn que fuera, declarar esa variable como nula para saber si en undeterminado momento ha cambiado de valor o cualquier otra accin, deberamos utilizar los tiposde datos anulables, o bien, utilizar tcnicas ms rudimentarias como una variable de tipo Booleanque nos permitiera saber si ha habido un cambio de valor en una variable, sin embargo, coincidirconmigo en que el uso de un tipo de datos anulable es ms natural y directo.

    De esta forma, podramos trabajar con tipos de datos anulables o que los declararemos como nulos.A continuacin veremos un ejemplo:

    Di m val or As I nt eger ?

    Para acceder al valor de un tipo anulable, podramos hacerlo de la forma habitual, ahora bien, si nosabemos si el valor es nulo o no, podramos acceder a su valor preguntando por l mediante lapropiedad HasValue. La propiedad Value nos indicar tambin, el valor de esa variable.Un ejemplo que aclare esta explicacin es el que podemos ver a continuacin:

    Di m val or As I nt eger ?I f Val or. HasVal ue Then

    MessageBox. Show( val or . Val ue)End I f

    Otra caracterstica de los tipos anulables es la posibilidad de utilizar la funcin GetValueOrDefault.Esta funcin nos permitir acceder al valor de la variable si no es nulo, y al valor que leindiquemos si es nulo.

    Un breve ejemplo de este uso es el que se indica a continuacin:

    Di m val or As I nt eger ?val or = 2010MessageBox. Show( val or . GetVal ueOr Def aul t ( 2012) )

    End I f

    En este ejemplo, el compilador nos devolvera el valor 2010, ya que GetValueOrDefaultsabe que lavariable no posee un valor nulo y que por lo tanto, debe obtener el valor no nulo de la variableanulable.En el caso de que no hubiramos dado ningn valor a la variable, la aplicacin obtendra el valor2012.

    Tipos annimos

    Esta caracterstica de Visual Basic 2008 y Visual Basic 2010, nos permite declarar los tipos dedatos de forma implcita desde el cdigo de nuestras aplicaciones.

    Un ejemplo prctico de declaracin de tipos annimos es el siguiente:

    Di m decl ar aci on = New Wi t h {. Nombre = "Car l os" , . Edad = 27}MessageBox. Show( St r i ng. Format ( "{0} t i ene {1} aos" , _

    decl araci on. Nombr e, decl araci on. Edad) )

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    41/449

    Como podemos ver, en el ejemplo anterior hemos declarado un objeto al que no hemos indicadoningn tipo de dato concreto, pero a la hora de crear ese objeto, hemos creado implcitamente unmiembro Nombre y un miembro Edad.

    Propiedades autoimplementadas

    Esta caracterstica de Visual Basic 2010 nos permite declarar propiedades y autoimplementarlascon un valor determinado.

    De esta manera, podremos inicializar una propiedad con un valor determinado.

    Un sencillo ejemplo de uso de esta caracterstica es el siguiente:

    Pr oper t y I d As I nt eger = 0 Pr oper t y NamePer son As St r i ng = "" Pr oper t y AgePer son As Byt e = 0

    En este ejemplo, se han creado tres propiedades, una de ellas de tipo Int32, otra de tipo String, yuna tercera de tipo Byte.Estas propiedades estn inicializadas con valores por defecto.

    Inicializacin de colecciones

    Otra caracterstica muy til en Visual Basic es la inicializacin de colecciones, que nos permiteinicializar una coleccin de datos con valores de forma directa.

    La mejor forma de entender esto es viendo un ejemplo.

    Supongamos la siguiente interfaz en Visual Basic:

    I nt er f ace I Per son

    Pr oper t y I d As I nt eger

    Pr oper t y Name As St r i ng Pr oper t y Age As Byte

    End I nt er f ace

    Ahora, crearemos una clase que implemente la interfaz IPerson:

    Publ i c Cl ass Est udi ant e I mpl ement s I Per son

    Pr oper t y I d As I nteger I mpl ement s I Per son. I d

    Pr oper t y Name As St r i ng I mpl ement s I Per son. Name

    Pr oper t y Age As Byt e I mpl ements I Per son. Age

    End Cl ass

    Ya tenemos la interfaz y la clase que implementa la interfaz, por lo que ahora, lo tenemos quehacer es consumir la clase Estudiante e inicializar los elementos de la coleccin.

    Un ejemplo prctico de inicializacin es el que se indica a continuacin:

    Pr oper t y St udent Col l ect i on As New Li s t ( Of Est udi ant e)

    . . .

    Me. St udent Col l ect i on. Add( New Est udi ant e Wi t h {. I d = 1, . Name = "Lui sa" , . Age = 25}) Me. St udent Col l ect i on. Add( New Est udi ant e Wi t h {. I d = 2, . Name = "Ant oni o", . Age = 27}) Me. St udent Col l ect i on. Add( New Est udi ant e Wi t h {. I d = 3, . Name = "J uan" , . Age = 26})

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    42/449

    Como podemos apreciar, al mismo tiempo que declaramos un nuevo objeto de tipo Estudiante,inicializamos sus propiedades con valores, de forma que asignamos esos elementos a la coleccincon valores directos.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    43/449

    Una enumeracin es una serie de constantes que estn relacionadas entre s. La utilidad delas enumeraciones es ms manifiesta cuando queremos manejar una serie de valoresconstantes con nombre, es decir, podemos indicar un valor, pero en lugar de usar un literalnumrico, usamos un nombre, ese nombre es al fin y al cabo, una constante que tiene unvalor numrico.

    En Visual Basic 2010 las enumeraciones pueden ser de cualquier tipo numrico integral,incluso enteros sin signo, aunque el valor predefinido es el tipo Integer.Podemos declarar una enumeracin de varias formas:

    1- Sin indicar el tipo de datos, por tanto sern de tipo Integer:

    Enum Col or esRoj oVer deAzul

    End Enum

    2- Concretando explcitamente el tipo de datos que realmente tendr:

    Enum Col or es As LongRoj oVer deAzul

    End Enum

    En este segundo caso, el valor mximo que podemos asignar a los miembros de unaenumeracin ser el que pueda contener un tipo de datos Long.

    3- Indicando el atributo FlagsAttibute, (realmente no hace falta indicar el sufijo Attributecuando usamos los atributos) de esta forma podremos usar los valores de la enumeracinpara indicar valores que se pueden "sumar" o complementar entre s, pero sin perder elnombre, en breve veremos qu significa esto de "no perder el nombre".

    _Enum Col or es As Byt e

    Roj o = 1Ver de = 2

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    44/449

    Azul = 4End Enum

    Nota:Los atributos los veremos con ms detalle en otra leccin de este mismomdulo.

    El nombre de los miembros de las enumeraciones

    Tanto si indicamos o no el atributo Flags a una enumeracin, la podemos usar de estaforma:

    Di m c As Col ores = Col ores. Azul Or Col or es. Roj o

    Es decir, podemos "sumar" los valores definidos en la enumeracin. Antes de explicar condetalle que beneficios nos puede traer el uso de este atributo, veamos una caracterstica delas enumeraciones.

    Como hemos comentado, las enumeraciones son constantes con nombres, pero en VisualBasic 2010 esta definicin llega ms lejos, de hecho, podemos saber "el nombre" de un

    valor de una enumeracin, para ello tendremos que usar el mtodo ToString, el cual se usapara convertir en una cadena cualquier valor numrico.Por ejemplo, si tenemos la siguiente asignacin:

    Di m s As St r i ng = Col or es. Azul . ToSt r i ng

    La variable s contendr la palabra "Azul" no el valor 4.

    Esto es aplicable a cualquier tipo de enumeracin, se haya o no usado el atributoFlagsAttribute.

    Una vez aclarado este comportamiento de las enumeraciones en Visual Basic 2010, veamosque es lo que ocurre cuando sumamos valores de enumeraciones a las que hemos aplicadoel atributo Flags y a las que no se lo hemos aplicado. Empecemos por este ltimo caso.

    Si tenemos este cdigo:

    Enum Col or es As Byt eRoj o = 1Ver de = 2Azul = 4

    End Enum

    Di m c As Col ores = Col ores. Azul Or Col or es. Roj o

    Di m s As St r i ng = c. ToSt r i ng

    El contenido de la variable s ser "5", es decir, la representacin numrica del valorcontenido: 4 + 1, ya que el valor de la constante Azul es 4 y el de la constante Rojo es 1.

    Pero si ese mismo cdigo lo usamos de esta forma (aplicando el atributo Flags a laenumeracin):

    _Enum Col or es As Byt e

    Roj o = 1Ver de = 2Azul = 4

    End Enum

    Di m c As Col ores = Col ores. Azul Or Col or es. Roj o

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    45/449

    Di m s As St r i ng = c. ToSt r i ng

    El contenido de la variable s ser: "Rojo, Azul", es decir, se asignan los nombres de losmiembros de la enumeracin que intervienen en ese valor, no el valor "interno".

    Los valores de una enumeracin no son simples nmeros

    Como hemos comentado, los miembros de las enumeraciones realmente son valores de un

    tipo de datos entero (en cualquiera de sus variedades) tal como podemos comprobar en lafigura 2.7:

    Figura 2.7. Los tipos subyacentes posibles de una enumeracin

    Por tanto, podemos pensar que podemos usar cualquier valor para asignar a una variabledeclarada como una enumeracin, al menos si ese valor est dentro del rango adecuado.En Visual Basic 2010 esto no es posible, al menos si lo hacemos de forma "directa" y conOption Strict conectado, ya que recibiremos un error indicndonos que no podemosconvertir, por ejemplo, un valor entero en un valor del tipo de la enumeracin. En la figura2.8 podemos ver ese error al intentar asignar el valor 3 a una variable del tipo Colores

    (definida con el tipo predeterminado Integer).

    Figura 2.8. Error al asignar un valor "normal" a una variable del tipo Colores

    El error nos indica que no podemos realizar esa asignacin, pero el entorno integrado deVisual Studio 2010 tambin nos ofrece alternativas para que ese error no se produzca, esaayuda se obtiene presionando en el signo de admiracin que tenemos justo donde est elcursor del mouse, pero no solo nos dice cmo corregirlo, sino que tambin nos da laposibilidad de que el propio IDE se encargue de corregirlo, tal como podemos apreciar en lafigura 2.9.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    46/449

    Figura 2.9. Opciones de correccin de errores

    Lo nico que tendramos que hacer es presionar en la sugerencia de correccin, que en estecaso es la nica que hay, pero en otros casos pueden ser varias las opciones y tendramosque elegir la que creamos adecuada.

    El cdigo final (una vez corregido) quedara de la siguiente forma:

    Di m c As Col or es = CType( 3, Col or es)

    CType es una de las formas que nos ofrece Visual Basic 2010 de hacer conversiones entrediferentes tipos de datos, en este caso convertimos un valor entero en uno del tipo Colores.

    Si compilamos y ejecutamos la aplicacin, sta funcionar correctamente.Aunque sabemos que es posible que usando CType no asignemos un valor dentro del rangopermitido. En este caso, el valor 3 podramos darlo por bueno, ya que es la suma de 1 y 2(Rojo y Verde), pero que pasara si el valor asignado es, por ejemplo, 15? En teora nodeberamos permitirlo.

    Estas validaciones podemos hacerlas de dos formas:1- Con la clsica solucin de comprobar el valor indicado con todos los valores posibles.2- Usando funciones especficas del tipo Enum. Aunque en este ltimo caso, solo podremoscomprobar los valores definidos en la enumeracin.En el siguiente ejemplo podemos hacer esa comprobacin.

    Sub most r arCol or ( ByVal c As Col or es) ' compr obar si el val or i ndi cado es cor r ect o ' s i no est def i ni do, usar el val or Azul I f [ Enum] . I sDef i ned( Get Type( Col ores) , c) = Fal seThen

    c = Col ores. Azul End I f

    Consol e. Wr i t eLi ne( "El col or es {0}", c)End Sub

    Este cdigo lo que hace es comprobar si el tipo de datos Colores tiene definido el valorcontenido en la variable c, en caso de que no sea as, usamos un valor predeterminado.

    Nota:La funcin IsDefinedslo comprueba los valores que se han definido en laenumeracin, no las posibles combinaciones que podemos conseguirsumando cada uno de sus miembros, incluso aunque hayamos usado elatributo FlagsAttribute.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    47/449

    Los arrays (o matrices) nos permitirn agrupar valores que de alguna forma queremos queestn relacionados entre si.

    Nota:Esta es la definicin usada en la documentacin de Visual Studio sobre ques una matriz:"Una matriz es una estructura de datos que contiene una serie de variablesdenominadas elementos de la matriz."Aclaramos este punto, porque la traduccin en castellano de Array puede

    variar dependiendo del pas (arreglos, matrices, etc). Aqu utilizaremos lausada a lo largo de la documentacin de Visual Studio.

    Declarar arrays

    En C# los arrays se definen indicando un par de corchetes en el tipo de datos.

    En Visual Basic 2010 la declaracin de un array la haremos usando un par de parntesis enel nombre de la variable o del tipo, en el siguiente ejemplo declaramos un array de tipoString llamado nombres:

    Di m nombr es( ) As St r i ng

    Di m nombr es As St r i ng( )

    Estas dos formas son equivalentes.

    Tambin podemos indicar el nmero de elementos que contendr el array o matriz:

    Di m nombr es( 10) As St r i ng

    Pero solo podemos hacerlo en el nombre, si esa cantidad de elementos lo indicamos en eltipo, recibiremos un error indicndonos que "los lmites de la matriz no pueden aparecer enlos especificadores del tipo".

    Al declarar un array indicando el nmero de elementos, como es el caso anterior, lo queestamos definiendo es un array de 11 elementos: desde cero hasta 10, ya que en Visual

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    48/449

    Basic 2010, al igual que en el resto de lenguajes de .NET, todos los arrays deben tenercomo ndice inferior el valor cero.

    Para que quede claro que el lmite inferior debe ser cero, en Visual Basic 2010 podemosusar la instruccin 0 T opara indicar el valor mximo del ndice superior, ya que, tal comopodemos comprobar si vemos 0 To 10, quedar claro que nuestra intencin es declarar unarray con 11 elementos, o al menos nuestro cdigo resultar ms legible:

    Di m nombr es( 0 To 10) As St r i ng

    Declarar e inicializar un array

    En Visual Basic 2010 tambin podemos inicializar un array al declararlo, para ello debemosponer los valores a asignar dentro de un par de llaves, tal como vemos en el siguienteejemplo:

    Di m nombr es( ) As St r i ng = {"Pepe", "J uan", "Lui sa"}

    Con el cdigo anterior estamos creando un array de tipo String con tres valores cuyosndices van de cero a dos.

    En este caso, cuando iniciamos el array al declararlo, no debemos indicar el nmero deelementos que tendr ese array, ya que ese valor lo averiguar el compilador cuando hagala asignacin. Tampoco es vlido indicar el nmero de elementos que queremos que tenga ysolo asignarle unos cuantos menos (o ms), ya que se producir un error en tiempo decompilacin.

    Si el array es bidimensional (o con ms dimensiones), tambin podemos inicializarlos aldeclararlo, pero en este caso debemos usar doble juego de llaves:

    Di m nombres( , ) As St r i ng = {{" J uan", " Pepe"}, {"Ana" , "Eva"}}

    En este cdigo tendramos un array bidimensional con los siguientes valores:

    nombres(0,0)= Juannombres(0,1)= Pepenombres(1,0)= Ananombres(1,1)= Eva

    Como podemos ver en la declaracin anterior, si definimos arrays con ms de unadimensin, debemos indicarlas usando una coma para separar cada dimensin, o lo que esms fcil de recordar: usando una coma menos del nmero de dimensiones que tendr elarray. En los valores a asignar, usaremos las llaves encerradas en otras llaves, segn el

    nmero de dimensiones.

    Aunque, la verdad, es que hay algunas veces hay que hacer un gran esfuerzo mental paraasociar los elementos con los ndices que tendrn en el array, por tanto, algunas vecespuede que resulte ms legible si indentamos o agrupamos esas asignaciones, tal comovemos en el siguiente cdigo:

    Di m nomTr i ( , , ) As St r i ng = _{ _

    {{"J uan" , "Pepe"}, {"Lui sa" , "Eva"}}, _{{"A" , "B"}, {"C" , "D"}} _

    }

    Consol e. Wr i t eLi ne( nomTr i ( 0, 0, 0) ) ' J uanConsol e. Wr i t eLi ne( nomTr i ( 0, 0, 1) ) ' PepeConsol e. Wr i t eLi ne( nomTr i ( 0, 1, 0) ) ' Lui s aConsol e. Wr i t eLi ne( nomTr i ( 0, 1, 1) ) ' Eva

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    49/449

    Consol e. Wr i t eLi ne( nomTr i ( 1, 0, 0) ) ' AConsol e. Wr i t eLi ne( nomTr i ( 1, 0, 1) ) ' BConsol e. Wr i t eLi ne( nomTr i ( 1, 1, 0) ) ' CConsol e. Wr i t eLi ne( nomTr i ( 1, 1, 1) ) ' D

    Tal como podemos comprobar, asi es ms legible. Por suerte tenemos el carcter del guinbajo para continuar lneas de cdigo, aunque esto ya no es necesario como hemos podidover al principio de este tutorial.

    Cambiar el tamao de un array

    Para cambiar el tamao de un array, usaremos la instruccin ReDim, esta instruccin solo lapodemos usar para cambiar el tamao de un array previamente declarado, no para declararun array, ya que siempre hay que declarar previamente los arrays antes de cambiarles eltamao.

    Di m nombr es( ) As St r i ng. . .ReDi m nombr es( 3)nombr es( 0) = "J uan"nombr es( 1) = "Pepe"

    La mayor utilidad de esta instruccin, es que podemos cambiar el tamao de un array ymantener los valores que tuviera anteriormente, para lograrlo debemos usar ReDimPreserve.

    ReDi m Preserve nombr es( 3)nombr es( 2) = "Ana"nombr es( 3) = "Eva"

    En este ejemplo, los valores que ya tuviera el array nombres, se seguiran manteniendo, yse asignaran los nuevos.

    Si bien tanto ReDim como ReDim Preserve se pueden usar en arrays de cualquier nmerode dimensiones, en los arrays de ms de una dimensin solamente podemos cambiar eltamao de la ltima dimensin.

    Eliminar el contenido de un array

    Una vez que hemos declarado un array y le hemos asignado valores, es posible que nosinterese eliminar esos valores de la memoria, para lograrlo, podemos hacerlo de tresformas:

    Redimensionando el array indicando que tiene cero elementos, aunque en el mejor delos casos, si no estamos trabajando con arrays de ms de una dimensin, tendramosun array de un elemento, ya que, como hemos comentado anteriormente, los arrays de.NET el ndice inferior es cero.

    1.

    Usar la instruccin Erase. La instruccin Erase elimina totalmente el array de lamemoria.

    2.

    Asignar un valor Nothing al array. Esto funciona en Visual Basic 2010 porque losarrays realmente son tipos por referencia.

    3.

    Los arrays son tipos por referencia

    Como acabamos de ver, en Visual Basic 2010 los arrays son tipos por referencia, y tal comocomentamos anteriormente, los tipos por referencia realmente lo que contienen son unareferencia a los datos reales no los datos propiamente dichos.

    Cual es el problema?

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    50/449

    Vemoslo con un ejemplo y as lo tendremos ms claro.

    Di m nombr es( ) As St r i ng = {"J uan", "Pepe", "Ana", "Eva"}

    Di m otros( ) As St r i ng

    ot r os = nombr es

    nombr es( 0) = "Ant oni o"

    En este ejemplo definimos el array nombres y le asignamos cuatro valores. A continuacindefinimos otro array llamado otros y le asignamos lo que tiene nombres. Por ltimoasignamos un nuevo valor al elemento cero del array nombres.Si mostramos el contenido de ambos arrays nos daremos cuenta de que realmente soloexiste una copia de los datos en la memoria, y tanto nombres(0) como otros(0)contienen el nombre "Antonio".

    Qu ha ocurrido?

    Que debido a que los arrays son tipos por referencia, solamente existe una copia de losdatos y tanto la variable nombres como la variable otros lo que contienen es una referencia(o puntero) a los datos.

    Si realmente queremos tener copias independientes, debemos hacer una copia del arraynombres en el array otros, esto es fcil de hacer si usamos el mtodo CopyTo. ste mtodoexiste en todos los arrays y nos permite copiar un array en otro empezando por el ndiceque indiquemos.El nico requisito es que el array de destino debe estar inicializado y tener espaciosuficiente para contener los elementos que queremos copiar.

    En el siguiente cdigo de ejemplo hacemos una copia del contenido del array nombres enel array otros, de esta forma, el cambio realizado en el elemento cero de nombres noafecta al del array otros.

    Di m nombr es( ) As St r i ng = {"J uan", "Pepe", "Ana", "Eva"}

    Di m otros( ) As St r i ng

    ReDi m ot r os( nombres. Lengt h)

    nombres. CopyTo(ot r os, 0)

    nombr es( 0) = "Ant oni o"

    Adems del mtodo CopyTo, los arrays tienen otros miembros que nos pueden ser deutilidad, como por ejemplo la propiedad Length usada en el ejemplo para saber cuantos

    elementos tiene el array nombres.

    Para averiguar el nmero de elementos de un array, (realmente el ndice superior),podemos usar la funcin UBound.Tambin podemos usar la funcin LBound, (que sirve para averiguar el ndice inferior de unarray), aunque no tiene ningn sentido en Visual Basic 2010, ya que, como hemoscomentado, todos los arrays siempre tienen un valor cero como ndice inferior.

    Para finalizar este tema, solo nos queda por decir, que los arrays de Visual Basic 2010realmente son tipos de datos derivados de la claseArrayy por tanto disponen de todos losmiembros definidos en esa clase, aunque de esto hablaremos en la prxima leccin, en la

    que tambin tendremos la oportunidad de profundizar un poco ms en los tipos porreferencia y en como podemos definir nuestros propios tipos de datos, tanto por referenciacomo por valor.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    51/449

    Literales de arrays (o matrices)

    Otra caracterstica de Visual Basic 2010 es la aplicacin de los denominados literales dearrays o matrices.

    La idea es que Visual Basic infiera por nosotros el tipo de dato de forma directa.

    Esto representa una buena prctica aunque nos impide hacer cosas que antes podamoshacer sin complicaciones.

    Por ejemplo, pensemos en el siguiente ejemplo de Visual Basic 2008:

    Di m ej empl oMat r i z( ) = {2009, 2010, 2011, 2012}

    En este ejemplo, habremos creado una matriz de 4 elementos. Sin embargo, podramoscambiar uno de sus elementos a otro valor de diferente tipo, como por ejemplo:

    ej empl oMat r i z( 1) = "s"

    De esta manera, tendremos un resultado: 2009, "s", 2011, 2012.

    Esto es as, porque la matriz ejemploMatrizes de tipo Object.

    Sin embargo, esto ha cambiado. Ahora, podemos declarar literales de matrices, haciendoque estas matrices se declaren de acuerdo al tipo de dato declarado, es decir, infiriendo eltipo de dato en la declaracin.

    Un ejemplo de este uso es el siguiente:

    Di m ej empl oI nt eger = {2009, 2010, 2011, 2012}

    En este ejemplo, si tratamos de hacer lo que antes intentbamos mediante la siguiente

    intruccin:ej empl oI nt eger ( 1) = "s"

    La aplicacin nos devolver un error en tiempo de ejecucin, ya que la matriz estarinferida por defecto como tipo Integer, y estaremos intentado asignar un valor String a unamatriz de tipo Integer.

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    52/449

    En la leccin anterior vimos los tipos de datos predefinidos en .NET Framework, en estaleccin veremos cmo podemos crear nuestros propios tipos de datos, tanto por valor comopor referencia.Tambin tendremos ocasin de ver los distintos niveles de accesibilidad que podemos aplicara los tipos, as como a los distintos miembros de esos tipos de datos. De los distintosmiembros que podemos definir en nuestros tipos, nos centraremos en las propiedades paraver en detalle los cambios que han sufrido con respecto a VB6. Tambin veremos temasrelacionados con la programacin orientada a objetos (POO) en general y de formaparticular los que ataen a las interfaces.

    Clases y estructuras

    Clases: Tipos por referencia definidos por el usuario

    Las clases: El corazn de .NET FrameworkLa herencia: Caracterstica principal de la Programacin Orientada a ObjetosEncapsulacin y PolimorfismoObject: La clase base de todas las clases de .NET

    Definir una clase

    Una clase especial: ModuleLos miembros de una claseCaractersticas de los mtodos y propiedades

    Accesibilidad, mbito y miembros compartidosParmetros y parmetros opcionalesArray de parmetros opcionales (ParamArray)Sobrecarga de mtodos y propiedadesParmetros por valor y parmetros por referenciaParmetros opcionales de tipo Nullable

    Instanciar: Crear un objeto en la memoria

    Declarar primero la variable y despus instanciarlaDeclarar y asignar en un solo pasoEl constructor: El punto de inicio de una claseConstructores parametrizados

  • 7/16/2019 Curso.de.Introduccin.NET.con.Visual.Basic.2010

    53/449

    Cuando Visual Basic 2010 no crea un constructor automticamenteEl destructor: El punto final de la vida de una claseInicializacin directa de objetos

    Estructuras: Tipos por valor definidos por el usuario

    Definir una estructuraConstructores de las estructurasDestructores de las estructurasLos miembros de una estructura

    Cmo usar las estructuras

    Accesibilidad y mbito

    mbitombito de bloquembito de procedimientombito de mdulombito de espacio de nombres

    La palabra clave GlobalAccesibilidad

    Accesibilidad de las variables en los procedimien