Visual Basic .NET Migration / D - Trivadis

trivadis.com

Visual Basic .NET Migration / D - Trivadis

Trivadis @ DevDays, DevDays,

Dezember 2001

Visual Basic .NET

Migration

Martin Schreiber, Trivadis AG

martin.schreiber@trivadis.com


Agenda

�� Was ist neu in VB.NET

�� Sprache, Features, Projekttypen, IDE

�� VB.NET - Objektorientiert

�� Etwas OO-Theorie, OO Theorie, Typen, Namespaces

�� Migration von VB6 nach VB.NET

�� Migration Wizard, Wizard

Probleme, Ansätze


Was ist neu - Sprache

�� Neues Fundament für VB

�� MSVBVM60.DLL & Co. ersetzt durch

CLR (CLR=Common Language Runtime) Runtime

�� CLR für Windows XP, ME, 2000, 9x, NT 4

�� Stark erweiterte Funktionalität

�� .NET-Framework .NET Framework Klassen (einige 1000)

ersetzen Windows API, COM-DLL‘s COM DLL‘s und

ActiveX-Controls

ActiveX Controls


Was ist neu - Sprache

�� COM-Interoperabilität

COM Interoperabilität

�� COM-Klassen COM Klassen und ActiveX-Controls

ActiveX Controls

nahtlos integrierbar ohne zusätzlichen

Aufwand

S Datenbankzugriff mit ADO, DAO, etc.

S Eigenbau mit VB, C++ etc.

S ActiveX-Controls

ActiveX Controls

S Automation von MS-Office MS Office


Was ist neu - Sprache

�� VB.NET ist Objektorientiert (!)

�� Konstruktoren

�� Einfache Vererbung

�� Überladen von Methoden/Properties

Methoden/ Properties

�� Strukturierte Fehlerbehandlung

�� Try ... Catch ... Finally ... End Try

anstelle von

On Error Goto|Resume

Goto|Resume ...


Was ist neu - Features

�� Formulareditor

�� Neues Objektmodell

(à là WFC=Windows Foundation Classes) Classes

�� Wird auch von C# und C++ verwendet

�� Erspart dem Entwickler einst Mühsames:

S AutoScroll - automatische ScrollBars

S Mini¦MaximumSize

Mini MaximumSize - begrenzen Fenstergrösse

S Menu - lässt Menüs dynamisch erzeugen

�� Generiert Initialisierungscode für Controls

im Hintergrund


Was ist neu - Features

�� VB.NET erzeugt DLL‘s und EXE‘s

�� Eigenständige Programme werden beim

Kompilieren zu EXE‘s

�� Alles andere sind Klassen oder

Klassenbibliotheken und werden DLL‘s

�� Neue Projekttypen in VB.NET

�� Windows-Service,

Windows Service, Web-Application

Web Application, , Web- Web

Service, Web-Control

Web Control Library und Console- Console

Application


Was ist neu - Projekttypen

�� Beispiel Console Application (exe exe)

Module Module1

Sub Main()

System.Console.WriteLine("hello VB-hacker")

System.Console.ReadLine()

End Sub

End Module

Imports System.Console

Module Module1

Sub Main()

WriteLine("hello VB-hacker")

ReadLine()

End Sub

End Module

*


Was ist neu - IDE


Was ist neu - IDE (Demo)

�� Demo

�� Neue "Web Application"

Application

S Grid aus Toolbox

S Eventlog aus Server Explorer

S Generierten Code zeigen

S Grid an Eventlog binden

S ViewState ausschalten

S F5

S Grid aus DataGrid1.txt einfügen

S F5


Was ist neu - ADO.NET

�� Datenbankanbindung mit ADO.NET ?

�� Web-Anwendungen Web Anwendungen stellen neue

Anforderungen

S Sehr viele "lesende" User gleichzeitig

S Vergleichsweise wenig "schreibende" User

�� DB-Verbindungen DB Verbindungen = Ressourcenfresser

S Daten lesen und Verbindung so schnell wie

möglich trennen (=Ressourcen freigeben)


Was ist neu - ADO.NET

ODBC

RDBMS

OLE-DB

RDBMS MDDBMS

ADO.NET

Managed Provider

Index

Server

Disconnected

Architektur zur

Unterstützung

n-tier Modell

RDBMS

XML

*


Agenda

�� Was ist neu in VB.NET

�� Sprache, Features, Projekttypen, IDE

�� VB.NET - Objektorientiert

�� Etwas OO-Theorie, OO Theorie, Typen, Namespaces

�� Migration von VB6 nach VB.NET

�� Migration Wizard, Wizard

Probleme, Ansätze


VB.NET - OO-Theorie

OO Theorie

�� Alles ist ein Objekt...

�� Auch Datentypen:

Dim myInt As Integer

Dim myString As String

myString = CStr(myInt)

CStr(myInt

�� Beweis: myString = myInt.ToString

�� Grund: Alle Klassen werden von System.Object

abgeleitet und vererben deren Methoden und

Eigenschaften, wie z.B. ToString

*


VB.NET - OO-Theorie

OO Theorie

Class BasisKlasse

Sub WhoAreYou()

WriteLine("I am BasisKlasse")

End Sub

End Class

Class Ableitung

Inherits BasisKlasse

Sub WeitereMethode()

' irgendwas sinnvolles

End Sub

BasisKlasse

Ableitung

End Class Dim obj As As new Ableitung()

obj.WhoAreYou()

obj.WeitereMethode()

*


VB.NET - OO-Theorie

OO Theorie

Class BasisKlasse

Overridable Sub WhoAreYou()

WriteLine("I am BasisKlasse")

End Sub

End Class

Public Class Ableitung

Inherits Base

Overrides Sub WhoAreYou()

WriteLine("I am Ableitung")

WriteLine("My Base:")

MyBase.WhoAreYou()

End Sub

...

Output:> Output:>

Output:>

Dim obj As As new

Ableitung()

obj.WhoAreYou()

I I am am Ableitung

Ableitung

Base:

Base:

I I am am Base

Base

*


VB.NET - OO-Theorie

OO Theorie

Class Ableitung

Overloads Sub Print(i As Integer)

WriteLine("Int: {0}", i)

End Sub

Overloads Sub Print(s As String)

WriteLine("Str: {0}", s)

End Sub

Overloads Sub Print(d As Double)

WriteLine("Dbl: {0}", s)

End Sub

...

Output:>

Output:>

Int Int: Int Int : 33 33

Str Str: Str Str : hallo

Dbl Dbl: Dbl Dbl : 3.1415926

Dim obj As As _

New Ableitung()

Dim i As As Integer

Dim s As As String

Dim d As As Double

i = 33 33

s = "hallo"

d = 3.1415926

obj.Print(i)

obj.Print(s)

obj.Print(d)

*


VB.NET - OO-Theorie

OO Theorie

�� Interfaces

�� Definieren das leere Gerüst einer Klasse

�� Implementierende Klasse:

S hat die gleichen Eigenschaften und Methoden

S Schlüsselwort Implements

�� Access Modifiers

�� Steuern den Geltungsbereich

S Private, Private,

Friend, Friend,

Public

S Protected (Zugriff aus vererbter Klasse)


VB.NET - Typen

VB 6

Boolean

Byte

Date

Double

Single

Integer

Long

Currency

Object

Variant

String

2 Byte

4 Byte

8 Byte

VB.NET (CTS-Typen)

(CTS Typen)

Boolean

Byte

Date

Double

Single

Short

Integer

Long

Decimal

Object

Object

String

Char

2 Byte

4 Byte

8 Byte

12 Byte

Unicode Character


VB.NET - Typen

�� Deklaration und Zuweisung

�� Initialisierung bei der Deklaration

Dim myInt As Integer = 5

Dim myArray() myArray()

As Byte = {11,22,33} ' (0-2) (0 2)

Dim myPersonA As New Person(...)

�� Objektzuweisung

myPersonB = myPersonA ' Set gibt's nicht mehr

�� Zuweisung mit Operation

myInt+=i myInt+= (auch -= *= /= \= ^= &=) &=

Option Strict

�� Option


VB.NET - Typen

�� Übergabe an Methoden

�� Werttypen (Value Value Types) Types

S Primitive Typen aus Performancegründen auf

dem Stack: Stack:

Boolean, Boolean,

Byte, Byte,

Date, Date,

Double, Double,

Integer, Integer,

Long, Long,

Single, Single,

Struct, Struct,

Enum

S ByRef übergibt den Zeiger auf den Speicherplatz

( die Methode kann den Wert aus der Sicht des

Aufrufers verändern )

S ByVal übergibt die Kopie des Wertes

( die Methode kann nur die Kopie verändern, nicht

das Original der Aufrufers )


VB.NET - Typen

�� Referenztypen (Reference Reference Types) Types

S String, String,

Arrays und alle anderen Objekte werden

im Heap angelegt.

S ByRef übergibt den Zeiger auf die Daten

( Daten können verändert werden oder dem Zeiger

kann ein anderes Objekt zugewiesen werden )

S ByVal übergibt die Kopie des Zeigers

( Daten können verändert werden; der Zeiger nicht )


VB.NET - Namespaces

�� Gab es schon bei VB 6 ;-) ;

�� Hierarchische Organisation der Klassen

S Unzumutbar lange Namen von Typen:

Dim c As _

System.Data.OleDb.OleDbConnection()

System.Data.OleDb.OleDbConnection()

S Imports listet dem Compiler Namespaces auf

S Im Anweisungen kann der Namespace weg-

gelassen werden; der Compiler weiss trotzdem

Bescheid:

Imports System.Data.OleDb

Dim c As OleDbConnection()

OleDbConnection()


VB.NET - Namespaces

System.Collections Alternativen zur Collection

System.Data ADO.NET ADO.NET-Klassen Klassen

System.Diagnostics Debug und Trace

System.Drawing Methoden für GDI+

System.IO Dateizugriff, Streams

System.Collections

System.Data

System.Diagnostics

System.Drawing

System.IO

System.Math ...

System.Reflection

System.Threading

System.Windows.Forms

System.Web.UI

System.Xml

System.Reflection Zugriff auf Metadaten

System.Threading Multithreading

Multithreading-Support Support

System.Windows.Forms Windows Windows-Formularmodell

Formularmodell

System.Web.UI Web Web-Page Page Modell

System.Xml XML XML-Support Support

Microsoft.VisualBasic.Constants

VB VB-Konstanten

Konstanten (vbCrlf vbCrlf etc.)


Agenda

�� Was ist neu in VB.NET

�� Sprache, Features, Projekttypen, IDE

�� VB.NET - Objektorientiert

�� Etwas OO-Theorie, OO Theorie, Typen, Namespaces

�� Migration von VB6 nach VB.NET

�� Migration Wizard, Wizard

Probleme, Ansätze


Migration - Wizard

�� Demo (TypMigTest.vbp

( TypMigTest.vbp

�������� VBNET_MigTest.vbproj)

VBNET_MigTest.vbproj


Migration - Probleme

�� Datentypen

�� Integer 4 Byte, Long 8 Byte, Currency

S Werte haben auf jeden Fall Platz

S Decimal (12 Byte) ersetzt Currency (8 Byte)

�� Date 8 Byte Ganzzahl (vorher Double)

S Probleme wenn vorher mit Double gerechnet

wurde - ToOADate kann in Double umrechnen

�� Variant wird zu Object

S IsNothing ersetzt IsEmpty

S IsMissing entfällt, da Optionale Parameter

immer einen Default-Wert Default Wert haben müssen


Migration - Probleme

�� Keine Fixed-Length

Fixed Length Strings

S Ersatz durch VB6.FixedLengthString

S Einsatz eines Attributes wenn innerhalb einer

Struktur:

�� Arrays Zero-based

Zero based, , kein Option Base

S Kompatibilitätsklasse für NonZero-Based

NonZero Based

Arrays (Performance Nachteil)

S Aktion: Arrays manuell auf Zero-Based

Zero Based


Migration - Probleme

�� Gültigkeitsbereich

S VB.NET definiert Blöcke als Gültigkeitsbereich

S Deklarationen innerhalb eines Blockes sind

auch nur dort gültig (VB6: mindestens Methode)

S Aktion: Deklarationen zum Anfang

der Methode verschieben

�� Benutzerdefinierte Typen

S Structure ersetzt Type

S Memory-Layout

Memory Layout Unterschiedlich

S Aktion: ???


Migration - Probleme

�� Parameterübergabe

�� "As Any" Any"

in API-Deklarationen

API Deklarationen

S Von VB.Net nicht unterstützt

S Aktion: API-Deklarationen API Deklarationen überladen

(Overloads

Overloads Private Declare ...)

�� ByVal vs. ByRef

S Aktion: VB 6 nach Defaults absuchen und

gezielt ByRef oder ByVal einsetzen


Migration - Integration

�� Transaktionen mit MTS/COM+

�� .NET bietet unterstützt COM+

S Namespaces

System.EnterpriseServices

System.Runtime .CompilerServices

CompilerServices

System.Reflection

S Attribute

S

")>

S )>

S ()>


Migration - Integration

Imports System.EnterpriseServices

Imports System.Runtime.CompilerServices

Imports System.Reflection



Namespace MyComponent

_

Public Class Account

Inherits ServicedComponent

Imports MyComponent

_

Public Class Class Client

Public Sub Post(ByVal amount As Double) Sub Sub Main()

...

Dim Dim Account As As _

End Sub

New New Account()

Account.Post(100)

End Class

Account.Post(100)

End Sub

End Namespace

End Sub

End End Class Class


Zusammenfassung

�� Von VB 5/6 nach VB.NET

�� VB.NET ist kein verbessertes VB 6,

sondern VB für .NET

S Abstriche wurden notwendig, um .NET- .NET

Kompatibel zu bleiben

S Erweiterung wurden durch .NET- .NET

Grundfunktionalität möglich

�� .NET-Technologien .NET Technologien sollten in VB.NET- VB.NET

Anwendungen einfliessen

S Die Architektur bestehender Applikationen wird

sich massiv verändern


Trivadis Kursangebot .NET

Introduction to ASP.NET

Developing Mobile Web 2

Applications Using Microsoft

Mobile Internet Toolkit

Einführung OO Einführung in XML

3

Introduction to C#

Programming for the

Microsoft .NET Platform

Programming the 5

Microsoft .NET Framework

using C#

Securing and Deploying

Microsoft .NET Assemblies

5

Programming with

5

Microsoft Visual Basic .NET

C# VB.NET

Programming the

5

Microsoft .NET Framework

with Visual Basic.NET

Programming with ADO.NET

Fundierte

Programmiererfahrung

mit VB6, C++ oder Java

C# & VB.NET

Grundlagen der .NET

Programmierung

Developing Web Services

using Microsoft Visual

Studio.NET

3

Weitere Magazine dieses Users
Ähnliche Magazine