VB6 -> VB.NET 2008

Post on 15-Jan-2016

96 views 3 download

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 Presentation

transcript

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