Visual Basic .NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH [email protected].
Download ReportTranscript Visual Basic .NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH [email protected].
Visual Basic .NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH [email protected] Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Das .NET Framework VB C++ C# J# JScript … Visual Studio .NET Common Language Specification Web Services User Interface ASP.NET WinForms ADO.NET: Data and XML Base Class Library Common Language Runtime MSMQ (Message Queuing) COM+ (Transactions, Partitions, Object Pooling) Win32 IIS WMI Das .NET Framework Visual Studio .NET: integrierte Entwicklungsumgebung Solution Explorer, Toolbox, Debugger visuelle Designer, Code Editor IntelliSense, Syntaxkontrolle, dyn. Hilfe mehrsprachige Projektmappen RAD für VB C++ C# J# JScript … Common Language Specification Desktop Server Web (UI, -services) Smart Devices Web Services Visual Studio .NET User Interface ASP.NET WinForms ADO.NET: Data and XML Base Class Library Common Language Runtime MSMQ (Message Queuing) COM+ (Transactions, Partitions, Object Pooling) Win32 IIS WMI Das .NET Framework Common Language Specification definiert Anforderungen, die .NETSprachen erfüllen müssen sichert Interoperabilität der Sprachen Datentypen sind Teilmenge des Common Type System Microsoft: Visual Basic®, C#, C++, J#, JScript® andere: Cobol, Perl, Python, Smalltalk, Delphi, ... VB C++ C# J# Common Language Specification User Interface ASP.NET WinForms ADO.NET: Data and XML Base Class Library Common Language Runtime MSMQ (Message Queuing) COM+ (Transactions, Partitions, Object Pooling) Win32 IIS WMI Visual Studio .NET Web Services … JScript Das .NET Framework Common Language Runtime verwaltet ausgeführten Code selbstbeschreibende Komponenten Typprüfungen, Fehlerbehandlung, Garbage Collection, … virtuelle Maschine Assemblies enthalten Metadaten + Code Just-In-Time-Compiler C++ C# J# … JScript Common Language Specification Web Services Visual Studio .NET MSIL Maschinencode Komp. auf Methodenebene Optimierung zur Laufzeit VB User Interface ASP.NET WinForms ADO.NET: Data and XML Base Class Library feinkonfigurierbare Sicherheit Common Language Runtime MSMQ (Message Queuing) COM+ (Transactions, Partitions, Object Pooling) Win32 IIS WMI Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Visual Basic .NET Basic für das neue Jahrtausend… bietet Features, die Entwickler bisher an Basic vermissten mehr als nur Visual Basic "6 + 1" …mit der Power von .NET einfaches Web Development voller Zugriff auf die .NET-Plattform Daten, XML, WinCE-Entwicklung, ... einfaches Deployment Microsoft Installer Visual Basic .NET modern & leistungsfähig robust komplett objektorientiert unterstützt freies Threading unterstützt strukturierte Fehlerbehandlung strikte Typprüfung Variableninitialisierung bei Deklaration vereinfacht basiert auf .NET Base Class Library viele "Legacy"-Features entfernt Visual Basic .NET volle Objektorientierung Strukturierung in Namensräumen Vererbung: von einer Basisklasse, von beliebig vielen Interfaces Overriding & Shadowing von Basisklassenmethoden Überladen von Methoden nicht a priori abwärtskompatibel CLS-konform Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Visual C# .NET erste konsequent komponentenorientierte Sprache der "C-Familie" Syntax ähnlich C++ & Java vereinfachte Programmierung keine Header-Dateien, Makros, IDL keine Mehrfachvererbung typsicher XML-Kommentare zwecks Dokumentation Visual C# .NET bestmögliche Interoperabilität mit bestehendem Code COM-Komponenten: COM Interop Win32 API: P/Invoke vorzeichenlose Datentypen unterstützt Pointer und C-ähnliche Speicherverwaltung unsafe, stackalloc memory pinning von Variablen (fixed) Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Gemeinsamkeiten gleichberechtigte Sprachen in .NET visuelle Designer für WinForms, WebForms, XSD, HTML, ... verwenden .NET-Klassenbibliothek unterstützen COM Interop, P/Invoke Sprachcompiler generieren MSIL hohe Performance s. z.B. B. Marquardt "Performance in .NET", XML in Action 2002, Potsdam Gemeinsamkeiten Sub Main(ByVal args() As String) Console.WriteLine("Hello VB") End Sub Demo VB .method public static void Main(string[] args) cil managed { .entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe) .maxstack 8 IL_0000: nop IL_0001: ldstr "Hello VB" IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: nop IL_000d: ret } // end of method Class1::Main [STAThread] static void Main(string[] args) { Console.WriteLine("Hello C#"); } C# .method private hidebysig static void Main(string[] args) cil managed { .entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 11 (0xb) .maxstack 1 IL_0000: ldstr "Hello C#" IL_0005: call void [mscorlib]System.Console::WriteLine(string) IL_000a: ret } // end of method Class1::Main Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Syntax: Grundlegendes Groß-/Kleinschreibung VB kein Unterschied DIM a as dOuBle Dim b As Integer, B as Long ' OK ' Fehler! C# wesentlich int a, A; Long b; // OK // Fehler! nicht CLS-konform, falls public! [CLSCompliant(true)] verwenden Syntax: Grundlegendes Anweisungstrennzeichen (auch: ":") VB CR/LF Zeilenfortsetzung: " _" Formatierung ist entscheidend! freie Formatierung möglich C# ; Blocktrennzeichen (u.ä.) VB Sub ... End Sub keine beliebigen Blöcke möglich C# { ... } Syntax: Daten & Typen Datentypunterstützung Visual Basic .NET C# .NET CTS Object object System.Object String string System.String Byte byte System.Byte Short short System.Int16 Integer int System.Int32 Long long System.Int64 Single float System.Single Double double System.Double Boolean bool System.Boolean Char char System.Char Decimal decimal System.Decimal sbyte System.SByte ushort System.UInt16 uint System.UInt32 ulong System.UInt64 Syntax: Daten & Typen Arrays: Erstellung VB Dim a(n) as Integer C# erzeugt n+1 Elemente (0 ... n) ! int [] a = new int[n]; erzeugt n Elemente (0 ... n-1) ! Arrays: Größenänderungen VB ReDim Preserve ... C# n/a Framework-Klassen wie ArrayList verwenden Syntax: Daten & Typen Variableninitialisierung VB automatisches Initialisieren mit 0 oder Nothing nur bei Erzeugung (lokale Variablen!) C# explizites Initialisieren notwendig VB Initialisieren bei Deklaration möglich: + C# Dim i as Integer = 0 int i = 0; Syntax: Daten & Typen VB unterstützt außerdem: Steuerung expliziter Variablendeklaration: Option Explicit { On | Off } Steuerung von Typumwandlungen: Option Strict { On | Off } Steuerung des Stringvergleichs: Option Compare { Binary | Text } Syntax: Daten & Typen Demo C# unterstützt außerdem: VB: IIf(a,b,c) ?: ++ -<< >> operator overloading public static MyType operator –(MyType x){ ... } Testen auf Überlauf bei arithmetischen Operationen: checked / unchecked Syntax: Funktionen Deklaration VB Function FunctionName(arg1 as Type, ... argN as _ Type) as ReturnType ... Return someVariableOfReturnType End Function Sub ProcedureName(arg1 as Type, ... argN as Type) ... End Sub C# ReturnType FunctionName(Type arg1, ... Type argN) { ... return someVariableOfReturnType; } Syntax: Funktionen Demo Select Case / switch VB Select Case i Case "Frank", "Michael" To "Paul" Console.WriteLine("Frank's group") Case o Console.WriteLine("It's John") Case Else Console.WriteLine("S.o. else") End Select C# switch(i) { case "Frank" : case "Michael" : ... case "Paul" : Console.WriteLine("Frank's group"); break; case "John" : Console.WriteLine("John"); break; default: Console.WriteLine("S.o. else"); break; } Syntax: Funktionen Verschiedenes VB Vorhandensein von Return in allen Rückkehrzweigen einer Funktion wird nicht geprüft Unterstützung optionaler Parameter C# OLE Automation! Unterstützung von Modulen Demo Variablen & Funktionen Assembly-global Shared members: Zugriff über Typ oder Instanz Standardsichtbarkeit in Klassen: Public static members: Zugriff nur über Typ Standardsichtbarkeit in Klassen: private Syntax: Objekte Aktuelle Instanz referenzieren Me VB this C# Konstruktoren VB Public Class AClass Public Sub New(ByVal n as String) ... End Sub ... End Class C# public class AClass { public AClass(string n) { ... } ... } Syntax: Objekte Destruktoren VB Protected Overrides Sub Finalize() ... ~AClass() { ... } C# Garbage Collector nichtdeterministische Finalisierung besser: IDisposable.Dispose() zur expliziten Freigabe von Ressourcen in C# autom. Scoping durch using: using (Font myFont=new Font(...)) { ... } Syntax: Objekte Vererbung vs. Interface-Implementation VB Public Class DClass Inherits BClass Implements IInt eine Methode kann vielfach implementieren: Sub X() Implements IInt1.Y, IInt2.Z public class DClass : BClass, IInt explizite Interface-Methoden-Implementation: int IInt.X(); (Cast auf Interface nötig; kein public/private/... erlaubt!) C# Welche Methode implementiert welche? Sub X() Implements IInt.Y Syntax: Objekte Schlüsselwörter VB MustInherit, NotInheritable, Overridable, Overrides, Shadows, ... C# abstract, sealed, virtual, override, new, ... Konstruktor der Basisklasse aufrufen VB Public Sub New(ByVal n as String) MyBase.New() ... End Sub C# public AClass() : base() { ... } impliziter Aufruf des Default-C'tors Syntax: Objekte Events VB Dim WithEvents o as EventSource ... Event Happened(...) ... RaiseEvent Happened() ... Sub hendl() Handles o.Happened ... • C# Delegates (s. C#) public delegate void HappenedHndl(object sender, EventArgs e); public event HappenedHndl Happened; ... Happened(this, eventargs); ... public void sthHappened(object s, EventArgs a); o.Happened += new HappenedHndl(sthHappened); Syntax: Objekte Verschiedenes VB unterstützt With-Konstrukt: With myObj .SomeFct(x,y) .val = 42 End With C# Unterstützung von "Legacy"-VB-Anweisungen im Namensraum Microsoft.VisualBasic bequemes Verwenden von Late Binding Imports gewährt Zugriff auf Namensräume und Objekte unterstützt Parameter vom Typ out Syntax: Verschiedenes Unsafe Code VB n/a C# Zeiger etc. möglich: unsafe void Foo() { char* buf = stackalloc char[256]; ... } nicht durch die CLR verifizierbar Ausführung nur unter "verschärften" Sicherheitsbedingungen möglich Syntax: Verschiedenes Dokumentation VB C# keine besondere Unterstützung manuelles Erstellen von Hilfe-Dateien Add-Ins (IntelliDoc) V.Next ... Spezielle Tags für XML-Dokumentation: /// <summary> Erste Klasse! </summary> /// <seealso cref="Class2"/> Generieren von Online-Dokumentation Demo Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Sonstiges Class View VB Standard C# erweitert Sonstiges Echtzeit-Syntaxkontrolle Code Validation VB Background Compile (entdeckt Build Errors zur Entwurfszeit!) Code Validation C# Verschiedenes VB Automatische End ... -Blockanweisungen C# Automatisches Einrücken von Code Automatische Groß-/Kleinschreibung Automatische {} -Klammerpaare Automatisches Einrücken (begrenzt) Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Migration 6 VB .NET VB6 VB .NET 3 Upgrade-Strategien: komplette Neuimplementierung in .NET komplette Portierung alte Programmarchitektur bleibt intakt Mischlösung auf bestehenden Code aufbauen VB 6-Komponenten weiterverwenden, .NET-Komponenten sinnvoll darauf aufsetzen später Schritt für Schritt migrieren VB6 VB .NET Sie entscheiden: Wie sieht Ihre Anwendungsarchitektur aus? Handelt es sich um eine Neuentwicklung oder soll die Applikation nur noch gewartet werden? Machen Sie einen Upgrade-Plan! Welche Aspekte/Teile Ihrer Anwendung gewinnen "added value" durch .NET? Wie kann die bestehende Anwendung für das Upgrade "fit" gemacht werden? VB6 VB .NET Upgrade-Technologien: Code-Migration Upgrade Wizard Sourcecode Analyzer Tools (Dritthersteller) Application Mining Tools (Dritthersteller) Interoperabilität COM Interop Platform Invoke (P/Invoke) VB6 VB .NET Demo VB6 VB .NET Weiterführende Infos im Internet: MSDN® Website: http://msdn.microsoft.com/ VB .NET Upgrade Websites: http://msdn.microsoft.com/vbasic/technical/ upgrade/guide.asp http://msdn.microsoft.com/vstudio/nextgen/ Technology/vbupgrade.asp http://msdn.microsoft.com/library/techart/ VB 6tovbdotnet.htm VB6 VB .NET Weiterführende Informationen – Bücher: Ed Robinson, Michael Bond, Ian Oliver: "Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET" Microsoft Press; ISBN 073561587X "Von Microsoft Visual Basic 6.0 nach Microsoft Visual Basic.NET" Microsoft Press; ISBN 3860636669 Dan Appleman: "Moving to VB.NET" Apress; ISBN: 1893115976 Migration Java C# Visual Java C# 3 Wege zu .NET für Java-Programmierer: VJ++ 6.0 COM-Anwendungen: COM Interop Visual J# .NET: Java-Sprache für .NET (erzeugt MSIL) Java Language Conversion Assistant (JLCA): Sourcecode-Migration Java C# Java C# Java Language Conversion Assistant aktuell: Beta2 (http://msdn.microsoft.com/vstudio/downloads/jca/default.asp) konvertiert automatisch Java C# JSP ASP.NET (final version) J2EE .NET (ArtinSoft, MS-Partner) Integration in Visual Studio .NET unterstützt JDK 1.1.4 Java C# Demo Agenda Das .NET Framework Visual Basic .NET: Überblick Visual C# .NET: Überblick Vergleich der Sprachen Gemeinsamkeiten, Syntax, Sonstiges Migration Zusammenfassung Zusammenfassung Highlights VB CLS-konform C# gute Unterstützung von OLE Automation Background Compile beim Editieren einfache Event-Syntax weitgehende automatische Codeformatierung "Sprache des .NET Framework" erzwingt Programmierdisziplin XML-Dokumentation ermöglicht "unsicheren" Code Zusammenfassung Naheliegende Migrationspfade: VB .NET ist vollwertige .NET-Sprache Visual Basic 6 Visual Basic .NET C/C++, Java Visual C# .NET kein Grund für Minderwertigkeitskomplexe mehr! Base Class Library bestimmt verfügbare Funktionalität Wahl der Sprache für 95% der Probleme irrelevant Zusammenfassung VB C# .NET Sie haben die Q Wahl! Qu Fragen? Weitere Informationen INFO: "Differences Between Visual Basic .NET and Visual C# .NET" White Paper Is Available (Q308470) http://support.microsoft.com/default.aspx?scid=kb;ENUS;Q308470 Daniel Appleman "Visual Basic .NET or C#...Which to Choose?" http://www.desaware.com/Ebook2L2.htm Eric Gunnerson "A Programmer's Introduction to C#", Apress 2001 Daniel Appleman "Moving to VB.NET: Strategies, Concepts, and Code", Apress 2001 Bernd Marquardt "Performance in .NET", XML in Action 2002, Potsdam http://213.178.67.35/events/xmldevcon/Nachlese/Slides/N/N7.zip VB .NET Upgrade Guide http://msdn.microsoft.com/vbasic/techinfo/articles/ upgrade/guide.asp Java Language Conversion Assistant http://msdn.microsoft.com/vstudio/downloads/jca/default.asp Allgemeine Informationen Ralf Westphal: ".NET kompakt" Spektrum Akad. Vlg.; ISBN: 3827411858 Jeffrey Richter: "Applied Microsoft .NET Framework Programming" Microsoft Press; ISBN: 0735614229 Microsoft’s Vision Empower peoplethrough software great any time, any place, and on any device.