Visual Basic .NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH [email protected].

Download Report

Transcript 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.