vb.net overview corrado cavalli microsoft.net mvp [email protected]

41
VB.NET VB.NET Overview Overview Corrado Cavalli Corrado Cavalli Microsoft .NET MVP Microsoft .NET MVP [email protected] [email protected]

Upload: martino-ricciardi

Post on 01-May-2015

232 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

VB.NET VB.NET OverviewOverview

Corrado CavalliCorrado Cavalli

Microsoft .NET MVPMicrosoft .NET [email protected]@mvps.org

Page 2: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Importante!Importante!

VB.NET è VB7VB.NET è VB7

NonNon èè

E’ un linguaggio nuovo, maturo, OOPE’ un linguaggio nuovo, maturo, OOP Sintassi molto (!) simile a VB6Sintassi molto (!) simile a VB6 Da usare come nuovo linguaggioDa usare come nuovo linguaggio

Page 3: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

.NET Framework.NET Framework Tutti i linguaggi .NET (C++ escluso) richiedono la presenza Tutti i linguaggi .NET (C++ escluso) richiedono la presenza

del .NET Frameworkdel .NET Framework Strato software che si interpone tra il S.O e l’applicazioneStrato software che si interpone tra il S.O e l’applicazione

Codice Codice MSILVB.NET,C#,C++,J#...VB.NET,C#,C++,J#...

.NET Framework .NET Framework CLR (Garbage Collector,Eccezioni,Multithreading)CLR (Garbage Collector,Eccezioni,Multithreading)

BCL (Tipi Base)BCL (Tipi Base)

Sistema OperativoSistema Operativo (Windows 98/NT/2000/XP/2003/CE e Altri) (Windows 98/NT/2000/XP/2003/CE e Altri)

Circa 8000 classi...Circa 8000 classi...

Page 4: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Codice IL e JIT CompilerCodice IL e JIT Compiler

VB.NETVB.NET

Compilatore vbc.exeCompilatore vbc.exe

Codice IL e MetadatiCodice IL e Metadati

JIT CompilerJIT Compiler

Codice x86Codice x86

RUN!

Page 5: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

..NET FrameworkNET Framework

Common Language RuntimeCommon Language Runtime

BCL - Libreria di classiBCL - Libreria di classi

ADO.NET : dati e XMLADO.NET : dati e XML

ASP.NET : Web Forms ASP.NET : Web Forms e servizie servizi Windows FormsWindows Forms

Il tutto... Totalmente Free!Il tutto... Totalmente Free!

Page 6: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

DettagliDettagli

Redist circa 20 MB (già installato Redist circa 20 MB (già installato su WS2003)su WS2003)

Non gira su Windows 95Non gira su Windows 95 Per Per svilupparesviluppare serve Win2000 o serve Win2000 o

superioresuperiore Non serve per applicazioni Non serve per applicazioni

ASP.NET (lato client)ASP.NET (lato client) Esiste per Pocket PC, Esiste per Pocket PC,

SmartPhones, EmbeddedSmartPhones, Embedded

Page 7: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

..NET Framework (Applicazioni)NET Framework (Applicazioni)

Console ApplicationsConsole Applications Windows FormsWindows Forms Windows ServicesWindows Services ComponentsComponents Web Forms (Siti Web)Web Forms (Siti Web) XML Web ServicesXML Web Services

New!New!

Page 8: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Il linguaggioIl linguaggio

Tutti i files hanno la stessa Tutti i files hanno la stessa estensione (.vb) e possono contenere estensione (.vb) e possono contenere piùpiùClassi [Classi [ClassClass]/ Moduli []/ Moduli [ModuleModule].].

EntryPoint (EntryPoint (Sub MainSub Main) di un ) di un programma può essere in un modulo programma può essere in un modulo o in una classeo in una classe

Page 9: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

NamespacesNamespaces Sono dei raggruppamenti LogiciSono dei raggruppamenti Logici I moduli e le classi vivono nei NamespacesI moduli e le classi vivono nei Namespaces VB Imposta un root namespaceVB Imposta un root namespace

VB.NET definisce degli imports globaliVB.NET definisce degli imports globali Imports Namespace=AliasImports Namespace=Alias

Permette di evitare di scrivere il percorso completo a un Permette di evitare di scrivere il percorso completo a un namespacenamespace

NameSpace ABC ... NameSpace DEF ... End NameSpaceEnd NameSpace

Page 10: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

VariabiliVariabili

Global Variables (usare Shared)Global Variables (usare Shared) Usare Option Explicit e Usare Option Explicit e Option StrictOption Strict

Dichiarazioni multiple sulla stessa rigaDichiarazioni multiple sulla stessa riga

Block scope (cicli For,Do...Loop)Block scope (cicli For,Do...Loop)

Dim a,b,c as StringCrea 3 variabili stringa

Dim a,b,c as Stringa,b=Variant c=StringVB6VB6

Dim i as Integer=“1”VB6VB6 Option Strict On= Option Strict On= Error!Error!

Page 11: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Data TypesData Types

Variant non esiste piùVariant non esiste più Tutto deriva da System.ObjectTutto deriva da System.Object

Page 12: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Data TypesData Types ByteByte Char (2 bytes) [A“c”]Char (2 bytes) [A“c”] Boolean (4 bytes)Boolean (4 bytes) Short (2 bytes) Short (2 bytes) {ex Integer}{ex Integer} Integer (4 bytes) Integer (4 bytes) {ex Long}{ex Long} Long (8 bytes)Long (8 bytes) CurrencyCurrency -> Decimal (16 bytes) -> Decimal (16 bytes) SingleSingle DoubleDouble DateDate

Sono Alias dei tipi definiti nel .NET frameworkSono Alias dei tipi definiti nel .NET framework(Int16, Int32...)(Int16, Int32...)

New!

Page 13: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Data TypesData Types

String String Le stringhe a lunghezza fissa Le stringhe a lunghezza fissa non non

esistonoesistono in .NET in .NET

Dim s as New String(“ “c,20)Crea una stringa lunga 20 caratteri

Dim s as String *20 VB6VB6

Page 14: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

InitializersInitializers

E’ possibile dichiarare e inizializzare E’ possibile dichiarare e inizializzare una variabile sulla stessa rigauna variabile sulla stessa rigaDim X as Integer=1Dim y as Integer=myFunctionDim conn as new SQLConnection(...)

Dim x as new MyOwnClass()...Dim x as MyOwnClassx=new MyOwnClass

Sono Sono equivalentiequivalenti

Page 15: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

AssignmentsAssignments

Le proprietà di Default non esistono più Le proprietà di Default non esistono più

Set non si usa piùSet non si usa più X+=1,X-=1,X*=n,X\=n,Y^=n, s+=“xyz”X+=1,X-=1,X*=n,X\=n,Y^=n, s+=“xyz” s=s & “ciao” , s=s & “ciao” , s=s+”ciao”s=s+”ciao”

Bit shifting!

Dim i as Integer=8i=i>>1 (4)

VS 2003 Only

Label1.Caption=“ok”Label1=“ok” VB6VB6 Label1.Text=“ok”VB.NEVB.NE

TT

s=s & 1 (ok)s=s+1 (error) VB.NEVB.NE

TT

Page 16: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Value TypesValue Types

Ereditano da System.ValueTypeEreditano da System.ValueType Enum,Structures,Integer... Tipi baseEnum,Structures,Integer... Tipi base Sono memorizzate sullo Sono memorizzate sullo stackstack Contengono Contengono il valoreil valore della variabile della variabile

Dim i as integer=1

11

Page 17: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Reference TypesReference Types Sono memorizzate nella Sono memorizzate nella HeapHeap Contengono Contengono un riferimentoun riferimento alla variabile alla variabile

Stringhe, ObjectsStringhe, Objects Sono controllati dal Sono controllati dal Garbage CollectorGarbage Collector

Dim s as String=“pippo”

&H1230&H1230 CiaoCiao

&H1235&H1235 pippopippo

...... plutopluto

&H123&H12355

HeapHeap

Page 18: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Boxing-UnboxingBoxing-Unboxing

E’ la conversione di un value type in un E’ la conversione di un value type in un reference type e viceversareference type e viceversa

E’ un operazione dispendiosa in termini di E’ un operazione dispendiosa in termini di prestazioni e memoriaprestazioni e memoria

Accade quando si passa un Value Type ad Accade quando si passa un Value Type ad una variabile objectuna variabile object

Usare Usare CType()CType() o o DirectCast()DirectCast() per evitare per evitare Boxing e UnBoxingBoxing e UnBoxing

CTypeCType tenta la conversione del tipo tenta la conversione del tipo DirectCastDirectCast è più veloce (solo reference è più veloce (solo reference

types)types)

Page 19: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

EnumEnum

Simili a VB6Simili a VB6 E’ possibile definire il E’ possibile definire il tipotipo usato usato

dall’Enumdall’Enum E’ possibile “E’ possibile “decoraredecorare” un enumerato ” un enumerato

con <Flags()>con <Flags()>

DemDemoo

Page 20: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

ArrayArray Sono 0 (zero!) basedSono 0 (zero!) based Il valore usato nella Dim è l’upper Il valore usato nella Dim è l’upper

bound!bound!

Dim a(3,2) as Integer [Matrici]Dim a(3,2) as Integer [Matrici] Array InitializersArray Initializers

Dim x() as Int32={1,2,3}Dim x() as Int32={1,2,3}

Array.CloneArray.Clone Array.Copy(...)Array.Copy(...)

DemDemoo

Dim b(3) as Integer VB.NET: 0,1,2,3VB.NET: 0,1,2,3

C#: 0,1,2C#: 0,1,2

Page 21: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

StruttureStrutture

Sono Value TypesSono Value Types Si definiscono usandoSi definiscono usando

Possono essere viste come classi Possono essere viste come classi “leggere”“leggere”

Structure Prova Public X as Integer Public Y as LongEnd Structure

DemDemoo

Type Prova Public X as Integer Public Y as LongEnd Type VB6VB6 VB.NEVB.NE

TT

Page 22: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

ProcedureProcedure

I Parametri sono ByVal (ByRef in VB6)I Parametri sono ByVal (ByRef in VB6) Si può usare Si può usare ReturnReturn per ritornare un valore per ritornare un valore Le routines richiedono Le routines richiedono sempresempre le parentesi le parentesi

Public Function Test (ByVal X as Integer) as Integer Return X+1End Structure

Test(3) ‘ <-Parentesi

Page 23: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Short circuit e LoopShort circuit e Loop AndAlsoAndAlso e e OrElseOrElse sono short sono short

circuitedcircuited IIFIIF No (!) No (!)

For i as Integer=0 to 10 ...Next

For Each t as TextBox in Me.Controls ...Next

VS 2003 Only

While...End While

While...Wend

Page 24: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Gestione degli ErroriGestione degli Errori E’ possibile usare On Error...E’ possibile usare On Error... Non

Fatelo!

.NET supporta la gestione strutturata delle .NET supporta la gestione strutturata delle eccezioni (SEH)eccezioni (SEH)

Un eccezione è un anomalia che può Un eccezione è un anomalia che può capitare durante la vita dell’applicazionecapitare durante la vita dell’applicazione

L’anomalia viene segnalata attraverso un L’anomalia viene segnalata attraverso un oggetto oggetto ExceptionException (o ereditato da esso) (o ereditato da esso)

Exception.MessageException.MessageException.SourceException.SourceException.StackTraceException.StackTrace

Come faccio a intercettare le Come faccio a intercettare le eccezioni?eccezioni?

Page 25: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Try-Catch-FinallyTry-Catch-FinallyTry ...Catch ex as Exception (When) ... Exit Try ThrowThrow ...Finally ....End Try

Per lanciare un eccezione usarePer lanciare un eccezione usareThrowThrow (Exception) (Exception)

E’ possibile passare l’eccezione originale E’ possibile passare l’eccezione originale usando usando InnerExceptionInnerException

Page 26: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Classi in .NETClassi in .NET Tutti i files hanno estensione .vbTutti i files hanno estensione .vb In un unico file ci possono essere più classiIn un unico file ci possono essere più classi Definite conDefinite con

I membri di una classe possono essere dimensionati I membri di una classe possono essere dimensionati ovunque (non solo nella Declaration Section)ovunque (non solo nella Declaration Section)

E’ possibile esporre costanti pubbliche da una E’ possibile esporre costanti pubbliche da una classeclasse

I Forms I Forms sono delle classi!sono delle classi!Dim f as New Form1f.Show()

<Private,Public...>Class Test End Class

Page 27: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

OverloadingOverloading La possibilità di definire più funzioni con lo La possibilità di definire più funzioni con lo

stesso nome e diverso numero di parametristesso nome e diverso numero di parametri

Non vale per parametri di ritornoNon vale per parametri di ritorno Da preferire rispetto a parametri opzionali Da preferire rispetto a parametri opzionali

(attenzione!) per compatibilità con C#(attenzione!) per compatibilità con C# IsMissingIsMissing non è più supportatanon è più supportata I parametri opzionali devono avere un I parametri opzionali devono avere un

defaultdefault

Public Sub Test (ByVal X as Integer)End Sub

Public Sub Test (ByVal X as Integer,ByVal Z as Integer)End Sub

Page 28: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

PropertiesProperties

ReadOnly e WriteOnly ReadOnly e WriteOnly Al momento Al momento nonnon possono avere scope diversi possono avere scope diversi

Public Class Test Property Name as XXX Get ... End Get Set (Value as XXX)

End Set End PropertyEnd Class

Page 29: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

CostruttoriCostruttori

MetodoMetodo invocato quando si istanzia invocato quando si istanzia una classe (new)una classe (new)

Equivalente di Equivalente di Class_InitializeClass_Initialize Possibilità di passare parametri e Possibilità di passare parametri e

usare Overloadsusare Overloads

Public Class MyOwnClass Public Sub New (ByVal X as Integer) ... End SubEnd Class

Page 30: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Vita degli oggettiVita degli oggetti

In .NET non esiste Class_TerminateIn .NET non esiste Class_Terminate Non viene usato il reference counting Non viene usato il reference counting

ma il ma il Garbage CollectorGarbage Collector Distruzione non deterministica: Non Distruzione non deterministica: Non

sappiamo quando un oggetto verrà sappiamo quando un oggetto verrà scaricato dalla memoriascaricato dalla memoria

Come Come risolviamo risolviamo

il il problemaproblema

??

Page 31: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Finalize (Finalize (~)~)

Viene invocato dal GC quando l’oggetto Viene invocato dal GC quando l’oggetto viene scaricato dalla memoriaviene scaricato dalla memoria

Non risolve il problema della Non risolve il problema della determinazionedeterminazione

Public Overrides Sub Finalize ...End Class

Page 32: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

EventiEventi Event,RaiseEvent e WithEventsEvent,RaiseEvent e WithEvents

Con Handles si possono gestire Con Handles si possono gestire eventi multipli (eventi multipli (No Control Arrays No Control Arrays in .NETin .NET))

AddHandlerAddHandler / / RemoveHandlerRemoveHandler

Private Sub Button1_Click(…) Handles Button1.Click, Button2.Click…End Sub

AddHandler Button1.Click, AddressOf Button1_Click

RemoveHandler Button1.Click, AddressOf Button1_Click

Page 33: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Shared MembersShared Members Sono membri condivisi da tutte le istanze Sono membri condivisi da tutte le istanze

di una classe (Static in C#)di una classe (Static in C#) Si accede usando NomeClasse.XXXSi accede usando NomeClasse.XXX I membri statici possono accedere ai soli I membri statici possono accedere ai soli

fields staticifields statici GlobalMultiuse in VB6GlobalMultiuse in VB6

Public Class MyOwnClass Private Shared ID as Integer Public Shared Function ID as Integer Return ID End FunctionEnd Class

Sostituiscono i Sostituiscono i moduli .BASmoduli .BAS

Page 34: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

EreditarietàEreditarietà Permette di definire che una classe eredita Permette di definire che una classe eredita

Interfaccia e codice da un altra (Is a)Interfaccia e codice da un altra (Is a)

La classe base può essere in un altro La classe base può essere in un altro linguaggio .NET (C#,J#,C++)linguaggio .NET (C#,J#,C++)

La classe ereditante eredita Public,Friend,...La classe ereditante eredita Public,Friend,... La classe eredita tutti gli eventi della classe La classe eredita tutti gli eventi della classe

basebase MyBaseMyBase permette di accedere alla classe da permette di accedere alla classe da

cui si sta ereditandocui si sta ereditando

Public Class MyNewClass Inherits MyBaseClassEnd Class

Page 35: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Override della classe baseOverride della classe base

La classe ereditante può ridefinire La classe ereditante può ridefinire ((OverridesOverrides) i metodi della classe ) i metodi della classe base (se base (se OverridableOverridable))

I metodi overrides sono a loro volta I metodi overrides sono a loro volta overridableoverridable

NotOverridableNotOverridable impedisce impedisce l’overridel’override

Page 36: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Classi AstratteClassi Astratte NotInheritableNotInheritable indica che una indica che una

classe non è ereditabileclasse non è ereditabileEsempio: Classe con soli membri staticiEsempio: Classe con soli membri statici

MustInheritMustInherit definisce una classe definisce una classe astratta che non può essere astratta che non può essere istanziataistanziata

MustOverrideMustOverride definisce un membro definisce un membro che deve essere ereditatoche deve essere ereditato

Page 37: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Scope QualifierScope Qualifier Private,Public,Friend...Private,Public,Friend... ProtectedProtected: Visibile all’interno della stessa : Visibile all’interno della stessa

classe e alle classi che ereditano da essaclasse e alle classi che ereditano da essa Protected FriendProtected Friend: Nella stessa Assembly: Nella stessa Assembly

Page 38: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

InterfacceInterfacce

Si definiscono usando Si definiscono usando InterfaceInterface Possono contenere EventiPossono contenere Eventi L’implementazione è slegata dal L’implementazione è slegata dal

nomenome Le classi ereditate ereditano anche Le classi ereditate ereditano anche

l’implementazione di interfaccial’implementazione di interfaccia

Page 39: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

Interface IPerson

Sub DoSomething()

Property Name() As String

End InterfacePublic Class Person

Implements IPerson

Public Sub DoSomething() Implements IPerson.DoSomething …

End Sub

Public Property Name() As String Implements IPerson.Name

Get … End Get

Set(ByVal Value As String) …

End Set

End Property

End Class

DefinizioneDefinizione

ImplementazioImplementazionene

Può essere diverso

Page 40: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

CommunitiesCommunities

news.microsoft.comnews.microsoft.commicrosoft.public.it.dotnet.vbmicrosoft.public.it.dotnet.vbmicrosoft.public.it.dotnet.*microsoft.public.it.dotnet.*

Comunità degli sviluppatoriComunità degli sviluppatorihttp://www.microsoft.com/italy/msdn/community/http://www.microsoft.com/italy/msdn/community/default.aspdefault.asp

Page 41: VB.NET Overview Corrado Cavalli Microsoft.NET MVP corrado@mvps.org

WebcastsWebcasts

http://www.microsoft.com/italy/msdn/webcast/default.asphttp://www.microsoft.com/italy/msdn/webcast/default.asp

5 Febbraio, 14:30-16:005 Febbraio, 14:30-16:00

VB.NET:VB.NET:Sviluppo di applicazioni desktopSviluppo di applicazioni desktop