vb6 -> vb.net 2008
DESCRIPTION
VB6 -> VB.NET 2008. Mgr. Michal Neuwirth ISV Teachnical Readin e s s. Obsah. .NET Framework VB6 vs VB.NET 200 8 OOP API, COM, COM+ Windows Forms Přístup k datům Migration wizard. Co .NET přináší. Windows aplikace, Webové aplikace Windows a Web služby Konzolové aplikace - PowerPoint PPT PresentationTRANSCRIPT
VB6 -> VB.NET 2008
Mgr. Michal NeuwirthISV Teachnical Readiness
Obsah
.NET Framework VB6 vs VB.NET 2008 OOP API, COM, COM+ Windows Forms Přístup k datům Migration wizard
Co .NET přináší
Windows aplikace, Webové aplikace Windows a Web služby Konzolové aplikace Aplikace pro mobilní zařízení Aplikace pro TabletPC Vývoj pro Servery – SQL, Biztalk, MOSS
2007, .... Používání XML Rychlý vývoj aplikací pomocí Visual Studia
VB 6.0 aplikační prostředíA
ctiveX D
esignersC
OM
Objects
Operating System COM+ Services
Win3
2 A
PI C
alls
COM
DirectX Typelib
ADOActiveX Controls
Data Binding
VB Runtime
Runtime Functions
Forms
Memory Management
Intrinsic Objects
User Controls
ActiveX Documents
Web C
lasses
Data R
eport
Data E
nvironment
VB Application
Přechod z VB6 na .NETA
ctiveX D
esignersC
OM
Objects
Operating System COM+ Services
Win3
2 A
PI C
alls
COM
DirectX Typelib
ADOActiveX Controls
Data Binding
VB Runtime
Runtime Functions
Forms
Memory Management
Intrinsic Objects
User Controls
ActiveX Documents
Web C
lasses
Data R
eport
Data E
nvironment
VB Application
Přechod z VB6 na .NET
Operating System COM+ Services
Win3
2 A
PI C
alls
Common Language Runtime
ActiveX
Designers
CO
M O
bjects
DirectX Typelib
ADOActiveX Controls
Data Binding
VB Runtime
Runtime Functions
Forms
Memory Management
Intrinsic Objects
User Controls
ActiveX Documents
Web C
lasses
Data R
eport
Data E
nvironment
VB Application
Common Language Specification
Přechod z VB6 na .NET
Operating System COM+ Services
Win3
2 A
PI C
alls
Common Language Runtime
ADO .NET and XML
ASP.NETWeb Forms, Services
Base Class Libraries
Windows Forms
VB Application
Přechod z VB6 na .NET
Common Language Specification
Operating System COM+ Services
Win3
2 A
PI C
alls
Common Language Runtime
ADO .NET and XML
ASP.NETWeb Forms, Services
Base Class Libraries
Windows Forms
VB ApplicationVB C# C++ J# Perl Other Languages…
Visual S
tudio.NE
T
Common Language Specification
.NET Framework a Runtime
Operating System COM+ Services
Win3
2 A
PI C
alls
Common Language Runtime
ADO .NET and XML
ASP.NETWeb Forms, Services
Base Class Libraries
Windows Forms
VB C# C++ J# Perl Other Languages…
Visual S
tudio.NE
T
.NET Framework
Garbage Collector Automatický systém na čištění paměti Uvolňuje z paměti nepotřebné objekty, ne hned, ale
v rámci garbage collection Nastavení objektu na Nothing objekt nezničí, pouze
připraví ke zničení Assembly
Samopopisný soubor Obsahuje metadata, výkonný kód, ....
Side by Side Více verzí může běžet vedle sebe Konfiguračním souborem lze nastavit jaké verze
používat
.NET Framework
Součástí .NET Frameworku Microsoft.VisualBasic.DLL
Global Assembly Cache Místo kam se „instalují“ sdílené assembly
Instalace XCopy .MSI Click-Once
Cross-language a cross-platform ladění
Kompilace a běh aplikace
Zdrojový kód
Kompilace
Při instalaci nebo při prvním zavolání každé
metody
Kompilátor jazyka Assembly
Vykonání
JIT CompilerNativníKód
Code (IL)
Metadata
Restart
Klient PC
MDAC!
Click-Once instalace
Setup.exe
Dotnetfx.exe
Web Server
Mdac_typ.exe
Custom.msi
AplikaceAplikace
Dotnetfx.exe
Custom.msi
Setup.exe
a
a
Visual Studio
VB6 VS VB.NET 2008
Typy aplikací
Architektura VB6 projekt VB 2008 Projekt
Desktop aplikace Standard .exe aplikace Windows aplikace (Winforms)
Web aplikace IIS aplikace ASP.NET aplikace (WebForms)
Distribuované aplikace Aplikace využívající DCOM, MTS a COM+
Aplikace využívající Webové služby, .NET remoting, Enterprise Services nebo Windows Communication Foundation
Typy projektů
Komponenta VB6 typ VB 2008 typ
Out of process knihovna ActiveX.exe Není. Upgrade na Windows aplikaci či Class library.
In-process knihovna ActiveX.dll Class library
Visuelní komponenta ActiveX.ocx Windows control library
Visuelní komponenta určená pro hostování v internetových aplikacích
ActiveX document Není. Použít UserControls pro ASP.NET.
Datové typy
VB 2008 je silně typový jazyk, každá proměnná zná svůj typ v době překladu a musí bý inicializovaná hodnotou Variant není k dispozici
Fixní délka řetězců není k dispozici Dim name As String * 15
Pole
Option Base x Ve VB6 určuje počáteční index polí .NET má všechny pole od 0 -> Option Base není
podporováno Dim MojePole (5) = obsahuje 6 položek (0-5)
Late binding
Některé defaultní vlastnosti se liší ve VB6 a VB.NET'VB6Dim o As ObjectSet o = Me.Label1o = "SomeText" 'default je Caption 'VB.NETDim o As ObjectSet o = Me.Label1o.Text = "SomeText"
Cykly
While ... Wend While ... End While
Parametry funkcí
ByRef – default VB6 ByVal – default VB 2008
Optional - musí mít nastavenu výchozí hodnotuPublic Sub TestSub(Optional ByRef p1 As String = "")End Sub
Metody
ParamArray pole objektů předem neznámého počtu pouze jako poslední parametr musí být explicitně uvedeno ByVal pouze jedno-dimenzionální pole všechny prvky mají stejný typ
Sub StudentScores(ByVal Name As String, ParamArray ByVal Scores() As Integer) ……End Sub
StudentScores("Jamie", 10, 26, 32, 15, 22, 24, 16)
Enum
Public Enum MyEnum FirstValue SecondValue ThirdValueEnd EnumPublic Sub TestEnum() Dim e As MyEnum e = SecondValueEnd Sub
MyEnum.SecondValue
Structure
Private Type MyType x As Integer y As Integer name As StringEnd TypePublic Sub TestUDT() Dim udt As MyType udt.name = "Joe" udt.x = 5 udt.y = 10End Sub
Private Structure MyType Dim x As Short Dim y As Short Dim name As StringEnd Structure
Vlastnosti
Private mText As StringPrivate mObj As Object'TextPublic Property Get Text() As String Text = mTextEnd PropertyPublic Property Let Text(ByVal Value As String) mText = ValueEnd Property'ObjectPublic Property Get Obj() As Object Obj = mObjEnd PropertyPublic Property Set Obj(ByVal Value As Object) Set mObj = ValueEnd Property
Private mText As StringPrivate mObj As ObjectPublic Property Text() As String Get Return mText End Get Set(ByVal Value As String) mText = Value End SetEnd PropertyPublic Property Obj() As Object Get Obj = mObj End Get Set(ByVal Value As Object) mObj = Value End SetEnd Property
Vlastnosti
ReadOnly obsahuje pouze blok Get
WriteOnly obsahuje pouze blok Set
Set blok obsahuje implicitní parametr Value
Public ReadOnly Property Obj() As Object Get Obj = mObj End GetEnd PropertyPublic WriteOnly Property TextW() As String Set(ByVal Value As String) mText_w = Value End SetEnd Property
Try '<code that may fail> Catch ex As Exception '<error handling code>
Finally '<clean up>End Try
fReRaise = False
OnError GoTo ErrHandler '<code that may fail> GoTo CleanUp
ErrHandler: If '<condition we can handle> Then '<error handling code> Else fReRaise = True End If
CleanUp: If fReRaise Then Err.Raise errNum
On Error vs Try/Catch/Finally
OnError GoTo ErrHandler '<code that may fail>
ErrHandler: If '<condition we can handle> Then '<error handling code>
fReRaise = FalseTry '<code that may fail>
Else fReRaise = True End IfCleanUp: If fReRaise Then Err.Raise errNum
Catch ex As Exception '<error handling code>Finally '<clean up>
Globální objekty
VB6 VB2008
App N/A. Informace jsou uloženy ve více třídách např. AssemblyInfo, My, ...
Screen N/A. K dispozici ve více třídách Forms, Drawing, ...
Printer PrintDocument
Clipboard Clipboard
Další vlastnostiVB6 VB2008
Array { }
As Any Musí být uveden datový typ
Calendar Součást System.Globalization
Currency Decimal
Date Zůstává jako datový typ. Pro aktuální čas Today()
Debug.Assert, Debug.Print System.Diagnostics
Def<typ> N/A – každá proměnná musí být deklarována
DoEvents System.Windows.Forms.Application.DoEvents()
Empty, Null Nothing
IsEmpty, IsNull N/A – k dispozici IsDBNull
a IMP b (NOT a) OR b
GoSub N/A
IsMissing N/A – všechny parametry musí mít výchozí hodnotu
IsObject IsReference
Let, Set N/A
PSet, Scale System.Drawing (GDI+)
Struktury souborů
VB6 .frm, .frx, .cls, .ctl., .bas, .res, .....
VB.NET .vb, .resx
OOP
Namespaces
Logické hierarchické třídění tříd System.Windows.Forms
Zajišťuje jednoznačnost jmen System.Windows.Forms Neuwirth.Forms
Jmenný prostor může být rozložen do více souborů
Imports „zkracuje“ syntaktický zápis
Dim frmForm1 As New System.Windows.Forms.Form Imports System.Windows.FormsDim frmForm2 As New Form
Objektové programování
VB6 částečně objektový Nebyla podpora dědičnosti, pouze implementace
interface Nebyla podpora konstruktorů a destruktorů
VB 2008 Vychází z konceptu .NET frameworku, kde je vše
založeno na objektech Plně objektový jazyk se vším všudy Chybí jenom vícenásobná dědičnost
Třída (objekt) automobil
Vlastnosti:- Barva- Výkon- Motor- Převodovka- Počet dveří- .........
Metody (operace):- Nastartuj- Zastav- Rozsvit svetla- Zhasni- Otevri dvere- .........
Stav:- Jede- Sviti- Bourane- Kradene- .........
KonstruktorVytvoření nového
automobilu
DestruktorSešrotování
Události:- Zastavil jsem- Rozsvítil jsem- Zhasnul jsem- Otevřel jsem
dveře- .........
Výjimky:- Prasklo kolo- Natural v
diesel motoru- .........
Základní pojmy
Encapsulation (zapouzdření) třída je zapouzdřená jednotka obsahující kód a data zakrytím detailů implementace, lze měnit kód uvnitř
metod, bez ovlivnění klientů využívajících tyto metody
K datům přistupovat zásadně pomocí metod nebo je definovat jako vlastnosti! Nikdy napřímo!
Základní pojmy
Inheritance (dědičnost) vytvoření třídy na základě již existující VB.NET umožňuje pouze dědičnost z jedné třídy základní třída je rodič, odvozená je potomek vícenásobná dědičnost za použití interface
Polymorphism (polymorfizmus) dvě či více tříd definují vlastnost či metodu stejného
jména Metoda Nastup rodiče a potomka může mít odlišné
chování zajištěno přepisováním metod a vlastností
Základní pojmy
Deklarace třídy popis třídy a jejích členů (vlastnosti, metody, ….)
Instance třídy deklarace proměnné určitého typu třídy
Public Class Car Private m_color As String Public Sub New() m_color = "White" End SubEnd Class
Public myCar As New Car()
Tvorba instance
neexistuje SET AS NEW ve VB6 vytvoří objekt inicializovaný na
Nothing a až při prvním použití třídy je třída vytvořena
AS NEW v .NET rovnou vytvoří instanci toto je stejné
Dim Emp As New EmpObjDim Emp As EmpObj = New EmpObj
Modifikátory přístupu
Public neomezený přístup (default)
Private Protected
přístup z potomků Friend
přístup pouze v rámci souboru, kde je třída deklarovaná
Protected Friend
Dědičnost
Osobní automobil je potomek obecného automobilu
Public Class PKW Inherits Car Private m_tz As Boolean Public Sub New() m_tz = False End SubEnd Class
MyBase, MyClass
MyBase slouží k odkazu na deklaraci rodiče dané třídy lze přistoupit k public a protected členům
MyClass slouží k odkazu na deklaraci dané třídy
Prvky tříd
Konstanty Private Const MyInt As Integer = 5
Proměnné Události Metody Vlastnosti Indexer Konstruktory a destruktory Operátory
Shared members
Vlastnosti, metody a proměnné, které jsou společné (sdílené) pro všechny instance dané třídy „globální“ proměnná v rámci třídy
Inicializují se při natažení třídy do paměti Patří třídě a nikoliv instanci Shared metoda nemůže používat non-shared prvky
nelze použít Me ani MyClass
Private Shared kola as IntegerPublic Shared Sub NastavKola() kola = 5End Sub
PKW.NastavKola()
Shared members
Shared metoda nemůže používat non-shared prvky nelze použít Me ani MyClass
Instance members
Vše co nemá modifikátor Shared Každá instance obsahuje vlastní, separátní
kopii proměnných Me
ekvivalent this z C/C++/C# aktuální instance dané třídy lze použít s IS a též přiřadit proměnné
Konstruktor
Nahrazuje událost Class_Initialize z VB6 Má jméno New() Třídy lze poté volat s New()
Dim FirstClass as New MyClass() Lze volat konstruktor rodičovské třídy (pouze v
instance konstruktoru) MyBase.New()
Lze volat konstruktor z jiného instance konstruktoru dané třídy MyClass.New(0)
Instance konstruktor musí explicitně jako první příkaz zavolat jiný konstruktor MyClass.New(), MyBase.New()
Konstruktor
Parametrizovaný konstruktor
Public Class Car Private m_sedadla As Integer Public Sub New(ByVal i As Integer) MyBase.New() m_sedadla = i End SubEnd Class
Konstruktor
Může být více konstruktorů u konstruktorů se pro přetížení nepoužívá Overloads
Public Class Car Private m_sedadla As Integer Public Sub New() MyClass.New(5) End Sub Public Sub New(ByVal i As Integer) MyBase.New() m_sedadla = i End SubEnd Class
Konstruktor
Pokud není žádný definován je automaticky vytvořeno MyBase.New()
Shared konstruktor
Slouží k inicializaci shared dat Shared Sub New()
……End Sub
je public, neobsahuje parametry a nemůže volat jiné konstruktory
je automaticky vyvolán při natažení třídy do paměti je vyvolán pouze jednou a je vyvolán před Shared
konstruktory potomků
Destruktor
Obsahuje operace nutné pro „úklid“ Metoda Finalize () Nahrazuje událost Class_Terminate z VB6 Nelze volat explicitně a volá se při destrukci
objektu volá GC
Přiřazení Nothing neprovede přímé zrušení objektu, ale GC objekt smaže při příští Garbage Collection
Dispose
Dispose() Pokud je potřeba smazat prostředky, které používá
třída metoda lze volat přímo a je též volána z Finalize ()
Lze přetížit i Finalize musí obsahovat MyBase.Finalize() je protected
Overriding
Základ polymorfismu Umožňuje přepsat implementaci metody či
vlastnosti v potomkovi Modifikátory
Overridable – tato metoda může být přepsána (používá se u základní třídy)
Overrides – tato metoda přepisuje rodičovskou metodu
Overriding
Public Class Car Public Overridable Function Popis() As String 'Zakladni popis automobilu End FunctionEnd ClassPublic Class PKW Inherits Car Public Overrides Function Popis() As String 'Popis bude obsahovat informace o cestujicich … End FunctionEnd Class
Polymorfismus
MustOverride tato metoda musí být přepsána
NotOverridable tato metoda nemůže být přepsána
Modifikátory přístupu třídy
MustInherit nelze vytvořit instanci třídy jedná se o „abstraktní“ třídu prvky by měly být MustOverride
NotInheritable z této třídy nelze dědit
Přetěžování
Lze mít více metod, vlastností, konstruktorů atd. se stejným jménem pouze s jinou signaturou
všechny přetížené prvky musí obsahovat modifikátor Overloads
Public Class Car Public Overloads Function Popis() As String End Function
Public Overloads Function Popis(ByVal typ As Integer) As String End Function
Public Overloads Function Popis() As Integer End FunctionEnd Class
Delegates
managed type-safe ukazatel na funkci delegate je založen na signatuře funkce Použitím metody Invoke vyvoláme metodu
uloženou v objektu delegate
Public Function MyFunction(ByVal MyString As String) As Boolean Return TrueEnd Function Delegate Function MyDelegate(ByVal MyString As String) As Boolean
Dim del As MyDelegate = AddressOf MyFunctionretval = del.Invoke(“Hello”)
Events
nové klíčové slovo Handles
VB.Net Class Module
Public Event MyEvent()
Public RaiseIt()
RaiseEvent MyEvent
End Sub
VB.Net Client Project
Public WithEvents objClass As MyClass.Class1
Public Sub OnMyEvent() Handles objClass.MyEvent
code
End Sub
Event handlers
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click End Sub
AddHandler Button1.Click, AddressOf EventHandler
RemoveHandler Button1.Click, AddressOf EventHandler
WIN32 APICOM/COM+
Win32 API
<DllImport("kernel32.DLL”)> _ Public Shared Function MoveFile(src As String,....) As Boolean End Function
COM - nevýhody
Nepřenositelnost na jiné platformy Manuální garbage collection Globální přístup – COM musí být registrován
pro celý počítač Binary compatibilita Není přímá dědičnost, pouze implementace
interfaces DLL Hell – problémy s verzemi IIS restart při aktualizaci COM komponent
používaných v ASP
COM komunikace
Komponenty implementují IUnknown Počítá reference na komponentu
Při tvorbě komponenty pomocí CoCreateInstance a QueryInterface AddRef je automaticky volán Release musíme volat sami
Informace o komponentě jsou uloženy v .TLB Každá komponenta obsahuje unikátní ID
(GUID)
COM & .NET
Components DCOM COM+ Recordset <no equivalent> IUnknown/IDispatch GUID/CLSID/etc
Assemblies Remoting EnterpriseServices DataSet Serialization <no equivalent> <no equivalent>
Volání COM z .NET
Common Language Runtime
COM Server
Client
Runtime Callable Wrapper
Volání COM z .NET
RCW Jedná se o managed třídu Řídí životnost COM objektů Při uvolnění RCW z paměti dojde k zavolání
IUnknown.Release pro všechny interfaces RCW
a) tlbimp myCom.dll /out: myNetCom.dll+ reference na myNetCom.dll
b) Add Reference na COM knihovnu ve VS.NETautomaticky se vytvoří Interop.myCom.dll
Každý objekt má vlastní wrapper
Použití ActiveX Controls
Obdobné jako u ostatních COM komponent Generování .NET ActiveX wrapperu
a) aximp myActivex.ocx + reference na wrapper
b) Toolbox/Customize ve VS.NETautomaticky se vytvoří AxInterop.ocxname.dll
.NET ActiveX wrapper Pro .NET vystupuje jako .NET komponenta
COM CallableWrapper
Common Language Runtime
Volání .NET komponenty z COM
COM ServerIUnknownIDispatch
IFoo
Client
Volání .NET komponenty z COM
COM callable wrappera) Nastavit ve vlastnostech projektu Register for
COM interopb) Použít tlbexp.exe
CCW je plnohodnotný COM objekt (IDispatch,
IUnknown,...) V případě, že je počet referencí na CCW roven 0,
uvolní se sám z paměti Zpřístupnění assembly pro COM
Global Assembly Cache (GAC)
COM Interop & Win32 API
demo
WINDOWS FORMS
WinForms
In VB 6 Form1.Show
In Visual Basic .NET Dim MyForm as New Form1 MyForm.Show()
Mohou dědit Vizuální dědičnost
Míry
VB6 ScaleMode možno měnit
VB 2008 Vše se měří v pixelech
ToolStrip Controls
Vizuální módy
Professional System vlastní
WebBrowser ovládací prvek
optimalizovaný „managed wrapper“ ActiveX prvku web browser control
standardní navigace – goback, goforward, atd.
Objket ObjectForScripting umožňující interakci pomocí skritpů
možnost přepsat některé chování IE kontextové menu accelerator keys
SplitPanel
Náhrada za Splitter základem jsou 2 Panel prvky a Splitter Vertikální í horizontální orientace
FlowLayoutPanel
rozložení ve stylu HTML automatické přemístění potomků Horizontální anebo vertikální směr toku Lišta na vkládání během designu
TableLayoutPanel
rozložené ve stylu HTML tabulek sloupce a řádky absolutní, procentuální
velikost, automatické přeškálování
Další ovládací prvky
MaskedTextBox MaskedTextProvider
ToolTip BubbleMode ikona a titulok
Ovládací prvky
demo
Ovládací prvky
VB6 VB2008
Frame GroupBox
Shape, Line N/A - .NET obsahuje GDI+
OLE N/A
Data N/A - .NET pracuje s daty zcela jinak
Control Arrays „Emulováno specielními objekty“ např. ButtonArray
Dynamické přidávání prvků
'VB6Dim labelControl As ControlSet labelControl = Me.Controls.Add("VB.Label", "labelControl")labelControl.Visible = True Me.Controls.Remove "labelControl"
'VB2008Dim c As Controlc = New Label()c.Name = "labelControl"Me.Controls.Add(c) Me.Controls.RemoveByKey(tempControl)
GDI+
System.Drawing GDI+
Transparency, antialiasing, alpha blending netradiční tvary formulářů
Podpora Flat (Office XP) a 3D stylů kontrolů Nativní práce s grafickými formáty (JPEG,
BMP,....) Podpora tisku
GDI+
demo
DATA
Přístup k datům
VB6 ADO, RDO (VB 4.0), DAO (VB 3.0)
VB2008 ADO.NET ADO je nadále podporováno
DataSet
Přístup k datům
Databáze
DataTable DataTable DataView
BindingSource BindingSource BindingSource
DataGridView DataGridView TextBox
TableAdapter TableAdapter TableAdapter
Práce s daty
Vytvoření datového zdroje pomocí Data Source Configuration Wizard
Lze pomocí Drag & Drop umístit datový zdroj na formulář
Vytoří se: Silně typový dataset TableAdapter BindingSource
Typový DataSet
Jednoduchý přístup k tabulkám a sloupcům v datasetu
NorthwindDataSet.Employees(0).FirstName = “Joe”NorthwindDataSet.Employees(0).FirstName = “Joe”
TableAdapter
Komunikační vrstva mezi datasetem a databází
TableAdapter je generován pro každou tabulku
Lze použít pro Naplnění DataTable v datasetu
Spouštění dotazů Vykonávání uložených procedur Uložení změn do datového zdroje
EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees)
EmployeesTableAdapter.Fill(Me.NorthwindDataSet.Employees)
BindingSource
Poskytuje medoty pro navigaci: MoveFirst, MoveNext, MovePrevious, MoveLast
Poskutuje metody pro manipulaci s daty: Find, Filter, Sort, AddNew, and Remove
NamedRange
ListObject
LabelDatabáze Binding Source
Aktualizace dat
Změny uložené do datasetu nejsou automaticky propagované do datového zdroje
Potřeba použít metodu TableAdapter.Update pro uložení změn
Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees)
Me.EmployeesTableAdapter.Update(Me.NorthwindDataSet.Employees)
Napojení na datové zdroje
možnost „drag&drop” sloupců
vytvoření UI pro data grid individuální ovládací prvky
automatické generování kódu
DataGridView
Napojení na data SQL Server, SQL Server Express, jiné DB,
web.služby, uživatelsky definované objekty Virtuální režim
Virtuálně zobrazuje velký počet řádků Styly a události založené na buňkách (né
řádcích) Podpora Windows graf.témat V buňkách mohou být další ovládací prvky –
tlačítka, checkbox či link label Pracuje v bound i unbound režimu
Práce s daty
demo
Generics (VB 2005) Knihovny velmi často využívají typ object
Umožňuje pracovat s daty libovolného typu Použit pro položky, parametry a návratové
hodnoty Uvedená technika ale vytváří mnoho problémů
Chybějící typová kontrola při překladu Lze použít nevhodné nebo nekompatibilní typy
Zbytečná provize při použití hodnotových typů Boxing, unboxing a typová kontrola za běhu aplikace
Potenciální provize při použití referenčních typů Typová kontrola za běhu aplikace při konverzi výsledků
Obtěžující a nevzhledné typové konverze
Dim seznam As Stack = New Stack()// Parametr je typu object a Proběhne implicitní konverzeseznam.Push(new Pracovnik() )// Návratová hodnota je typu object, explicitní konverzeDim zam As Pracovnik = Ctype(seznam.Pop(), Pracovnik)// Hodnotový typ - integerDim velikost As Stack = New Stack()// Proběhne Boxingvelikost.Push( 42 )// Proběhne UnboxingDim size1 As Integer = Ctype(sizes.Pop(), Integer)// Nevhodné a překladač neodhalísizes.Push( 77 )sizes.Push( new Pracovnik() )// Překlad v pořádku, ale nastane výjimka
InvalidCastExceptionDim size2 As Integer = Ctype(sizes.Pop(), Integer)
Dim employees As Stack(Of Employee) = new Stack(Of Employee)()
// No conversion requiredemployees.Push(New Employee() )
// No conversion requiredDim emp as Employee = employees.Pop()
Dim sizes As Stack(Of Integer) = new Stack(Of Integer)()
// No boxingsizes.Push( 42 )
// No unboxingDim size1 As Integer = sizes.Pop()sizes.Push( 77 )
// Error!, compile-time errorsizes.Push( new Employee() )
//OKDim size2 As Integer = sizes.Pop()
Jak fungují Generics
object int
object int
object int
object int
boxing
int
vložení
bez Generics
object int
unboxing
int
výběr
int
int
int
int
vložení
s Generics
int
výběr
LINQ (VB 9.0)
C# 3.0Visual Basic
9.0Ostatní
.NET Language Integrated Query
LINQ toObjects
LINQ toDataSet
s
LINQ toSQL
LINQ toEntities
LINQ toXML
Objekty
<book> <title/> <author/> <year/> <price/></book>
XMLRelační data
LINQ to SQL
Dim db As New NorthwindDataContext()
Dim matchingCustomers = From cust In db.Customers _ Where cust.CompanyName.Contains("Market") _ Order By cust.ContactName _ Select cust
LINQ to objects
Dim numbers() As Integer = {1, 4, 2, 7, 8, 9} Dim evenNumbers = From num In numbers _
Where num Mod 2 = 0 _ Select num
Class Person Public Age As Integer Public Name As StringEnd Class
Dim people As New List(Of Person)
Dim teenagers = From person In people _ Where person.Age > 12 And person.Age < 20 _ Select person
LINQ to XML
Dim doc As XDocument =<?xml version="1.0" encoding="UTF-16" standalone="yes"?> <organizer> <contacts> <contact category="home"> <name>Oliver Cox</name> </contact> <contact category="home"> <name>Tony Madigan</name> </contact> <contact category="work"> <name>Justin Thorp</name> </contact> </contacts> </organizer>
Dim contacts = From cont In doc...<contact> _ Where cont.@category = "home" _
Select cont
MIGRACE
Převod projektu
demo
Zdroje
Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005 http://msdn2.microsoft.com/en-us/library/aa480541.
aspx Free Book - Introducing Microsoft Visual Basic
2005 for Developers http://msdn2.microsoft.com/en-us/vbrun/ms788235.
aspx http://www.windowsforms.net