vb.net overview corrado cavalli microsoft.net mvp [email protected]
TRANSCRIPT
VB.NET VB.NET OverviewOverview
Corrado CavalliCorrado Cavalli
Microsoft .NET MVPMicrosoft .NET [email protected]@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
.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...
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!
..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!
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
..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!
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
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
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!
Data TypesData Types
Variant non esiste piùVariant non esiste più Tutto deriva da System.ObjectTutto deriva da System.Object
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!
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
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
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
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
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
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)
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
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
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
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
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
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?
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
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
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
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
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
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
??
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
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
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
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
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
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
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
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
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
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
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