1.11k likes | 1.32k Views
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
E N D
VB6 -> VB.NET 2008 Mgr. Michal Neuwirth ISV 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 Runtime User Controls ActiveX Documents Forms Runtime Functions Memory Management Intrinsic Objects VB 6.0 aplikační prostředí VB Application Data Environment Web Classes Data Report Win32 API Calls ActiveX Designers Data Binding ActiveX Controls DirectX Typelib ADO COM Objects COM COM+ Services Operating System
VB Runtime User Controls ActiveX Documents Forms Runtime Functions Memory Management Intrinsic Objects Přechod z VB6 na .NET VB Application Data Environment Web Classes Data Report Win32 API Calls ActiveX Designers Data Binding ActiveX Controls DirectX Typelib ADO COM Objects COM COM+ Services Operating System
Data Environment Web Classes Data Report VB Runtime User Controls ActiveX Documents Forms ActiveX Designers Runtime Functions Memory Management Intrinsic Objects Data Binding ActiveX Controls DirectX Typelib ADO COM Objects Přechod z VB6 na .NET VB Application Win32 API Calls Common Language Runtime COM+ Services Operating System
ASP.NETWeb Forms, Services Windows Forms ADO .NET and XML Base Class Libraries Přechod z VB6 na .NET VB Application Common Language Specification Win32 API Calls Common Language Runtime COM+ Services Operating System
ASP.NETWeb Forms, Services Windows Forms ADO .NET and XML Base Class Libraries Přechod z VB6 na .NET Visual Studio.NET VB Application J# Other Languages… C# C++ Perl VB Common Language Specification Win32 API Calls Common Language Runtime COM+ Services Operating System
ASP.NETWeb Forms, Services Windows Forms ADO .NET and XML Base Class Libraries .NET Framework a Runtime Visual Studio.NET J# Other Languages… C# C++ Perl VB Common Language Specification Win32 API Calls Common Language Runtime COM+ Services Operating System
.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í
Code (IL) Zdrojový kód Kompilátor jazyka Assembly Metadata Nativní Kód JIT Compiler Vykonání Kompilace a běh aplikace Kompilace Při instalaci nebo při prvním zavolání každé metody
Klient PC Click-Once instalace Web Server Setup.exe Setup.exe Dotnetfx.exe Dotnetfx.exe Mdac_typ.exe a Custom.msi Custom.msi Restart MDAC! Aplikace Aplikace a
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 • Variantnení 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 'VB6 DimoAsObject Seto = Me.Label1 o = "SomeText"'default je Caption 'VB.NET DimoAsObject Seto = Me.Label1 o.Text = "SomeText"
Cykly • While ... Wend • While ... End While
Parametry funkcí • ByRef – default VB6 • ByVal – default VB 2008 • Optional - musí mít nastavenu výchozí hodnotu PublicSubTestSub(OptionalByRefp1AsString= "") EndSub
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, ParamArrayByVal Scores() As Integer) ……End SubStudentScores("Jamie", 10, 26, 32, 15, 22, 24, 16)
Enum PublicEnumMyEnum FirstValue SecondValue ThirdValue EndEnum PublicSubTestEnum() Dime AsMyEnum e = SecondValue EndSub MyEnum.SecondValue
Structure PrivateTypeMyType xAsInteger yAsInteger nameAsString End Type PublicSubTestUDT() DimudtAsMyType udt.name = "Joe" udt.x = 5 udt.y = 10 EndSub PrivateStructureMyType DimxAsShort DimyAsShort DimnameAsString EndStructure
Vlastnosti PrivatemTextAsString PrivatemObjAsObject 'Text PublicPropertyGetText() AsString Text = mText EndProperty PublicPropertyLetText(ByValValue AsString) mText = Value EndProperty 'Object PublicPropertyGetObj() AsObject Obj = mObj EndProperty PublicPropertySetObj(ByValValue AsObject) SetmObj = Value EndProperty
PrivatemTextAsString PrivatemObjAsObject PublicPropertyText() AsString Get ReturnmText EndGet Set(ByValValue AsString) mText = Value EndSet EndProperty PublicPropertyObj() AsObject Get Obj = mObj EndGet Set(ByValValue AsObject) mObj = Value EndSet EndProperty
Vlastnosti • ReadOnly • obsahuje pouze blok Get • WriteOnly • obsahuje pouze blok Set • Set blok obsahuje implicitní parametr Value PublicReadOnlyPropertyObj() AsObject Get Obj = mObj EndGet EndProperty PublicWriteOnlyPropertyTextW() AsString Set(ByValValue AsString) mText_w = Value EndSet EndProperty
On Error vs Try/Catch/Finally Try '<code that may fail> Catch ex As Exception '<error handling code> Finally '<clean up> End Try fReRaise = False 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 Try '<code that may fail> OnError GoTo ErrHandler '<code that may fail> Catch ex As Exception '<error handling code> ErrHandler: If '<condition we can handle>Then '<error handling code> Finally '<clean up> Else fReRaise = True End If CleanUp: If fReRaiseThen Err.RaiseerrNum
Struktury souborů • VB6 • .frm, .frx, .cls, .ctl., .bas, .res, ..... • VB.NET • .vb, .resx
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 DimfrmForm1AsNewSystem.Windows.Forms.Form ImportsSystem.Windows.Forms DimfrmForm2 AsNewForm
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
Stav: • Jede • Sviti • Bourane • Kradene • ......... • Vlastnosti: • Barva • Výkon • Motor • Převodovka • Počet dveří • ......... • Metody (operace): • Nastartuj • Zastav • Rozsvit svetla • Zhasni • Otevri dvere • ......... Konstruktor Vytvoření nového automobilu Destruktor Sešrotování • Události: • Zastavil jsem • Rozsvítil jsem • Zhasnul jsem • Otevřel jsem dveře • ......... • Výjimky: • Prasklo kolo • Natural v diesel motoru • ......... Třída (objekt) automobil
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 PublicClassCar Private m_colorAsString PublicSubNew() m_color = "White" EndSub EndClass PublicmyCarAsNewCar()
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 EmpObj Dim 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 PublicClassPKW InheritsCar Privatem_tzAsBoolean PublicSubNew() m_tz = False EndSub EndClass
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 • Konstruktorya 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 Sharedkola as Integer PublicShared SubNastavKola() kola = 5 EndSub 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_Initializez 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 PublicClassCar Privatem_sedadlaAsInteger PublicSubNew(ByValiAsInteger) MyBase.New() m_sedadla = i EndSub EndClass