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.