Title: VB.NET
1VB.NET
- Dr. Diego Lz. de Ipiña Gz. de Artaza
- http//paginaspersonales.deusto.es/dipina
2El lenguaje VB.NET
- En Visual Basic, un programa tiene los bloques
estándar en todo programa. - El código de Visual Basic se guarda en módulos de
proyecto - Proyecto se compone de ficheros que se compilan
en una aplicación - Todo código en VB.NET debe seguir la siguiente
secuencia - Sentencias Option
- Sentencias Imports
- Procedimiento Main
- Sentencias Class, Module, y Namespace
- Además un programa puede contener sentencias de
compilación condicionales. - Si el código introducido no sigue este orden se
producen errores de compilación.
3Sentencias Option I
- Establecen reglas para el código subsiguiente,
ayudando a prevenir errores sintácticos y de
lógica - La sentencia Option Explicit asegura que todas
las variables están declaradas y escritas
correctamente - Evita que todas las variables declaradas sean de
tipo Object - Las variables se declaran usando Dim, Private,
Public, or ReDim - Option Explicit On Fuerza la declaración
explícita de variables - Dim MyVar As Integer ' Declara variable.
- MyInt 10 Genera error al no estar la variable
declarada - MyVar 10 ' Variable declarada por lo que no
genera error
4Sentencias Option II
- La sentencia Option Strict ayuda a prevenir
errores lógicos y de perdida de datos que ocurren
cuando se trabaja con variables de diferente
tipo. - Prohíbe conversiones implícitas
- Option Strict On Fuerza a declarar variables
también - Dim MyVar As Integer ' Declara variables.
- MyVar 1000 '
- Intento de convertir Integer a float genera
error - MyVar 1234567890.987654321
5Sentencias Option III
- La sentencia Option Compare establece la manera
en la que los strings son comparados, por formato
binario (basado en la representación binaria
interna de los datos) o textual (case
insensitive). - Establece el modo de comparación a binario
- Option Compare Binary ' Esto es, "AAA" es menor
que "aaa". - ' Establece el modo de comparación a textual
- Option Compare Text ' Esto es, "AAA" es igual a
"aaa"
6Sentencias Imports
- Permiten nombrar clases y otros tipos definidos
en los espacios de nombres importados (o
assemblies) sin tener que especificar el cámino
absoluto a ellas. - Imports aliasname namespace o
- Imports aliasname namespace.element
- Si no se especifica alias los elementos definidos
en el namespace se referencian sin prefijo y si
no prefijados con el alias - Se pueden especificar varios Imports en un
programa y deben de aparecer antes de las
sentencias Module y Class - Imports Str Microsoft.VisualBasic.Strings
- ' Coloca Imports al comienzo de tu programa
- Class MyClass1
- Sub ShowHello()
- MsgBox(Str.Left(Hola", 5)) ' Visualiza
"Hola" - End Sub
- End Class
7Procedimiento Main
- Punto de comienzo" de una aplicación el primer
procedimiento accedido cuando ejecutas tu código. - Algunas de las tareas que puedes llevar a cabo
dentro del código del Main - Cargar un formulario
- Averiguar si alguna copia de tu programa existe
- Abrir una conexión a una base de datos
- Cuatro variedades
- Sub Main() ? la más común
- Sub Main(ByVal CmdArgs() As String)
- Function Main() As Integer
- Function Main(ByVal CmdArgs() As String) As
Integer
8Sentencias Class, Module y Namespace
- La mayoría del código de un aplicación VB lo
definen las clases y los módulos - Contienen sentencias
- Sub
- Function
- Event
- Declaraciones de variables y otras partes del
código necesarias para hacer que tu aplicación se
ejecute.
9Sentencia Class I
- Declara el nombre de una clase, así como la
definición de variables, propiedades, eventos y
métodos que la componen - ltattrlistgt Public Private Protected
Friend Protected Friend Shadows
MustInherit NotInheritable - Class name
- Inherits classname
- Implements interfacenames
- statements
- End Class
10Sentencia Class II
- Public ? sin restricciones de acceso
- Private ? entidad accesible sólo en contexto en
que es declarada - Protected ? accesible dentro de una clase o en
hija de ella - Friend ? accesible sólo dentro del programa que
contiene la declaración de la entidad - MustInherit ? no se pueden crear instancias de
esta clase - NotInheritable ? no se permite más herencia
- name ? nombre de la clase
- Inherits ? esta clase deriva de classname
- classname ? (requerido) nombre de la clase de la
que deriva - Implements ? esta clase implementa una interfaz
- interfacename ? nombre de la interfaz derivada
11Sentencia Class III
- statements ? variables, propiedades, eventos y
métodos dentro de la clase - End Class ? termina un bloque de clase
- Cada atributo en attrlist tiene la siguiente
sintáxis y partes - attrname ( attrargs attrinit ), attrlist
Parts - attrname ? (requerido) nombre del atributo
- attrargs ? (optional) lista de argumentos del
atributo - attrinit ? (opcional) lista de campos o
propiedades para inicializar el atributo, si hay
varios separados por comas -
12Sentencia Class IV
- Clases sin modificador de acceso son declaradas
Friend por defecto - Todo elemento dentro de una clase es por defecto
público (métodos) excepto campos y constantes que
son privados - Ejemplos
- Public Class ThisClass
- ' declaración de variable, propiedad, método y
eventos - End Class
-
13Ejemplos declaración clases
- Ejemplo simple herencia
- Public Class ThisClass
- Inherits AnotherClass
- ' Añade código para sobreescribir, sobrecargar
o extender miembros - ' hereda de AnotherClass.
- ...' Declaraciones de variable, propiedad,
método, y eventos - End Class
-
14Declaración de Propiedad
ltattrlistgt Default Public Private
Protected Friend Protected Friend _
ReadOnly WriteOnly Overloads Overrides
_ Overridable NotOverridable MustOverride
Shadows Shared _ Property varname( ByVal
parameter list ) As typename
Implements interfacemember ltattrlistgt Get
block End Get ltattrlistgt Set(ByVal
value As typename ) block End Set End
Property
15Declaración de variable
- Dim ? se usa para declarar espacio de
almacenamiento para variables - Ejemplos de uso
- Dim AnyValue, MyValue As Object
- ' Los números se inicializan por defecto a 0.
- Dim Number As Integer
- Dim FirstNumber, SecondNumber, ThirdNumber As
Integer - Dim MyDate As Date, MyValue As Single, MySwitch
As Boolean - ' DayArray es un array de 51 Objects indexados de
0 a 50. - Dim DayArray(50) As Object
- ' Matrix2 es un array bidimensional de tipo
entero - Dim Matrix2(3, 4) As Integer
16Declaración de constantes
- Const ? define constantes
- Ejemplos de uso
- Const MyConst As Integer 459
- ' Declara una constante pública de tipo string
- ' disponible sólo a nivel de clase
- Public Const MyString As String "HELP"
- ' Declara una constante privada de tipo Integer
- Private Const MyInt As Integer 5
17Sentencias If
- Sintáxis
- If condition Then
- statements
- ElseIf elseifcondition Then
- elseifstatements
- Else
- elsestatements
- End If ó
- If condition Then statements Else
elsestatements
18Ejemplo If
Dim Number, Digits As Integer Dim MyString As
String Number 53 ' Inicializa variable. If
Number lt 10 Then Digits 1 ElseIf Number lt
100 Then Digits 2 Else Digits 3 End If
If Digits 1 Then MyString "One" Else
MyString "More than one"
19Sentencia Select Case
Dim Number As Integer 8 Select Number ' Evalúa
número. Case 1 To 5 ' Número entre 1 y 5
Debug.WriteLine(Entre 1 y 5") Case 6, 7, 8 '
Número entre 6 y 8 Debug.WriteLine(Entre 6
y 8") Case 9 To 10 ' Número entre 9 y 10
Debug.WriteLine(Mayor que 8") Case Else '
Otros valores Debug.WriteLine(No entre 1 y
10") End Select
20Sentencias iterativas (While)
Dim Counter As Integer 0 While Counter lt 20
Evaluar el valor de Counter. Counter 1 '
Incrementar Counter. End While ' Finalizar
cuando counter20 Debug.WriteLine (Counter) '
Imprime 20
21Sentencias iterativas (For)
Dim Words, Digit As Integer Dim MyString As
String For Words 10 To 1 Step -1 ' Realizar 10
repeticiones For Digit 0 To 9 ' Otras 10
MyString MyString CStr(Digit) 'Añadir
num a string Next Digit ' Incrementar
counter MyString MyString " " ' Añadir un
space. Next Words
22Excepciones I
Module Test Sub F() Try G()
Catch e As Exception
Console.WriteLine("Exception in F "
e.Message) e New Exception("F")
' Relanzar excepción. Throw e
End Try End Sub
23Excepciones II
Sub G() Throw New Exception("G") End
Sub Sub Main() Try F()
Catch e As Exception Console.WriteLine("E
xception in Main " e.Message) End Try
End Sub End Module
24Delegates
Delegate Function DoubleFunc(x As Double) As
Double Class A Private f As New
DoubleFunc(AddressOf Square) Overloads Shared
Function Square(x As Single) As Single Return
x x End Function Overloads Shared
Function Square(x As Double) As Double Return
x x End Function End Class
25Eventos
Public Class EventSource ' Declara un evento
Public Event LogonCompleted(ByVal UserName As
String) Sub CauseEvent() ' Lanza un
evento después de login correcto.
RaiseEvent LogonCompleted(Deusto") End
Sub End Class
26Ejemplo complejo clases I
Interface ICustomerInfo ' Declaración de una
interfaz Property CustomerName() As String
Sub UpdateCustomerStatus() Event
UpdateComplete() End Interface
27Ejemplo complejo clases II
Public Class CustomerInfo ' CustomerInfo
implementa interfaz IcustomerInfo Implements
ICustomerInfo Private CustomerNameValue As
String ' Para guardar el valor de la propiedad
Public Event UpdateComplete() Implements
ICustomerInfo.UpdateComplete Public Property
CustomerName() As String Implements _
ICustomerInfo.CustomerName Get
Return CustomerNameValue End Get
Set(ByVal Value As String)
CustomerNameValue Value ' Guarda el valor del
atributo. End Set End Property Public
Sub UpdateCustomerStatus() Implements _
ICustomerInfo.UpdateCustomerStatus ' Añadir
código para modificar estado cuenta '
Lanzar evento para indicar que este método se ha
ejecutado. RaiseEvent UpdateComplete()
End Sub End Class
28Ejemplo complejo clases III
Métodos para probar clase Public Sub
TestImplements() Dim Cust As New
CustomerInfo() ' Asociar manejador para
eventos lanzados por objeto Cust AddHandler
Cust.UpdateComplete, AddressOf HandleUpdateComplet
e ' Asignar valor a la propiedad CustomerName
Cust.CustomerName Diego" ' Recuperar y
visualizar valor propiedad MsgBox(Nombre
cliente " Cust.CustomerName) ' Invoca
UpdateCustomerStatus para lanzar evento
UpdateComplete event. Cust.UpdateCustomerStatus
() End Sub
29Ejemplo complejo clases IV
Sub HandleUpdateComplete() ' Manejador de
evento para UpdateComplete. MsgBox(Actualizaci
ón completada.") End Sub
30Sentencia Namespace
- Declara el nombre de un espacio de nombres
- Namespace name name.name
- componenttypes
- End Namespace
- componenttypes contiene enumeraciones,
estructuras, interfaces, clases, módulos,
delegates y otros espacios de nombres - similares a paquetes en Java
31Ejemplo Namespaces
- Declaración namespaces anidados
- Namespace N1 ' Declara espacio de nombres N1.
- Namespace N2 ' Declara espacio de nombres N2
dentro de N1. - Class A ' Declara una clase dentro de
N1.N2. - ' Añade una clase.
- End Class
- End Namespace
- End Namespace
- Lo mismo en una sola línea
- Namespace N1.N2 ' Declara dos espacios de
nombres N1 y N2. - Class A ' Declara una clase dentro de N1.N2.
- ' Añade una clase aquí.
- End Class
- End Namespace
32Procedimientos con Sub I
ltattrlistgt Overloads Overrides
Overridable NotOverridable MustOverride
Shadows Shared Public Protected
Friend Protected Friend Private Sub name
(arglist) Implements interface.definedname
statements Exit Sub statements
End Sub
33Procedimientos con Sub II
- Lista de atributos de este procedimiento
- Overloads ? Este procedimiento (método)
sobrecarga otro declarado en una clase base - Overrides ? sobreescribe método de clase base
- Overridable/NotOverridable ? método puede NO
ser sobrecargado - MustOverride ? método es abstracto, debe ser
sobreescrito por clase que deriva - Cada argumento en arglist tiene el siguiente
formato - ltattrlistgt Optional ByVal ByRef
ParamArray argname( ) As argtype
defaultvalue
34Ejemplo Sub
' Procedure Sub procedure con dos argumentos. Sub
SubComputeArea(ByVal Length As Double, ByVal
Width As Double) Dim Area As Double '
Declara variable local. If Length 0 Or
Width 0 Then ' Si algún argumento es 0,
salir del procedure Exit Sub ' Exit Sub
immediately. equivalente a Return End If
Area Length Width ' Calcula área del
rectángulo. Debug.WriteLine(Area) '
Imprime valor de área. End Sub
35Sentencia Function
- Sintáxis similar a Sub pero devuelve un valor
- ' Procedure Sub con dos argumentos.
- Public Function CalcSum(ByVal ParamArray Args()
As Double) As Double - Dim I As Integer
- CalcSum 0
- If Args.Length lt 0 Then Exit Function ' No se
han pasado args. - For I 0 To UBound(Args, 1)
- CalcSum Args(I)
- Next I
- End Function ' Devuelve último valor de CalcSum.
- La función puede ser llamada como
- Dim ReturnedValue As Double
- ReturnedValue CalcSum(4, 3, 2, 1)
- ' Args(0) 4, Args(1) 3, and so on.
36Sentencias de compilación condicional
- Pueden aparecer en cualquier lugar en un módulo.
- Se ejecutan si ciertas condiciones se cumplen
- Se pueden también usar para hacer debugging de tu
aplicación, es la única situación en la que se
ejecutan.
37Hola Mundo en VB.NET
' fichero hola.vb ' compilar vbc
hola.vb Imports System module Hello sub
main() Console.WriteLine(Hola desde
VB.NET) end sub end module
38Compilando y ejecutando Hola Mundo
- Para compilar y ejecutar desde línea de comando
- Crear código fuente usando un editor de texto y
llamarlo hola.vb. - Invocar el compilador, escribiendo el comando
vbc hola.vb - Si no hay errores de compilación, el compilador
genera el fichero hola.exe - Para ejecutar el comando escribir hola