VB.NET - Trivadis

Transcription

VB.NET - Trivadis
Trivadis @ DevDays,
Dezember 2001
Visual Basic .NET
Migration
Martin Schreiber, Trivadis AG
martin.schreiber@trivadis.com
Agenda
z
Was ist neu in VB.NET
¾
z
VB.NET - Objektorientiert
¾
z
Sprache, Features, Projekttypen, IDE
Etwas OO-Theorie, Typen, Namespaces
Migration von VB6 nach VB.NET
¾
Migration Wizard,
Probleme, Ansätze
Was ist neu - Sprache
z
Neues Fundament für VB
¾ MSVBVM60.DLL & Co. ersetzt durch
¾
z
CLR (CLR=Common Language Runtime)
CLR für Windows XP, ME, 2000, 9x, NT 4
Stark erweiterte Funktionalität
¾
.NET -Framework Klassen (einige 1000)
ersetzen Windows API, COM -DLL‘s und
ActiveX-Controls
Was ist neu - Sprache
z
COM-Interoperabilität
¾
COM -Klassen und ActiveX-Controls
nahtlos integrierbar ohne zusätzlichen
Aufwand
ƒ
ƒ
ƒ
ƒ
Datenbankzugriff mit ADO, DAO, etc.
Eigenbau mit VB, C++ etc.
ActiveX- Controls
Automation von MS-Office
Was ist neu - Sprache
z
VB.NET ist Objektorientiert (!)
¾
¾
¾
z
Konstruktoren
Einfache Vererbung
Überladen von Methoden/Properties
Strukturierte Fehlerbehandlung
¾ Try ... Catch ... Finally ... End Try
anstelle von
On Error Goto|Resume ...
Was ist neu - Features
z
Formulareditor
¾
¾
¾
Neues Objektmodell
(à là WFC=Windows Foundation Classes)
Wird auch von C# und C++ verwendet
Erspart dem Entwickler einst Mühsames:
ƒ
ƒ
ƒ
¾
AutoScroll - automatische ScrollBars
Mini¦MaximumSize - begrenzen Fenstergrösse
Menu - lässt Menüs dynamisch erzeugen
Generiert Initialisierungscode für Controls
im Hintergrund
Was ist neu - Features
z
VB.NET erzeugt DLL‘s und EXE‘s
¾
¾
z
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, Web-Application, WebService, Web-Control Library und ConsoleApplication
Was ist neu - Projekttypen
¾
Beispiel Console Application (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)
z
Demo
¾
Neue "Web Application"
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Grid aus Toolbox
Eventlog aus Server Explorer
Generierten Code zeigen
Grid an Eventlog binden
ViewState ausschalten
F5
Grid aus DataGrid1.txt einfügen
F5
Was ist neu - ADO.NET
z
Datenbankanbindung mit ADO.NET ?
¾
Web-Anwendungen stellen neue
Anforderungen
ƒ
ƒ
¾
Sehr viele "lesende" User gleichzeitig
Vergleichsweise wenig "schreibende" User
DB-Verbindungen = Ressourcenfresser
ƒ
Daten lesen und Verbindung so schnell wie
möglich trennen (=Ressourcen freigeben)
*
Was ist neu - ADO.NET
ADO.NET
Managed Provider
Disconnected
Architektur zur
Unterstützung
n-tier Modell
OLE-DB
ODBC
RDBMS
RDBMS
MDDBMS
Index
Server
RDBMS
XML
Agenda
z
Was ist neu in VB.NET
¾
z
VB.NET - Objektorientiert
¾
z
Sprache, Features, Projekttypen, IDE
Etwas OO-Theorie, Typen, Namespaces
Migration von VB6 nach VB.NET
¾
Migration Wizard,
Probleme, Ansätze
VB.NET - OO-Theorie
z
Alles ist ein Objekt...
¾
Auch Datentypen:
Dim myInt As Integer
Dim myString As String
myString = 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
Class BasisKlasse
Sub WhoAreYou()
WriteLine("I am BasisKlasse")
End Sub
End Class
Class Ableitung
Inherits BasisKlasse
Sub WeitereMethode()
' irgendwas sinnvolles
End Sub
End Class
BasisKlasse
Ableitung
Dim
Dim obj
obj As
As new
new Ableitung()
Ableitung()
obj.WhoAreYou()
obj.WhoAreYou()
obj.WeitereMethode()
obj.WeitereMethode()
VB.NET - OO-Theorie
Class BasisKlasse
Overridable Sub WhoAreYou()
WriteLine("I am BasisKlasse")
End Sub
End Class
Output:>
I am Ableitung
Base:
Public Class Ableitung
I am Base
Inherits Base
Overrides Sub WhoAreYou()
WriteLine("I am Ableitung")
WriteLine("My Base:")
MyBase.WhoAreYou()
End Sub
Dim
Dim obj
obj As
As new
new
...
Ableitung()
Ableitung()
obj.WhoAreYou()
obj.WhoAreYou()
*
VB.NET - OO-Theorie
Class Ableitung
Overloads Sub Print(i As
WriteLine("Int: {0}",
End Sub
Overloads Sub Print(s As
WriteLine("Str: {0}",
End Sub
Overloads Sub Print(d As
WriteLine("Dbl: {0}",
End Sub
...
Output:>
Int:
Int: 33
Str:
Str: hallo
Dbl:
Dbl: 3.1415926
Integer)
i)
String)
s)
Double)
s)
Dim
Dim obj
obj As
As __
New
New Ableitung()
Ableitung()
Dim
Dim ii As
As Integer
Integer
Dim
Dim ss As
As String
String
Dim
Dim dd As
As Double
Double
ii == 33
33
ss == "hallo"
"hallo"
dd == 3.1415926
3.1415926
obj.Print(i)
obj.Print(i)
obj.Print(s)
obj.Print(s)
obj.Print(d)
obj.Print(d)
*
VB.NET - OO-Theorie
z
Interfaces
¾
¾
Definieren das leere Gerüst einer Klasse
Implementierende Klasse:
ƒ
ƒ
z
hat die gleichen Eigenschaften und Methoden
Schlüsselwort Implements
Access Modifiers
¾
Steuern den Geltungsbereich
ƒ
ƒ
Private, Friend, Public
Protected (Zugriff aus vererbter Klasse)
VB.NET - Typen
VB 6
VB.NET (CTS-Typen)
Boolean
Byte
Date
Double
Single
Integer
Long
Boolean
Byte
Date
Double
Single
Short
Integer
Long
Decimal
Object
Object
String
Char
Currency
Object
Variant
String
2 Byte
4 Byte
8 Byte
2 Byte
4 Byte
8 Byte
12 Byte
Unicode Character
VB.NET - Typen
z
Deklaration und Zuweisung
¾
Initialisierung bei der Deklaration
Dim myInt As Integer = 5
Dim myArray() As Byte = {11,22,33} ' (0-2)
Dim myPersonA As New Person(...)
¾
Objektzuweisung
myPersonB = myPersonA ' Set gibt's nicht mehr
¾
Zuweisung mit Operation
myInt+=i (auch -= *= /= \= ^= &=)
¾
Option Strict
VB.NET - Typen
z
Übergabe an Methoden
¾
Werttypen (Value Types )
ƒ
Primitive Typen aus Performancegründen auf
dem Stack: Boolean, Byte, Date, Double,
Integer, Long, Single, Struct, Enum
ByRef übergibt den Zeiger auf den Speicherplatz
( die Methode kann den Wert aus der Sicht des
Aufrufers verändern )
ƒ ByVal übergibt die Kopie des Wertes
( die Methode kann nur die Kopie verändern, nicht
das Original der Aufrufers )
ƒ
VB.NET - Typen
¾
Referenztypen (Reference Types )
ƒ
String, Arrays und alle anderen Objekte werden
im Heap angelegt.
ByRef übergibt den Zeiger auf die Daten
( Daten können verändert werden oder dem Zeiger
kann ein anderes Objekt zugewiesen werden )
ƒ ByVal übergibt die Kopie des Zeigers
( Daten können verändert werden; der Zeiger nicht )
ƒ
VB.NET - Namespaces
z
Gab es schon bei VB 6 ;-)
¾
Hierarchische Organisation der Klassen
ƒ
ƒ
ƒ
Unzumutbar lange Namen von Typen:
Dim c As _
System.Data.OleDb.OleDbConnection()
Imports listet dem Compiler Namespaces auf
Im Anweisungen kann der Namespace weggelassen werden; der Compiler weiss trotzdem
Bescheid:
Imports System.Data.OleDb
Dim c As OleDbConnection()
VB.NET - Namespaces
System.Collections
System.Data
System.Diagnostics
System.Drawing
System.IO
System.Math
System.Reflection
System.Threading
System.Windows.Forms
System.Web.UI
System.Xml
Alternativen zur Collection
ADO.NET--Klassen
ADO.NET
Debug und Trace
Methoden für GDI+
Dateizugriff, Streams
...
Zugriff auf Metadaten
Multithreading--Support
Multithreading
Windows--Formularmodell
Windows
Web--Page Modell
Web
XML--Support
XML
Microsoft.VisualBasic.Constants
VB--Konstanten (vbCrlf etc.)
VB
Agenda
z
Was ist neu in VB.NET
¾
z
VB.NET - Objektorientiert
¾
z
Sprache, Features, Projekttypen, IDE
Etwas OO-Theorie, Typen, Namespaces
Migration von VB6 nach VB.NET
¾
Migration Wizard,
Probleme, Ansätze
Migration - Wizard
z
Demo (TypMigTest.vbp
Ö VBNET_MigTest.vbproj )
Migration - Probleme
z
Datentypen
¾
Integer 4 Byte, Long 8 Byte, Currency
ƒ
ƒ
¾
Date 8 Byte Ganzzahl (vorher Double)
ƒ
¾
Werte haben auf jeden Fall Platz
Decimal (12 Byte) ersetzt Currency (8 Byte)
Probleme wenn vorher mit Double gerechnet
wurde - ToOADate kann in Double umrechnen
Variant wird zu Object
ƒ
ƒ
IsNothing ersetzt IsEmpty
IsMissing entfällt, da Optionale Parameter
immer einen Default-Wert haben müssen
Migration - Probleme
¾
Keine Fixed-Length Strings
ƒ
ƒ
¾
Ersatz durch VB6.FixedLengthString
Einsatz eines Attributes wenn innerhalb einer
Struktur: <VBFixedString16,
System.Runtime.InteropServices.Marshal
As(System.Runtime.InteropServices.Unma
nagedType.ByValTStr, SizeConst:=16)>
Arrays Zero-based, kein Option Base
ƒ
ƒ
Kompatibilitätsklasse für NonZero-Based
Arrays (Performance Nachteil)
Aktion: Arrays manuell auf Zero-Based
Migration - Probleme
¾
Gültigkeitsbereich
ƒ
ƒ
ƒ
¾
VB.NET definiert Blöcke als Gültigkeitsbereich
Deklarationen innerhalb eines Blockes sind
auch nur dort gültig (VB6: mindestens Methode)
Aktion: Deklarationen zum Anfang
der Methode verschieben
Benutzerdefinierte Typen
ƒ
ƒ
ƒ
Structure ersetzt Type
Memory-Layout Unterschiedlich
Aktion: ???
Migration - Probleme
z
Parameterübergabe
¾
"As Any" in API -Deklarationen
ƒ
ƒ
¾
Von VB.Net nicht unterstützt
Aktion: API-Deklarationen überladen
(Overloads Private Declare ...)
ByVal vs. ByRef
ƒ
Aktion: VB 6 nach Defaults absuchen und
gezielt ByRef oder ByVal einsetzen
Migration - Integration
z
Transaktionen mit MTS/COM+
¾
.NET bietet unterstützt COM+
ƒ
Namespaces
System.EnterpriseServices
System.Runtime .CompilerServices
System.Reflection
ƒ
Attribute
S
S
S
<assembly
assembly:
: ApplicationName("MyComponent")>
ApplicationName("MyComponent")>
<assembly
assembly:
: AssemblyKeyFileAttribute
AssemblyKeyFileAttribute(
(
"MyComponent.snk
MyComponent.snk")>
")>
<Transaction (TransactionOption.Required
TransactionOption.Required)>
)>
<AutoComplete
AutoComplete()>
()>
Migration - Integration
Imports System.EnterpriseServices
Imports System.Runtime.CompilerServices
Imports System.Reflection
<assembly: ApplicationName("MyComponent")>
<assembly: AssemblyKeyFileAttribute("MyComponent.snk")>
Namespace MyComponent
<Transaction(TransactionOption.Required)> _
Public Class Account
Inherits ServicedComponent
Imports
Imports MyComponent
MyComponent
<AutoComplete()> _
Public
Public Class
Class Client
Client
Public Sub Post(ByVal amount As Double)
Sub
Sub Main()
Main()
Dim
...
Dim Account
Account As
As __
End Sub
New
New Account()
Account()
Account.Post(100)
Account.Post(100)
End Class
End
End Sub
Sub
End Namespace
End
End Class
Class
Zusammenfassung
z
Von VB 5/6 nach VB.NET
¾
VB.NET ist kein verbessertes VB 6,
sondern VB für .NET
ƒ
ƒ
¾
Abstriche wurden notwendig, um .NETKompatibel zu bleiben
Erweiterung wurden durch .NETGrundfunktionalität möglich
.NET -Technologien sollten in VB.NETAnwendungen einfliessen
ƒ
Die Architektur bestehender Applikationen wird
sich massiv verändern
Trivadis Kursangebot .NET
Einführung OO
Einführung in XML
Introduction to C#
Programming for the
Microsoft .NET Platform
5
C#
3
Programming the
5
Microsoft .NET Framework
using C#
2
Developing Mobile Web
Applications Using Microsoft
Mobile Internet Toolkit
Securing and Deploying
Microsoft .NET Assemblies
Introduction to ASP.NET
5
Programming with
Microsoft Visual Basic .NET
VB.NET
5
Programming the
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