390 likes | 541 Views
VB.NET. Dr. Diego Lz. de Ipiña Gz. de Artaza http://paginaspersonales.deusto.es/dipina. El 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
E N D
VB.NET Dr. Diego Lz. de Ipiña Gz. de Artaza http://paginaspersonales.deusto.es/dipina
El 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.
Sentencias 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 usandoDim, 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
Sentencias 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
Sentencias 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"
Sentencias 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
Procedimiento 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
Sentencias 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.
Sentencia Class I • Declara el nombre de una clase, así como la definición de variables, propiedades, eventos y métodos que la componen [ <attrlist> ] [ Public | Private | Protected | Friend | Protected Friend ] [ Shadows ] [ MustInherit | NotInheritable ] Class name [ Inherits classname ] [ Implements interfacenames ] [ statements ] End Class
Sentencia 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
Sentencia 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
Sentencia 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
Ejemplos 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
Declaración de Propiedad [ <attrlist> ] [ Default ] [ Public | Private | Protected | Friend | Protected Friend ] _ [[ ReadOnly | WriteOnly ] [ Overloads | Overrides ] _ [ Overridable | NotOverridable ] | MustOverride | Shadows | Shared ] _ Propertyvarname([ ByVal parameter list ]) [ Astypename ] [ Implementsinterfacemember ] [ <attrlist> ] Get [ block ] End Get [ <attrlist> ] Set(ByValvalueAstypename ) [ block ] End Set End Property
Declaració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
Declaració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
Sentencias If • Sintáxis: If condition [ Then ] [ statements ] [ ElseIf elseifcondition [ Then ] [ elseifstatements ] ] [ Else [ elsestatements ] ] End Ifó If condition Then [ statements ][ Else elsestatements ]
Ejemplo If Dim Number, Digits As Integer Dim MyString As String Number = 53 ' Inicializa variable. If Number < 10 Then Digits = 1 ElseIf Number < 100 Then Digits = 2 Else Digits = 3 End If If Digits = 1 Then MyString = "One" Else MyString = "More than one"
Sentencia 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
Sentencias iterativas (While) Dim Counter As Integer = 0 While Counter < 20 ‘ Evaluar el valor de Counter. Counter += 1 ' Incrementar Counter. End While ' Finalizar cuando counter=20 Debug.WriteLine (Counter) ' Imprime 20
Sentencias 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
Excepciones 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
Excepciones II Sub G() Throw New Exception("G") End Sub Sub Main() Try F() Catch e As Exception Console.WriteLine("Exception in Main: " & e.Message) End Try End Sub End Module
Delegates 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
Eventos 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
Ejemplo complejo clases I Interface ICustomerInfo ' Declaración de una interfaz Property CustomerName() As String Sub UpdateCustomerStatus() Event UpdateComplete() End Interface
Ejemplo 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
Ejemplo 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 HandleUpdateComplete ' 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
Ejemplo complejo clases IV Sub HandleUpdateComplete() ' Manejador de evento para UpdateComplete. MsgBox(“Actualización completada.") End Sub
Sentencia 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
Ejemplo 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
Procedimientos con Sub I [ <attrlist> ] [{ 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
Procedimientos 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: [ <attrlist> ] [ Optional ] [{ ByVal | ByRef }] [ ParamArray ] argname[( )] [ As argtype ] [ = defaultvalue ]
Ejemplo 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
Sentencia 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 <= 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.
Sentencias 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.
Hola 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
Compilando 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