Está en la página 1de 109

Curso de Asp.

Net bajo el
lenguaje de Visual Basic.Net

Da 1
Introduccin
En este curso se tratan todas las cuestiones
fundamentales que le permitirn crear
aplicaciones web con Visual Studio 2010. Al
final del curso sabr todo lo necesario para
crear sus propias aplicaciones Web orientadas
a datos y con multitud de caractersticas
avanzadas.
Objetivos
El objetivo de este curso es lograr que ustedes aprendan a:
Cmo crear aplicaciones web con Visual Studio 2010.
A utilizar controles web y controles HTML.
Los mtodos bsicos de acceso a base de datos.
Los controles enlazados a datos.
A manejar las sesiones desde ASP.NET.
El modo de crear aplicaciones con un interfaz de
usuario consistente y fcil de personalizar.
Control de acceso de usuarios.
Cmo exponer funcionalidad a otras aplicaciones
mediante servicios Web.
Trabajar con controles Ajax en ASP.NET.
Prerrequisitos
Poseer los conocimientos en:

Fundamentos de Programacin.
programacin Orientacin a Objetos.
Nociones de programacin Web en otras
plataformas web como ASP, si bien no es
indispensable.
Html.
Sql Server 2008
Lenguaje Sql
Temario General
Introduccin a la Plataforma .Net.
Caractersticas del Lenguaje VB.NET.
Fundamento de Desarrollo de Aplicaciones Web.
Acceso a Datos.
LINQ.
Tcnicas Avanzadas de ASP.NET.
Introduccin a los Servicios Web.
Ajax en ASP.NET.
Jquery en Asp.NET.
Temario: Introduccin a la
Plataforma .NET
Entorno de Ejecucin CLR.
El Lenguaje Intermedio y el CLS.
La biblioteca de Clases de .NET.
Acceso a Datos con ADO.NET.
LINQ.
Aplicaciones Windows Form.
Aplicaciones Web Form.
Que es .NET?
Es un amplio conjunto de bibliotecas de desarrollo que pueden
ser utilizadas por otras aplicaciones para acelerar
enormemente el desarrollo y obtener de manera automtica
caractersticas avanzadas de seguridad, rendimiento, etc...

En realidad .NET es mucho ms que eso ya que ofrece un


entorno gestionado de ejecucin de aplicaciones, nuevos
lenguajes de programacin y compiladores, y permite el
desarrollo de todo tipo de funcionalidades: desde programas
de consola o servicios Windows hasta aplicaciones para
dispositivos mviles, pasando por desarrollos de escritorio o
para Internet.
El Entorno de Ejecucin CLR
CLR (Common Language Runtime): es la implementacin
de Microsoft de un estndar llamado Common
Language Infrastructure o CLI. ste fue creado y
promovido por la propia Microsoft pero desde hace
aos es un estndar reconocido mundialmente por el
ECMA.
El CLR/CLI: define un entorno de ejecucin virtual
independiente que se ocupa de multitud de cosas
importantes para una aplicacin: desde la gestin de
la memoria y la vida de los objetos hasta la seguridad
y la gestin de subprocesos.
El Lenguaje Intermedio y el CLS
Al contrario que otros entornos, la plataforma .NET no est
atada a un determinado lenguaje de programacin ni favorece
a uno determinado frente a otros.

Lo mejor de todo es que cualquier componente creado con


uno de estos lenguajes puede ser utilizado de forma
transparente desde cualquier otro lenguaje .NET. Adems, es
posible ejecutar el cdigo .NET en diferentes plataformas y
sistemas operativos.
El Lenguaje Intermedio y el CLS
Cmo se consigue esta potente capacidad?

Dentro de la CLI, existe un lenguaje llamado IL (Intermediate


Language o Lenguaje Intermedio) que est pensado de forma
independiente al procesador en el que se vaya a ejecutar.

Es algo parecido al cdigo ensamblador pero de ms alto nivel


y creado para un hipottico procesador virtual que no est
atado a una arquitectura determinada.

Cuando se compila una aplicacin escrita en un lenguaje .NET


(C#, VB, J#, etc.), el compilador genera un nuevo cdigo escrito
en este lenguaje intermedio. As, todos los lenguajes .NET se
usan como capa de ms alto nivel para producir cdigo IL.
El Lenguaje Intermedio y el CLS

Cdigo en lenguaje intermedio obtenido con ILDASM.exe


La Biblioteca de Clases de .NET
La plataforma .NET nos ofrece infinidad de funcionalidades
"de fbrica" que se utilizan como punto de partida para crear
las aplicaciones. Existen funcionalidades 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 que fsicamente se encuentran en
diversas DLL (bibliotecas de enlazado dinmico).

A su conjunto se le denomina Base Classes Library (Biblioteca


de clases base o BCL) y forman parte integral de la plataforma
.NET.
La Biblioteca de Clases de .NET
La Biblioteca de Clases de .NET
Los Espacios de Nombres:
Dada la ingente cantidad de clases que existen debe haber
algn modo de organizarlas de un modo coherente. Adems
hay que tener en cuenta que podemos adquirir ms
funcionalidades (que se traducen en clases) a otros
fabricantes, por no mencionar que crearemos continuamente
nuevas clases propias.

Para solucionar este problema existen en todos los lenguajes


.NET los espacios de nombres o namespaces.

Un espacio de nombres no es ms que un identificador que


permite organizar de modo estanco las clases que estn
contenidas en l as como otros espacios de nombres.
La Biblioteca de Clases de .NET
As, por ejemplo, todo lo que tiene que ver con el manejo de
estructuras de datos XML en la plataforma .NET se encuentra
bajo el espacio de nombres System.Xml.

La funcionalidad fundamental para crear aplicaciones Web


est en el espacio de nombres System.Web. ste a su vez
contiene otros espacios de nombres ms especializados como
System.Web.Caching para la persistencia temporal de datos,
System.Web.UI.WebControls, que contiene toda la
funcionalidad de controles Web para interfaz de usuario, etc...
Acceso a datos con ADO.NET
El acceso a fuentes de datos es algo indispensable en
cualquier lenguaje o plataforma de desarrollo. La parte de la
BCL que se especializa en el acceso a datos se denomina de
forma genrica como ADO.NET.

ADO.NET ofrece una funcionalidad completamente nueva, que


tiene poco que ver con lo existente hasta la fecha en el
mercado. Sin embargo, con el nimo de retirar barreras a su
aprendizaje, Microsoft denomin a su nuevo modelo de
acceso a datos con un nombre similar y algunas de sus clases
recuerdan a objetos de propsito anlogo en el vetusto ADO.
Acceso a datos con ADO.NET
ADO.NET es un modelo de acceso mucho ms orientado al
trabajo desconectado de las fuentes de datos de lo que nunca
fue ADO.
Si bien este ltimo ofreca la posibilidad de desconectar los
Recordsets y ofreca una forma de serializacin de estos a
travs de las diferentes capas de una aplicacin, el
mecanismo no es ni de lejos tan potente como el que nos
ofrece ADO.NET.

El objeto ms importante a la hora de trabajar con el nuevo


modelo de acceso a datos es el DataSet.
Podramos calificarlo como un motor de datos relacionales en
memoria.
.
Arquitectura de ADO.NET
LINQ
LINQ significa Language Integrated Query, o Lenguaje Integrado
de Consultas.
Se trata de una de las novedades incluidas en Microsoft .NET
Framework 3.5, y representa una forma nueva de desarrollo tal y
como la conocamos hasta ahora.

LINQ est pensado desde la orientacin a objetos, pero su


objetivo fundamental es la manipulacin y trabajo con datos.

Para que comprenda ms an la importancia de LINQ, diremos


que la inmensa mayora de las novedades introducidas en
Microsoft .NET Framework 3.5 tienen su razn de ser gracias a
LINQ, y que LINQ jugar un importante papel en las prximas
novedades de Microsoft .NET Framework.
LINQ
A la hora de trabajar con datos, con LINQ tenemos la
posibilidad de seleccionar, manipular y filtrar datos como si
estuviramos trabajando con una base de datos directamente.
Podemos usar LINQ con bases de datos, matrices y
colecciones.
LINQ simplifica el cdigo, acorta los tiempos de desarrollo,
permite que el desarrollador desarrolle aplicaciones ms
productivas y seguras a la hora de trabajar con datos y sus
tipos.

Intellisense juega un papel muy importante evitando que


cometamos errores a la hora de escribir nuestras aplicaciones,
errores como por ejemplo seleccionar el dato errneo o el tipo
de dato inadecuado, ya que el compilador nos avisara de
estos y otros errores.
LINQ Origenes de Datos
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 datos de 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, SQL Server, Oracle, MySql,
DB2, etc.
Aplicaciones Windows Forms
Las aplicaciones de escritorio son aquellas basadas en
ventanas y controles comunes de Windows que se ejecutan
localmente.

En la plataforma .NET el espacio de nombres que ofrece las


clases necesarias para construir aplicaciones de escritorio
bajo Windows se denomina Windows Forms.

Windows Forms est constituido por multitud de clases


especializadas que ofrecen funcionalidades para el trabajo
con ventanas, botones, rejillas, campos de texto y todo este
tipo de controles habituales en las aplicaciones de escritorio.
Aplicaciones Web Forms
Tradicionalmente las aplicaciones Web se han desarrollado
siguiendo un modelo mixto que intercalaba cdigo HTML y
JavaScript propio de pginas Web (parte cliente), junto con
cdigo que se ejecutara en el servidor (parte servidora).

Este modelo contrastaba por completo con el modelo


orientado a eventos seguido por las principales herramientas
de desarrollo de aplicaciones de escritorio.

Hacer esto en una aplicacin de escritorio no tiene mayor


dificultad ya que todo el cdigo se ejecuta en el mismo lugar.
Aplicaciones Web Forms
La principal caracterstica de las aplicaciones Web sin
embargo es que la interfaz de usuario (lo que los usuarios de
la aplicacin ven) se ejecuta en un lugar diferente al cdigo de
la aplicacin que reside en un servidor.

Para mayor desgracia estas aplicaciones se basan en el uso


del protocolo HTTP que es un protocolo sin estado y que no
conserva la conexin entre dos llamadas consecutivas.

Por ejemplo, el siguiente cdigo ilustra el cdigo que es


necesario escribir en ASP para disponer 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 botn que escribe un saludo
para el nombre que se haya elegido de la lista.
Aplicaciones Web Forms

Cdigo ASP sencillo que genera una lista de seleccin y saluda al presionar
un botn.
Aplicaciones Web Forms
Las principales desventajas de este tipo de codificacin son
las siguientes:
No existe separacin entre el diseo y la lgica de las
aplicaciones.
En ASP clsico no existe el concepto de control para la
interfaz de usuario.
No disponemos de forma de detectar en el servidor que se
ha realizado algo en el cliente.
No existe constancia del estado de los controles de cada
pgina entre las llamadas.
No existe el concepto de Propiedad de los controles.
Los controles complejos no tienen forma de enviar sus
valores al servidor.
Aplicaciones Web Forms
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 o propios.
Diseadores grficos.
Eventos.
Estado.
Enlazado a datos desde la interfaz.

Esto como se ver marca un antes y un despus en la


programacin para Internet.
Temario General
Introduccin a la Plataforma .Net.
Caractersticas del Lenguaje VB.NET.
Fundamento de Desarrollo de Aplicaciones Web.
Acceso a Datos.
LINQ.
Tcnicas Avanzadas de ASP.NET.
Introduccin a los Servicios Web.
Ajax en ASP.NET.
Jquery en Asp.NET.
Temario: Caractersticas del
Lenguaje VB.NET
El Sistema de Tipos.
Clases y Estructuras.
Manejo de Excepciones.
Eventos y Delegados.
Sistema de Tipos
Visual Basic .NET est totalmente integrado con .NET
Framework, por tanto los tipos de datos 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 nos encontraremos al recorrer la
documentacin que acompaa a este lenguaje de
programacin.

A continuacin veremos los diferentes tipos de datos


existentes en .NET que son: Los Primitivos, variables y
constantes, Enumeraciones (contantes agrupadas) y Arrays
(Matrices).
Sistema de Tipos Tipos Primitivos
Veamos en la siguiente tabla los tipos de datos definidos en
.NET Framework y los alias utilizados en Visual Basic 2010.
Sistema de Tipos Tipos Primitivos
Cuando usamos valores literales numricos en Visual Basic
2010, el tipo de datos que por defecto le asigna el
compilador es el tipo Double. Si nuestra intencin es utilizar
sin embargo un tipo de datos diferente, podemos indicarlo
aadiendo una letra como sufijo al tipo. Por ejemplo para
indicar que queremos considerar un valor entero podemos
usar la letra I o el signo %, de igual forma, un valor de tipo
entero largo (Long) lo podemos indicar usando L o &, en la
siguiente tabla podemos ver los caracteres o letra que
podemos usar como sufijo en un literal numrico para que
el compilador lo identifique sin ningn lugar a dudas.
Sistema de Tipos Tipos Primitivos

El uso de estos caracteres nos puede resultar de utilidad


particularmente para los tipos de datos que no se pueden
convertir en un valor doble.
Sistema de Tipos Tipos Primitivos
Sistema de Tipos Tipos Por Valor/Referencia
Los tipos de datos de .NET los podemos clasificar en dos
grupos: Valor y Referencia.
Los tipos por valor: son los de cuyo valor se almacena en
la pila o en la memoria "cercana", como los numricos.
De igual forma cuando copiamos valores de un tipo por
valor a otro, estaremos haciendo copias independientes.
Los tipos por referencia: se almacenan en el "montculo"
(heap) o memoria "lejana". A diferencia de los tipos por
valor, los tipos por referencia lo nico que almacenan es
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.
Sistema de Tipos Inferencia de Tipos
Una de las caractersticas nuevas en Visual Basic 2008 y que
ha sido llevada lgicamente a versiones superiores, es la
inferencia de tipos.

Se conoce como inferencia de tipos a la caracterstica de


Visual Basic para inferir el tipo de un dato al ser inicializado.

Para que la inferencia de tipos sea efectiva, deberemos


activar la opcin Option Infer a True, aunque por defecto, ese
es el valor que tiene el compilador de Visual Basic. Sin
embargo, si se hace una migracin de una aplicacin de
Visual Basic a Visual Basic 2008 ( superior), el valor de esta
opcin ser False.
Sistema de Tipos Inferencia de Tipos
Supongamos por lo tanto, la siguiente declaracin:

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 nos devolver un error. As, el siguiente
ejemplo no ser vlido en Visual Basic 2008 ( superior) con la
opcin de inferencia activada:

Ahora bien, si cambiamos el valor de Option Infer a False, el


mismo ejemplo ser correcto.
Sistema de Tipos Inferencia de Tipos
Dnde est la diferencia?.

En este ltimo caso, el caso de tener desactivada la opcin de


inferencia, la declaracin de la variable datoDeclarado nos
indica que es un tipo de dato Object en su origen, y que al
darle un valor Integer, sta funciona como una variable entera.

Al cambiar su valor a Long, 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 y unboxing que no seran necesarias si
tipramos la variable con un tipo concreto.
Sistema de Tipos Variables y Constantes
Disponer de todos estos tipos de datos no tendra ningn
sentido si no los pudiramos usar de alguna otra forma que de
forma literal. Y aqu es donde entran en juego las variables y
constantes

Siempre que tengamos que indicar un valor constante, ya sea


para indicar el mximo o mnimo permitido en un rango de
valores o para comprobar el trmino de un bucle, deberamos
usar una constante en lugar de un valor literal. De esta forma
si ese valor lo usamos en varias partes de nuestro 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.
Sistema de Tipos Declaracin de Variables
La declaracin de las variables en Visual Basic 2010 se hace
de la misma forma que en VBScript/VB6/VB6, o casi, las
excepciones vienen dadas, como hemos comentado antes, de
la posibilidad de obligar a definir el tipo de cada variable y de
cmo podemos definir ms de una variable en una misma
instruccin Dim.

Tambin es posible definir ms de una variable en una misma


instruccin Dim.
Sistema de Tipos Declaracin de Variables
En Visual Basic tambin podemos inicializar una variable con
un valor distinto al predeterminado, que:
Los tipos numricos es un cero.
En las fechas es el 1 de enero del ao 1 a las doce de la
madrugada (#01/01/0001 12:00:00AM#)
En la cadenas es un valor nulo (Nothing).
Para hacerlo, simplemente tenemos que indicar ese valor, tal
como veremos es muy parecido a como se declaran las
constantes. Por ejemplo:
Sistema de Tipos Tipo de Datos Char
En Visual Basic podemos declarar valores de tipo Char, este
tipo de datos es un carcter Unicode y podemos declararlo y
asignarlo a un mismo tiempo. El problema con el que nos
podemos encontrar es a la hora de indicar un carcter literal.
Los tipos numricos es un cero.
Si nuestra intencin es asignar un valor Char a una variable,
adems de la funcin Chr, podemos hacerlo con un literal, ese
valor literal estar encerrado entre comillas dobles, (al igual
que una cadena), aunque para que realmente sea un carcter
debemos agregarle una c justo despus del cierre de las
comillas dobles:
Sistema de Tipos Obligar a Declarar
Variables con el Tipo de Datos
La obligatoriedad, a la que hacamos referencia
anteriormente, de declarar las variables y constantes con el
tipo de datos adecuado, la podemos aplicar a todo el proyecto
o a un mdulo en particular. Para ello tenemos que usar la
instruccin Option Strict On, una vez indicado, se aplicar a
todo el cdigo, no solo a las declaraciones de variable,
constantes o al tipo de datos devuelto por las funciones y
propiedades, sino tambin a las conversiones y asignaciones
entre diferentes tipos de datos.

No debemos confundir Option Strict con el clsico Option


Explicit de VB. Este ltimo, al igual que en VBScript/VB6, nos
obliga a declarar todas las variables, mientras que el primero
lo que hace es obligarnos a que esas declaraciones tengan un
tipo de datos.
Sistema de Tipos Obligar a Declarar
Variables con el Tipo de Datos
Sistema de Tipos Tipos Nulables
Otra interesantsima caracterstica de Visual Basic 2008 y que
es lgicamente llevada a versiones superiores y la cual
conviene conocer, es lo que se denominan tipos anulables.

Los tipos anulables no son nuevos en Visual Basic, de hecho


su origen lo encontramos en Visual Studio 2005, aunque eso
s, implementando la clase Nullable(Of T).

Con Visual Basic no es necesario declarar ninguna clase para


implementar 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.
Sistema de Tipos Tipos Nulables

Para acceder al valor de un tipo anulable, podramos hacerlo


de la forma habitual, ahora bien, si no sabemos si el valor es
nulo o no, podramos acceder a su valor preguntando por l
mediante la propiedad 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:
Sistema de Tipos Tipos Nulables
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 le indiquemos si es nulo.

En este ejemplo, el compilador nos devolvera el valor 2010,


ya que GetValueOrDefault sabe que la variable no posee un
valor nulo y que por lo tanto, debe obtener el valor no nulo de
la variable anulable.

En el caso de que no hubiramos dado ningn valor a la


variable, la aplicacin obtendra el valor 2012.
Sistema de Tipos Tipos Annimos
Esta caracterstica de Visual Basic, nos permite declarar los
tipos de datos de forma implcita desde el cdigo de
nuestras aplicaciones.

Un ejemplo prctico de declaracin de tipos annimos es el


siguiente:

Como podemos ver en el ejemplo anterior, hemos declarado


un objeto al que no hemos indicado ningn tipo de dato
concreto, pero a la hora de crear ese objeto, hemos creado
implcitamente un miembro Nombre y un miembro Edad.
Sistema de Tipos Enumeradores
Una enumeracin es un grupo de constantes que estn
relacionadas entre s y que queremos utilizar para restringir
el rango de posibles valores para una variable o parmetro.

En Visual Basic las enumeraciones pueden ser de cualquier


tipo numrico entero, incluso enteros sin signo, aunque el
valor predefinido es el tipo Integer.

Podemos declarar una enumeracin de varias formas:

Indicando el atributo FlagsAttibute, de esta forma podremos


indicar unos valores concretos para los miembros de la
enumeracin.
Sistema de Tipos Enumeradores
Tanto si indicamos o no el atributo Flags a una
enumeracin, la podemos usar de esta forma:

Es decir, podemos "sumar" los valores definidos en la


enumeracin.
Como hemos comentado, las enumeraciones son
constantes con nombres, pero esta definicin se queda algo
corta. De hecho, podemos saber "el nombre" de un valor de
una enumeracin, para ello tendremos que usar el mtodo
ToString, (el cual se usa para convertir en una cadena
cualquier valor numrico).
Por ejemplo, si tenemos la siguiente asignacin:

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


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

El contenido de la variable s ser "5", es decir, la


representacin numrica del valor contenido: 4 + 1, ya que
el valor de la constante Azul es 4 y el de la constante Rojo
es 1.
Sistema de Tipos Enumeradores
Pero si ese mismo cdigo lo usamos de esta forma
(aplicando el atributo Flags a la enumeracin):

El contenido de la variable s ser: "Rojo, Azul", es decir, se


asignan los nombres de los miembros de la enumeracin
que intervienen en ese valor, no el valor "interno".
Sistema de Tipos Enumeradores
Los miembros de las enumeraciones realmente son valores
de un tipo de datos entero (en cualquiera de sus
variedades) tal como podemos comprobar en la siguiente
imagen:

Por tanto cabe pensar que podemos usar cualquier valor


para asignar a una variable declarada como una
enumeracin, al menos si ese valor est dentro del rango
adecuado. Es decir, en el ejemplo de la figura usar un 1 en
lugar de Colores.Rojo.
Sistema de Tipos Enumeradores
En VB.NET esto no es posible, al menos si lo hacemos de
forma "directa" y con Option Strict On, ya que recibiremos un
error indicndonos que no podemos convertir, por ejemplo, un
valor entero en un valor del tipo de la enumeracin.

El error nos indica que no podemos realizar esa asignacin,


pero el entorno integrado de Visual Studio 2010 tambin nos
ofrece alternativas para que ese error no se produzca, esa
ayuda se obtiene presionando el signo de admiracin que
tenemos justo donde est el cursor del mouse, pero no solo
nos dice cmo corregirlo, sino que tambin nos da la
posibilidad de que el propio IDE se encargue de hacerlo.
Sistema de Tipos Enumeradores

Lo nico que tendramos que hacer es presionar la


sugerencia de correccin, que en este caso es la nica que
hay, pero en otros casos pueden ser varias las opciones y
tendramos que elegir la que creamos adecuada.
El cdigo final (una vez corregido) quedara de la siguiente
forma:

CType es una de las formas que nos ofrece VB.NET de


hacer conversiones entre diferentes tipos de datos, en este
caso convertimos un valor entero en uno del tipo
enumerado Colores.
Sistema de Tipos Arrays (Matrices)
Los arrays (o matrices) tambin es algo que podamos usar
en VBScript/VB6, si bien la forma en que se almacena en la
memoria y la forma en que podemos usarlas en Visual Basic
ha cambiado.

En Visual Basic la declaracin de un array la haremos de la


misma forma que en VBScript/VB6, en el siguiente ejemplo
declaramos un array de tipo String llamado nombres:

Al igual que en VBScript/VB6, podemos indicar el nmero


de elementos que contendr el array:
Sistema de Tipos Arrays (Matrices)
Otra posibilidad que tenamos en VBScript/VB6 era indicar
el rango de ndices que podamos asignar, esto lo
logrbamos usando la clusula To al definir un array, por
ejemplo:

Pero esta declaracin es ilegal en Visual Basic, por el hecho


de que los arrays de .NET siempre deben tener el valor cero
como ndice inferior.

En VB.NET podemos declarar un array y al mismo tiempo


asignarle valores.
Sistema de Tipos Arrays (Matrices)
Si el array es bidimensional (o con ms dimensiones),
tambin podemos inicializarlos al declararlo, pero en este
caso debemos usar doble juego de llaves:

En este cdigo tendramos un array bidimensional con los


siguientes valores:

nombres(0,0)= Juan
nombres(0,1)= Pepe
nombres(1,0)= Ana
nombres(1,1)= Eva
Sistema de Tipos Arrays (Matrices)
Para cambiar el tamao de un array, al igual que en
VBScript/VB6, usaremos la instruccin ReDim, pero a
diferencia de VBScript/VB6 no podemos usar ReDim para
definir un array, en Visual Basic siempre hay que declarar
previamente los arrays antes de cambiarles el tamao.

Lo que tambin podemos hacer en Visual Basic es cambiar


el tamao de un array y mantener los valores que tuviera
anteriormente, para lograrlo debemos usar ReDim Preserve.

Si bien tanto ReDim como ReDim Preserve se pueden usar


en arrays de cualquier nmero de dimensiones, en los
arrays de ms de una dimensin solamente podemos
cambiar el tamao de la ltima dimensin.
Sistema de Tipos Arrays (Matrices)
Una vez que hemos declarado un array y le hemos
asignado valores, es posible que nos interese eliminar esos
valores de la memoria, para lograrlo, podemos hacerlo de
tres formas:

1. Redimensionando el array indicando que tiene cero


elementos, aunque en el mejor de los casos, si no estamos
trabajando con arrays de ms de una dimensin, tendramos
un array de un elemento, ya que, como hemos comentado
anteriormente, los arrays de .NET el ndice inferior es cero.
2. Usar la instruccin Erase. Al igual que en VBScript/VB6,
Erase elimina totalmente el array de la memoria.
3. Asignar un valor Nothing al array.
Sistema de Tipos Arrays (Matrices)
En VB.NET los arrays son tipos por referencia, y tal como
comentamos anteriormente, los tipos por referencia
realmente lo que contienen son una referencia a los datos
reales no los datos propiamente dichos.

Cual es el problema?

Vemoslo con un ejemplo y as lo tendremos ms claro.


Sistema de Tipos Arrays (Matrices)
Si realmente queremos tener copias independientes,
debemos hacer una copia del array nombres en el array
otros, esto es fcil de hacer si usamos el mtodo CopyTo.
ste mtodo existe en todos los arrays y nos permite copiar
un array en otro empezando por el ndice que indiquemos.

El nico requisito es que el array de destino debe estar


inicializado y tener espacio suficiente para contener los
elementos que queremos copiar.
Sistema de Tipos Arrays (Matrices)
Adems del mtodo CopyTo, los arrays tienen otros miembros
que nos pueden ser de utilidad, 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, tambin


podemos usar la funcin UBound, que es la que nos serva en
VBScript/VB6 para saber esa informacin.

Sin embargo, el uso de la funcin LBound, (que sirve para


averiguar el ndice inferior de un array), no tiene ningn sentido
en Visual Basic, ya que todos los arrays siempre tienen un valor
cero como ndice inferior.

Los arrays son tipos de datos derivados de la clase Array y por


tanto disponen de todos los miembros definidos en esa clase.
Clases y Estructuras
En la leccin anterior vimos los tipos de datos predefinidos en
.NET Framework, en esta leccin veremos cmo podemos
crear nuestros propios tipos de datos, tanto por valor como por
referencia.

Tambin tendremos ocasin de ver los distintos niveles de


accesibilidad que podemos aplicar a los tipos, as como a los
distintos miembros de esos tipos de datos.

Adicionalmente, veremos temas relacionados con la


programacin orientada a objetos (POO) en general y de forma
particular los que ataen a las interfaces.
Clases y Estructuras
A continuacin veremos los diferentes temas que son: Tipos
por Referencia definidos por el usuario, Definir una Clase,
Crear un Objeto en la Memoria, Tipos por Valor Definidos por
el Usuario, Accesibilidad y mbito, Propiedades e Interfaces.
Clases y Estructuras
A continuacin veremos los diferentes temas que son: Tipos
por Referencia Definidos por el Usuario, Definir una Clase,
Crear un Objeto en la Memoria, Tipos por Valor Definidos por
el Usuario, Accesibilidad y mbito, Propiedades e Interfaces.
Clases y Estructuras Tipos por Referencia
Definidos por el Usuario
Tal como vimos en la leccin anterior, los tipos de datos se
dividen en dos grupos: tipos por valor y tipos por referencia.
Los tipos por referencia realmente son clases, de la cuales
debemos crear una instancia para poder usarlas.

Esa instancia o copia, se crea siempre en la memoria lejana


(heap) y las variables lo nico que contienen es una
referencia a la direccin de memoria en la que el CLR
(Common Language Runtime, motor en tiempo de ejecucin
de .NET), ha almacenado el objeto recin creado.

Prcticamente todo lo que podemos hacer en .NET


Framework lo hacemos mediante clases.
Clases y Estructuras Tipos por Referencia
Definidos por el Usuario
El concepto de Programacin Orientada a Objetos (POO) es algo
intrnseco al propio .NET Framework, por tanto es una
caracterstica que todos los lenguajes basados en este "marco de
trabajo" tienen de forma predeterminada, entre ellos el Visual
Basic.

De las caractersticas principales de la POO tenemos que


destacar la herencia, que en breve podemos definir como una
caracterstica que nos permite ampliar la funcionalidad de una
clase existente sin perder la que ya tuviera previamente.

El tipo de herencia que .NET Framework soporta es la herencia


simple, es decir, solo podemos usar una clase como base de la
nueva, si bien, como veremos ms adelante, podemos agregar
mltiples interfaces.
Clases y Estructuras Tipos por Referencia
Definidos por el Usuario
La encapsulacin y el polimorfismo son otras dos
caractersticas de la programacin orientada a objetos.

La encapsulacin nos permite abstraer la forma que tiene


de actuar una clase sobre los datos que contiene o
manipula, para poder lograrlo se exponen como parte de la
clase los mtodos y propiedades necesarios para que
podamos manejar esos datos sin tener que preocuparnos
cmo se realiza dicha manipulacin.
Clases y Estructuras Tipos por Referencia
Definidos por el Usuario
El polimorfismo nos permite realizar ciertas acciones o
acceder a la informacin de los datos contenidos en una
clase de forma semi-annima, al menos en el sentido de
que no tenemos porqu saber sobre que tipo objeto
realizamos la accin, ya que lo nico que nos debe
preocupar es que podemos hacerlo, por la sencilla razn de
que estamos usando ciertos mecanismos que siguen unas
normas que estn adoptadas por la clase.

El ejemplo clsico es que si tengo un objeto que "sabe"


cmo morder, da igual que lo aplique a un ratn o a un
dinosaurio, siempre y cuando esas dos "clases" expongan
un mtodo que pueda realizar esa accin.
Clases y Estructuras Tipos por Referencia
Definidos por el Usuario
Todas las clases de .NET se derivan siempre de forma
automtica de la clase Object, lo indiquemos o no
explcitamente.

Cualquier clase que definamos tendr el comportamiento


heredado de esa clase. El uso de la clase Object como base
del resto de las clases de .NET es la nica excepcin a la
herencia simple soportada por .NET.

Esta caracterstica nos asegura que siempre podremos usar


un objeto del tipo Object para acceder a cualquier clase de
.NET.

Todos los tipos de datos de .NET, ya sean por valor o por


referencia siempre estn derivados de la clase Object.
Clases y Estructuras Definir una Clase

En Visual Basic las clases se definen usando la palabra


clave Class seguida del nombre de la clase, esa definicin
acaba indicndolo con End Class.

Una vez definida la clase podemos agregar los elementos (o


miembros) que creamos conveniente.

En el ejemplo, para simplificar, hemos agregado dos


campos pblicos, aunque tambin podramos haber definido
cualquiera de los miembros permitidos en las clases.
Clases y Estructuras Definir una Clase

En Visual Basic tambin podemos definir una clase especial


llamada Module.

La definicin se hace usando la instruccin Module seguida


del nombre a usar y acaba con End Module.

Cualquier miembro definido en un Module siempre estar


accesible en todo el proyecto y para usarlos no tendremos
que crear ningn objeto en memoria.

Las clases definidas con la palabra clave Module realmente


equivalen a las clases en las que todos los miembros estn
compartidos y por tanto siempre disponibles a toda la
aplicacin.
Clases y Estructuras Definir una Clase

Una clase puede contener cualquiera de estos elementos


(miembros):

Enumeraciones.
Campos.
Mtodos (funciones o procedimientos).
Propiedades.
Eventos.
Clases y Estructuras Definir una Clase
Accesibilidad y mbito son dos conceptos que estn
estrechamente relacionados.

Aunque en la prctica tienen el mismo significado, ya que lo


que representan es la "cobertura" o alcance que tienen los
miembros de las clases e incluso de las mismas clases que
definamos.

mbito: Es el alcance que la definicin de un miembro o


tipo puede tener.

Accesibilidad: A los distintos elementos de nuestro cdigo


(ya sean clases o miembros de las clases) podemos darle
diferentes tipos de accesibilidad.
Clases y Estructuras Definir una Clase
Los tipos de mbitos pueden ser:

mbito de bloque: Disponible nicamente en el bloque de


cdigo en el que se ha declarado.
mbito de procedimiento: Disponible nicamente dentro
del procedimiento en el que se ha declarado.
mbito de mdulo: Disponible en todo el cdigo del
mdulo, la clase o la estructura donde se ha declarado.
mbito de espacio de nombres: Disponible en todo el
cdigo del espacio de nombres.
Clases y Estructuras Definir una Clase
Los modificadores de accesibilidad son:

Public: Acceso no restringido.


Protected: Acceso limitado a la clase contenedora o a
los tipos derivados de esta clase.
Friend: Acceso limitado al proyecto actual.
Protected Friend: Acceso limitado al proyecto actual o
a los tipos derivados de la clase contenedora.
Private: Acceso limitado al tipo contenedor.
Clases y Estructuras Definir una Clase
Los miembros de una clase, (funciones y mtodos Sub),
como las propiedades pueden recibir parmetros, se siguen
soportando tanto los parmetros opcionales (Optional) como
los arrays de parmetros (ParamArray).

Para llamar a esta funcin, lo podemos hacer de estas tres


formas:

El tercer ejemplo solamente tiene utilidad si hay ms de un


parmetro opcional.
Clases y Estructuras Definir una Clase
La sobrecarga de funciones (realmente de mtodos y
propiedades), es una caracterstica que nos permite tener
una misma funcin con diferentes tipos de parmetros, ya
sea en nmero o en tipo.
Clases y Estructuras Definir una Clase
Tambin podemos tener sobrecarga usando una cantidad
diferente de parmetros, aunque stos sean del mismo tipo.

Por ejemplo, podemos aadir esta declaracin al cdigo


anterior sin que exista ningn tipo de error, ya que esta
nueva funcin recibe tres parmetros en lugar de dos:
Clases y Estructuras Definir una Clase
A los parmetros de las funciones tambin podemos usar
ByVal o ByRef para indicar al compilador cmo debe tratar a
los parmetros.

Cuando un parmetro es por valor (ByVal), el runtime antes


de llamar a la funcin hace una copia de ese parmetro y
pasa la copia a la funcin, por tanto cualquier cambio que
hagamos a ese parmetro dentro de la funcin no afectar
al valor usado "externamente".

En el caso de que el parmetro sea por referencia (ByRef),


el compilador pasa una referencia que apunta a la direccin
de memoria en la que estn los datos, por tanto si
realizamos cambios dentro de la funcin, ese cambio si que
se ver reflejado en el parmetro usado al llamar a la
funcin.
Clases y Estructuras Crear un Objeto en Memoria
Una vez que tenemos una clase definida, lo nico de lo que
disponemos es de una especie de plantilla o molde a partir
del cual podemos crear objetos en memoria.

Lo primero que tenemos que hacer es declarar una variable


del tipo que queremos instanciar, esto lo hacemos usando la
instruccin Dim:
Clases y Estructuras Crear un Objeto en Memoria
Cada vez que creamos un nuevo objeto en memoria
estamos llamando al constructor de la clase.

En el constructor de una clase podemos incluir el cdigo


que creamos conveniente, pero realmente solamente
deberamos incluir el que realice algn tipo de inicializacin,
en caso de que no necesitemos realizar ningn tipo de
inicializacin, no es necesario definir el constructor, ya que
el propio compilador lo har por nosotros.
Clases y Estructuras Crear un Objeto en Memoria
De la misma forma que podemos tener mtodos y
propiedades sobrecargadas, tambin podemos tener
constructores sobrecargados, ya que debemos recordar que
en Visual Basic, un constructor realmente es un mtodo de
tipo Sub, y como todos los mtodos y propiedades de Visual
Basic, tambin admite la sobrecarga.
Clases y Estructuras Crear un Objeto en Memoria
Si nosotros no definimos un constructor, lo har el propio
compilador, y cuando lo hace automticamente, siempre es un
constructor sin parmetros.

Pero hay ocasiones en las que nos puede interesar que no exista
un constructor sin parmetros, por ejemplo, podemos crear una
clase Cliente que solo se pueda instanciar si le pasamos, por
ejemplo el NIT, en caso de que no se indique ese dato, no
podremos crear un nuevo objeto Cliente, de esta forma, nos
aseguramos siempre de que el NIT siempre est especificado.

Seguramente por ese motivo, si nosotros definimos un


constructor con parmetros, VB no crea uno automticamente sin
parmetros. Por tanto, si definimos un constructor con
parmetros en una clase y queremos que tambin tenga uno sin
parmetros, lo tenemos que definir nosotros mismos.
Clases y Estructuras Crear un Objeto en Memoria
De la misma forma que una clase tiene su punto de entrada
o momento de nacimiento en el constructor, tambin tienen
un sitio que se ejecutar cuando el objeto creado en la
memoria ya no sea necesario, es decir, cuando acabe la
vida del objeto creado.

El destructor de Visual Basic es un mtodo llamado Finalize,


el cual se hereda de la clase Object, por tanto no es
necesario que escribamos nada en l. El propio CLR se
encargar de llamar a ese mtodo cuando el objeto ya no
sea necesario.

En .NET los objetos no se destruyen inmediatamente y


existe un "sistema" que se encarga de realizar esta gestin
de limpieza: (Garbage Collector, GC).
Clases y Estructuras Estructuras
De la misma forma que podemos definir nuestros propios
tipos de datos por referencia, VB nos permite crear nuestros
propios tipos por valor.

Para crear nuestros tipos de datos por referencia, usamos la


"instruccin" Class, por tanto es de esperar que tambin
exista una instruccin para crear nuestros tipos por valor, y
esa instruccin es: Structure, por eso en VB a los tipos por
valor definidos por el usuario se denominan estructuras.

Otra de las caractersticas de las estructuras es que no es


necesario crear una instancia para poder usarlas, ya que es
un tipo por valor y los tipos por valor no necesitan ser
instanciados para que existan.
Clases y Estructuras Estructuras
Las estructuras se definen usando la palabra Structure
seguida del nombre y acaba usando las instrucciones End
Structure.

Aunque en las estructuras, usar New, sera algo


redundante.

Las estructuras siempre se almacenan en la pila, por tanto


deberamos tener la precaucin de no crear estructuras con
muchos campos o con muchos miembros, ya que esto
implicara un mayor consumo del "preciado" espacio de la
pila.
Clases y Estructuras Accesibilidad
Tal y como comentamos anteriormente, dependiendo de
dnde y cmo estn declarados los tipos de datos y los
miembros definidos en ellos, tendremos o no acceso a esos
elementos.

Recordemos que el mbito es el alcance con el que


podemos acceder a un elemento y depende de dnde est
declarado, por otro lado, la accesibilidad depende de cmo
declaremos cada uno de esos elementos.

Hagamos las respectivas demostraciones con ejercicios.


Clases y Estructuras Accesibilidad
La accesibilidad predeterminada de los tipos

Accesibilidades permitidas en los tipos


Clases y Estructuras Accesibilidad
Los espacios de nombres pueden contener otros espacios
de nombres y estos a su vez tambin pueden contener otros
espacios de nombres o clases, y como hemos visto, para
poder acceder a una clase que no est dentro del mismo
espacio de nombres debemos indicar el "nombre completo".

Para evitar estar escribiendo todos los espacios de nombres


en los que est la clase que nos interesa declarar, podemos
usar una especie de acceso directo o para que lo
entendamos mejor, podemos crear una especie de "Path",
de forma que al declarar una variable, si esta no est
definida en el espacio de nombres actual, el compilador
busque en todos los espacios de nombres incluidos en esas
rutas (paths).
Clases y Estructuras Accesibilidad
Esto lo conseguimos usando la instruccin Imports seguida
del espacio de nombres que queremos importar o incluir en
el path de los espacios de nombres.

Podemos usar tantas importaciones de espacios de


nombres como necesitemos y estas siempre deben
aparecer al principio del fichero, justo despus de las
instrucciones Options.
Clases y Estructuras Propiedades
Las propiedades son los miembros de los tipos que nos
permiten acceder a los datos que dicho tipo manipula.

Normalmente una propiedad est relacionada con un


campo, de forma que el campo sea el que realmente
contenga el valor y la propiedad simplemente sea una
especie de mtodo a travs del cual podemos acceder a
ese valor.
Clases y Estructuras Interfaces
Las interfaces son un elemento bastante importante en
.NET Framework, ya que de hecho se utiliza con bastante
frecuencia.

En esta leccin veremos que son las interfaces y como


utilizarlas en nuestros proyectos. Tambin veremos que
papel juegan en .NET y cmo aplicar algunas de las
definidas en la biblioteca base.

Las interfaces son una forma especial de una clase, aunque


la diferencia principal con las clases es que las interfaces no
contienen cdigo ejecutable, solo definen los miembros.
Clases y Estructuras Interfaces
Para definir una interfaz en Visual Basic tenemos que usar
la instruccin Interface seguida del nombre y terminar la
declaracin con End Interface:

Como podemos observar, lo nico que tenemos que hacer


es indicar el tipo de miembro y si recibe o no algn
parmetro o argumento.

Dos cosas importantes sobre las interfaces:


1. No se pueden definir campos.
2. Los miembros de las interfaces siempre son pblicos.
Clases y Estructuras Interfaces
Siempre que leemos sobre las interfaces, lo primero con lo
que nos solemos encontrar es que una interfaz es un
contrato. Veamos que nos quieren decir con esa frase.

Tal como acabamos de ver, las interfaces solo definen los


miembros, pero no el cdigo a usar en cada uno de ellos,
esto es as precisamente porque el papel que juegan las
interfaces es el de solo indicar que es lo que una clase o
estructura puede, o mejor dicho, debe implementar.

Si en una clase indicamos que queremos "implementar" una


interfaz, esa clase debe definir cada uno de los miembros
que la interfaz expone. De esta forma nos aseguramos de
que si una clase implementa una interfaz, tambin
implementa todos los miembros definidos en dicha interfaz.
Clases y Estructuras Interfaces
Para poder utilizar una interfaz en una clase, o dicho de otra
forma: para "implementar" los miembros expuestos por una
interfaz en una clase debemos hacerlo mediante la
instruccin Implements seguida del nombre de la interfaz:
Clases y Estructuras Interfaces
Una vez que tenemos implementada una interfaz en nuestra
clase, podemos acceder a esos miembros de forma directa,
es decir, usando un objeto creado a partir de la clase:

Para indicar que implementamos ms de una interfaz


podemos hacerlo de dos formas:
Clases y Estructuras Manejo de Excepciones
Es indiscutible que por mucho que nos lo propongamos,
nuestras aplicaciones no estarn libres de errores, y no nos
referimos a errores sintcticos, ya que, afortunadamente, el
IDE (Integrated Development Envirnment) de VS 2010 nos
avisar de cualquier error sintctico e incluso de cualquier
asignacin no vlida (al menos si tenemos activado Option
Strict On).
Pero de lo que no nos avisar, como es lgico, ser de los
errores que se produzcan en tiempo de ejecucin.
Para estos casos, VB pone a nuestra disposicin el manejo
de excepciones.
Veamos pues cmo utilizarlo, sobre todo el sistema de
excepciones estructuradas que es el recomendable para
cualquier desarrollo con .NET Framework.
Clases y Estructuras Manejo de Excepciones
Las excepciones en Visual Basic las podemos controlar
usando las instrucciones Try / Catch / Finally.

Estas instrucciones realmente son bloques de instrucciones,


al estilo de If / Else.

Cuando queramos controlar una parte del cdigo que puede


producir un error lo incluimos dentro del bloque Try.
Si se produce un error, ste lo podemos detectar en el
bloque Catch.

Por ltimo, independientemente de que se produzca o no


una excepcin, podemos ejecutar el cdigo que incluyamos
en el bloque Finally, para indicar el final del bloque de
control de excepciones lo haremos con End Try.
Clases y Estructuras Manejo de Excepciones
Cuando creamos una estructura de control de excepciones
no estamos obligados a usar los tres bloques, aunque el
primero: Try s es necesario, ya que es el que le indica al
compilador que tenemos intencin de controlar los errores
que se produzcan.

Por tanto podemos crear un "manejador" de excepciones


usando los tres bloques, usando Try y Catch o usando Try y
Finally.
Clases y Estructuras Manejo de Excepciones
En el bloque Finally podemos indicar las instrucciones que
queremos que se ejecuten, se produzca o no una
excepcin. De esta forma nos aseguramos de que siempre
se ejecutar un cdigo, por ejemplo para liberar recursos,
se haya producido un error o no.

Aunque si no vamos usar la variable indicada en el bloque


Catch, pero queremos que no se detenga la aplicacin
cuando se produzca un error, podemos hacerlo de esta
forma:
Clases y Estructuras Manejo de Excepciones
Adems de indicar la excepcin que queremos controlar, en
un bloque Catch podemos aadir la clusula When para
evaluar una expresin.

Si la evaluacin de la expresin indicada despus de When


devuelve un valor verdadero, se procesar el bloque Catch,
en caso de que devuelva un valor falso, se ignorar esa
captura de error.
Clases y Estructuras Eventos y Delegados
La forma que tienen nuestras clases y estructuras de
comunicar que algo est ocurriendo, es por medio de
eventos. Los eventos no les son desconocidos a los
desarrolladores de VB6, ya que tambin existen y se
pueden definir en ese lenguaje.

En VB se siguen usando de la misma forma que en VB6,


aunque seguramente siempre que hemos ledo sobre el
tema aparece la palabra delegado. Y es que, aunque VB
nos oculte (o facilite) el trabajo con los eventos, stos
siempre estn relacionados con los delegados.
Clases y Estructuras Eventos
La forma ms sencilla de asociar el evento de un control
con el cdigo que se usar, es haciendo doble-click en el
control; por ejemplo, si en nuestro formulario tenemos un
botn, al hacer doble pulsacin sobre l tendremos
asociado el evento Click del botn.

Esto es as para los eventos predeterminados de los


controles.
Clases y Estructuras Eventos
Lo primero que podemos notar es que en VB utiliza dos
argumentos, esto siempre es as en todos los eventos
producidos por los controles.

El primero indica el control que produce el evento, (en


nuestro ejemplo sera una referencia al control Button1), y el
segundo normalmente contiene informacin sobre el evento
que se produce.

Para definir un evento en una clase usamos la instruccin


Event seguida del nombre del evento y opcionalmente
indicamos los argumentos que dicho evento recibir.
Clases y Estructuras Eventos
En el siguiente trozo de cdigo definimos un evento llamado
DatosModificados que no utiliza ningn argumento:

Para producir un evento en nuestra clase, y de esta forma


notificar a quin quiera interceptarlo, simplemente usaremos
la instruccin RaiseEvent seguida del evento que queremos
producir.
Clases y Estructuras Delegados
Veamos que nos dice la documentacin de Visual Basic
sobre los delegados:

"Un delegado es una clase que puede contener una


referencia a un mtodo. A diferencia de otras clases, los
delegados tienen un prototipo (firma) y pueden guardar
referencias nicamente a los mtodos que coinciden con su
prototipo."

Esta definicin, al menos en lo que respecta a su relacin


con los eventos, viene a decir que los delegados determinan
la forma en que debemos declarar los mtodos que
queramos usar para interceptar un evento.
Clases y Estructuras Delegados

También podría gustarte