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