La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corrado Cavalli Microsoft .NET MVP

Presentazioni simili


Presentazione sul tema: "Corrado Cavalli Microsoft .NET MVP"— Transcript della presentazione:

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

2 Importante! VB.NET è VB7 Non è E’ un linguaggio nuovo, maturo, OOP
Sintassi molto (!) simile a VB6 Da usare come nuovo linguaggio

3 Sistema Operativo (Windows 98/NT/2000/XP/2003/CE e Altri)
.NET Framework Tutti i linguaggi .NET (C++ escluso) richiedono la presenza del .NET Framework Strato software che si interpone tra il S.O e l’applicazione Codice MSIL VB.NET,C#,C++,J#... .NET Framework CLR (Garbage Collector,Eccezioni,Multithreading) BCL (Tipi Base) Sistema Operativo (Windows 98/NT/2000/XP/2003/CE e Altri) Circa 8000 classi...

4 Codice IL e JIT Compiler
VB.NET Compilatore vbc.exe Codice IL e Metadati RUN! JIT Compiler Codice x86

5 BCL - Libreria di classi Common Language Runtime
.NET Framework ASP.NET : Web Forms e servizi Windows Forms ADO.NET : dati e XML BCL - Libreria di classi Common Language Runtime Il tutto... Totalmente Free!

6 Redist circa 20 MB (già installato su WS2003) Non gira su Windows 95
Dettagli Redist circa 20 MB (già installato su WS2003) Non gira su Windows 95 Per sviluppare serve Win2000 o superiore Non serve per applicazioni ASP.NET (lato client) Esiste per Pocket PC, SmartPhones, Embedded

7 .NET Framework (Applicazioni)
Console Applications Windows Forms Windows Services Components Web Forms (Siti Web) XML Web Services New!

8 Il linguaggio Tutti i files hanno la stessa estensione (.vb) e possono contenere più Classi [Class]/ Moduli [Module]. EntryPoint (Sub Main) di un programma può essere in un modulo o in una classe

9 Namespaces Sono dei raggruppamenti Logici
I moduli e le classi vivono nei Namespaces VB Imposta un root namespace VB.NET definisce degli imports globali Imports Namespace=Alias Permette di evitare di scrivere il percorso completo a un namespace NameSpace ABC NameSpace DEF End NameSpace End NameSpace

10 Global Variables (usare Shared) Usare Option Explicit e Option Strict
Variabili Global Variables (usare Shared) Usare Option Explicit e Option Strict Dichiarazioni multiple sulla stessa riga Block scope (cicli For,Do...Loop) Dim i as Integer=“1” Option Strict On= Error! VB6 Dim a,b,c as String a,b=Variant c=String Dim a,b,c as String Crea 3 variabili stringa VB6

11 Data Types Variant non esiste più Tutto deriva da System.Object

12 Data Types Byte Char (2 bytes) [A“c”] Boolean (4 bytes)
Short (2 bytes) {ex Integer} Integer (4 bytes) {ex Long} Long (8 bytes) Currency -> Decimal (16 bytes) Single Double Date Sono Alias dei tipi definiti nel .NET framework (Int16, Int32...) New!

13 Le stringhe a lunghezza fissa non esistono in .NET
Data Types String Le stringhe a lunghezza fissa non esistono in .NET Dim s as String *20 VB6 Dim s as New String(“ “c,20) Crea una stringa lunga 20 caratteri

14 Initializers E’ possibile dichiarare e inizializzare una variabile sulla stessa riga Dim X as Integer=1 Dim y as Integer=myFunction Dim conn as new SQLConnection(...) Dim x as new MyOwnClass() ... Dim x as MyOwnClass x=new MyOwnClass Sono equivalenti

15 Assignments Le proprietà di Default non esistono più
Set non si usa più X+=1,X-=1,X*=n,X\=n,Y^=n, s+=“xyz” s=s & “ciao” , s=s+”ciao” Label1.Caption=“ok” Label1=“ok” Label1.Text=“ok” VB6 VB.NET VS 2003 Only s=s & 1 (ok) s=s+1 (error) VB.NET Bit shifting! Dim i as Integer=8 i=i>>1 (4)

16 Ereditano da System.ValueType Enum,Structures,Integer... Tipi base
Value Types Ereditano da System.ValueType Enum,Structures,Integer... Tipi base Sono memorizzate sullo stack Contengono il valore della variabile Dim i as integer=1 1

17 Reference Types Sono memorizzate nella Heap
Contengono un riferimento alla variabile Stringhe, Objects Sono controllati dal Garbage Collector Dim s as String=“pippo” Heap &H1235 &H1230 Ciao &H1235 pippo ... pluto

18 Boxing-Unboxing E’ la conversione di un value type in un reference type e viceversa E’ un operazione dispendiosa in termini di prestazioni e memoria Accade quando si passa un Value Type ad una variabile object Usare CType() o DirectCast() per evitare Boxing e UnBoxing CType tenta la conversione del tipo DirectCast è più veloce (solo reference types)

19 E’ possibile definire il tipo usato dall’Enum
Simili a VB6 E’ possibile definire il tipo usato dall’Enum E’ possibile “decorare” un enumerato con <Flags()> Demo

20 Il valore usato nella Dim è l’upper bound!
Array Sono 0 (zero!) based Il valore usato nella Dim è l’upper bound! Dim a(3,2) as Integer [Matrici] Array Initializers Dim x() as Int32={1,2,3} Array.Clone Array.Copy(...) Dim b(3) as Integer VB.NET: 0,1,2,3 C#: 0,1,2 Demo

21 Possono essere viste come classi “leggere”
Strutture Sono Value Types Si definiscono usando Possono essere viste come classi “leggere” Type Prova Public X as Integer Public Y as Long End Type Structure Prova Public X as Integer Public Y as Long End Structure VB6 VB.NET Demo

22 I Parametri sono ByVal (ByRef in VB6)
Procedure I Parametri sono ByVal (ByRef in VB6) Si può usare Return per ritornare un valore Le routines richiedono sempre le parentesi Public Function Test (ByVal X as Integer) as Integer Return X+1 End Structure Test(3) ‘ <-Parentesi

23 AndAlso e OrElse sono short circuited IIF No (!) 
Short circuit e Loop AndAlso e OrElse sono short circuited IIF No (!)  While ... Wend While ... End While For i as Integer=0 to Next VS 2003 Only For Each t as TextBox in Me.Controls ... Next

24 E’ possibile usare On Error...
Gestione degli Errori Non Fatelo! E’ possibile usare On Error... .NET supporta la gestione strutturata delle eccezioni (SEH) Un eccezione è un anomalia che può capitare durante la vita dell’applicazione L’anomalia viene segnalata attraverso un oggetto Exception (o ereditato da esso) Exception.Message Exception.Source Exception.StackTrace Come faccio a intercettare le eccezioni?

25 Per lanciare un eccezione usare Throw (Exception)
Try-Catch-Finally Try Catch ex as Exception (When) Exit Try Throw ... Finally End Try Per lanciare un eccezione usare Throw (Exception) E’ possibile passare l’eccezione originale usando InnerException

26 Classi in .NET Tutti i files hanno estensione .vb
In un unico file ci possono essere più classi Definite con I membri di una classe possono essere dimensionati ovunque (non solo nella Declaration Section) E’ possibile esporre costanti pubbliche da una classe I Forms sono delle classi! <Private,Public...>Class Test End Class Dim f as New Form1 f.Show()

27 Overloading La possibilità di definire più funzioni con lo stesso nome e diverso numero di parametri Non vale per parametri di ritorno Da preferire rispetto a parametri opzionali (attenzione!) per compatibilità con C# IsMissing non è più supportata I parametri opzionali devono avere un default Public Sub Test (ByVal X as Integer) End Sub Public Sub Test (ByVal X as Integer,ByVal Z as Integer) End Sub

28 Properties ReadOnly e WriteOnly
Public Class Test Property Name as XXX Get End Get Set (Value as XXX) End Set End Property End Class ReadOnly e WriteOnly Al momento non possono avere scope diversi

29 Costruttori Metodo invocato quando si istanzia una classe (new)
Equivalente di Class_Initialize Possibilità di passare parametri e usare Overloads Public Class MyOwnClass Public Sub New (ByVal X as Integer) End Sub End Class

30 Come risolviamo il problema?
Vita degli oggetti In .NET non esiste Class_Terminate Non viene usato il reference counting ma il Garbage Collector Distruzione non deterministica: Non sappiamo quando un oggetto verrà scaricato dalla memoria Come risolviamo il problema?

31 Finalize (~) Public Overrides Sub Finalize ... End Class Viene invocato dal GC quando l’oggetto viene scaricato dalla memoria Non risolve il problema della determinazione

32 Eventi Event,RaiseEvent e WithEvents
Con Handles si possono gestire eventi multipli (No Control Arrays in .NET) AddHandler / RemoveHandler Private Sub Button1_Click(…) Handles Button1.Click, Button2.Click … End Sub AddHandler Button1.Click, AddressOf Button1_Click RemoveHandler Button1.Click, AddressOf Button1_Click

33 Shared Members Sono membri condivisi da tutte le istanze di una classe (Static in C#) Si accede usando NomeClasse.XXX I membri statici possono accedere ai soli fields statici GlobalMultiuse in VB6 Public Class MyOwnClass Private Shared ID as Integer Public Shared Function ID as Integer Return ID End Function End Class Sostituiscono i moduli .BAS

34 Ereditarietà Permette di definire che una classe eredita Interfaccia e codice da un altra (Is a) La classe base può essere in un altro linguaggio .NET (C#,J#,C++) La classe ereditante eredita Public,Friend,... La classe eredita tutti gli eventi della classe base MyBase permette di accedere alla classe da cui si sta ereditando Public Class MyNewClass Inherits MyBaseClass End Class

35 Override della classe base
La classe ereditante può ridefinire (Overrides) i metodi della classe base (se Overridable) I metodi overrides sono a loro volta overridable NotOverridable impedisce l’override

36 Classi Astratte NotInheritable indica che una classe non è ereditabile Esempio: Classe con soli membri statici MustInherit definisce una classe astratta che non può essere istanziata MustOverride definisce un membro che deve essere ereditato

37 Scope Qualifier Private,Public,Friend...
Protected: Visibile all’interno della stessa classe e alle classi che ereditano da essa Protected Friend: Nella stessa Assembly

38 Interfacce Si definiscono usando Interface Possono contenere Eventi
L’implementazione è slegata dal nome Le classi ereditate ereditano anche l’implementazione di interfaccia

39 Definizione Interface IPerson Sub DoSomething()
Property Name() As String End Interface Definizione Public 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 Può essere diverso Implementazione

40 Communities news.microsoft.com microsoft.public.it.dotnet.vb microsoft.public.it.dotnet.* Comunità degli sviluppatori

41 Webcasts VB.NET: Sviluppo di applicazioni desktop
 5 Febbraio, 14:30-16:00 VB.NET: Sviluppo di applicazioni desktop


Scaricare ppt "Corrado Cavalli Microsoft .NET MVP"

Presentazioni simili


Annunci Google