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

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

Embed Size (px)

Citation preview

Page 1: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Visual Basic .NET & C#Visual Basic .NET & C# Die Qual der Wahl?Die Qual der Wahl?

Frank PrengelFrank Prengel

TechnologieberaterTechnologieberater

Microsoft GmbHMicrosoft GmbH

[email protected]@microsoft.com

Page 2: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, SonstigesGemeinsamkeiten, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 3: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, SonstigesGemeinsamkeiten, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 4: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Das .NET FrameworkDas .NET Framework

Win32Win32

MSMQMSMQ(Message(MessageQueuing)Queuing)

COM+COM+(Transactions, Partitions, (Transactions, Partitions,

Object Pooling)Object Pooling)IISIIS WMIWMI

Common Language RuntimeCommon Language Runtime

Base Class LibraryBase Class Library

ADO.NET: Data and XMLADO.NET: Data and XML

Web ServicesWeb Services User InterfaceUser Interface

Common Language SpecificationCommon Language Specification

VBVB C++C++ C#C# J#J# JScriptJScript …… Visu

al Stu

dio

.NE

T

ASP.NET WinForms

Page 5: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Das .NET FrameworkDas .NET Framework Visual Studio .NET: Visual Studio .NET:

integrierte Entwicklungsumgebungintegrierte Entwicklungsumgebung Solution Explorer, Toolbox, DebuggerSolution Explorer, Toolbox, Debugger visuelle Designer, Code Editorvisuelle Designer, Code Editor IntelliSense, Syntaxkontrolle, dyn. HilfeIntelliSense, Syntaxkontrolle, dyn. Hilfe mehrsprachige Projektmappenmehrsprachige Projektmappen RAD fürRAD für

DesktopDesktop ServerServer Web (UI, -services)Web (UI, -services) Smart DevicesSmart Devices

Win32

MSMQ(MessageQueuing)

COM+(Transactions, Partitions,

Object Pooling)IIS WMI

Common Language Runtime

Base Class Library

ADO.NET: Data and XML

Web Services User Interface

Common Language Specification

VB C++ C# J# JScript …

Vis

ual S

tud

io .N

ET

ASP.NET WinForms

Page 6: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Das .NET FrameworkDas .NET Framework

Common Language SpecificationCommon Language Specification definiert Anforderungen, die .NET-definiert Anforderungen, die .NET-

Sprachen erfüllen müssenSprachen erfüllen müssen sichert Interoperabilität der Sprachensichert Interoperabilität der Sprachen Datentypen sind Teilmenge des Datentypen sind Teilmenge des Common Common

Type SystemType System Microsoft: Visual BasicMicrosoft: Visual Basic®®, ,

C#, C++, J#, JScriptC#, C++, J#, JScript®®

andere: Cobol, Perl, andere: Cobol, Perl, Python, Smalltalk, Python, Smalltalk, Delphi, ...Delphi, ...

Win32

MSMQ(MessageQueuing)

COM+(Transactions, Partitions,

Object Pooling)IIS WMI

Common Language Runtime

Base Class Library

ADO.NET: Data and XML

Web Services User Interface

Common Language Specification

VB C++ C# J# JScript …

Vis

ual S

tud

io .N

ET

ASP.NET WinForms

Page 7: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Das .NET FrameworkDas .NET Framework Common Language RuntimeCommon Language Runtime

verwaltet ausgeführten Codeverwaltet ausgeführten Code Typprüfungen, Fehlerbehandlung, Garbage Typprüfungen, Fehlerbehandlung, Garbage

Collection, … Collection, … virtuelle Maschinevirtuelle Maschine

selbstbeschreibende Komponentenselbstbeschreibende Komponenten Assemblies enthalten Metadaten + CodeAssemblies enthalten Metadaten + Code

Just-In-Time-CompilerJust-In-Time-Compiler MSIL MSIL Maschinencode Maschinencode Komp. auf MethodenebeneKomp. auf Methodenebene Optimierung zur LaufzeitOptimierung zur Laufzeit

feinkonfigurierbare feinkonfigurierbare SicherheitSicherheit

Win32

MSMQ(MessageQueuing)

COM+(Transactions, Partitions,

Object Pooling)IIS WMI

Common Language Runtime

Base Class Library

ADO.NET: Data and XML

Web Services User Interface

Common Language Specification

VB C++ C# J# JScript …

Vis

ual S

tud

io .N

ET

ASP.NET WinForms

Page 8: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, SonstigesGemeinsamkeiten, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 9: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Visual Basic .NETVisual Basic .NET

Basic für das neue Jahrtausend…Basic für das neue Jahrtausend… bietet Features, die Entwicklerbietet Features, die Entwickler bisher bisher

an Basic vermisstenan Basic vermissten mehr als nur Visual Basic "6 + 1"mehr als nur Visual Basic "6 + 1"

……mit der Power von .NETmit der Power von .NET einfaches Web Developmenteinfaches Web Development voller Zugriff auf die .NET-Plattformvoller Zugriff auf die .NET-Plattform

Daten, XML, WinCE-Entwicklung, ...Daten, XML, WinCE-Entwicklung, ...

einfaches Deploymenteinfaches Deployment Microsoft InstallerMicrosoft Installer

Page 10: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Visual Basic .NETVisual Basic .NET modern & leistungsfähigmodern & leistungsfähig

komplett objektorientiertkomplett objektorientiert unterstützt freies Threadingunterstützt freies Threading unterstützt strukturierte unterstützt strukturierte

FehlerbehandlungFehlerbehandlung robustrobust

strikte Typprüfungstrikte Typprüfung Variableninitialisierung bei DeklarationVariableninitialisierung bei Deklaration

vereinfachtvereinfacht basiert auf .NET Base Class Librarybasiert auf .NET Base Class Library viele "Legacy"-Features entferntviele "Legacy"-Features entfernt

Page 11: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Visual Basic .NETVisual Basic .NET

volle Objektorientierungvolle Objektorientierung Strukturierung in NamensräumenStrukturierung in Namensräumen Vererbung: von einer Basisklasse, von Vererbung: von einer Basisklasse, von

beliebig vielen Interfacesbeliebig vielen Interfaces Overriding Overriding && Shadowing Shadowing von von

BasisklassenmethodenBasisklassenmethoden Überladen von MethodenÜberladen von Methoden

nicht a priori abwärtskompatibelnicht a priori abwärtskompatibel CLS-konformCLS-konform

Page 12: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, SonstigesGemeinsamkeiten, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 13: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Visual C# .NETVisual C# .NET erste konsequent erste konsequent

komponentenorientiertekomponentenorientierte Sprache der "C-Familie"Sprache der "C-Familie"

Syntax ähnlich C++ & JavaSyntax ähnlich C++ & Java vereinfachte Programmierungvereinfachte Programmierung

keine Header-Dateien, Makros, IDLkeine Header-Dateien, Makros, IDL keine Mehrfachvererbungkeine Mehrfachvererbung

typsicher typsicher XML-Kommentare zwecks XML-Kommentare zwecks

DokumentationDokumentation

Page 14: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Visual C# .NETVisual C# .NET

bestmögliche Interoperabilität mit bestmögliche Interoperabilität mit bestehendem Codebestehendem Code COM-Komponenten: COM-Komponenten: COM InteropCOM Interop Win32 API: Win32 API: P/InvokeP/Invoke vorzeichenlose Datentypenvorzeichenlose Datentypen

unterstützt Pointer und C-ähnliche unterstützt Pointer und C-ähnliche SpeicherverwaltungSpeicherverwaltung unsafeunsafe, , stackallocstackalloc memory pinningmemory pinning von Variablen ( von Variablen (fixedfixed))

Page 15: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

GemeinsamkeitenGemeinsamkeiten, Syntax, Sonstiges, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 16: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

GemeinsamkeitenGemeinsamkeiten

gleichberechtigte Sprachen in .NETgleichberechtigte Sprachen in .NET visuelle Designer für WinForms, visuelle Designer für WinForms,

WebForms, XSD, HTML, ...WebForms, XSD, HTML, ... verwenden .NET-Klassenbibliothekverwenden .NET-Klassenbibliothek unterstützen COM Interop, P/Invokeunterstützen COM Interop, P/Invoke Sprachcompiler generieren MSILSprachcompiler generieren MSIL hohe Performancehohe Performance

s. z.B. s. z.B. B. MarquardtB. Marquardt "Performance "Performance in .NET", XML in Action 2002, Potsdamin .NET", XML in Action 2002, Potsdam

Page 17: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

GemeinsamkeitenGemeinsamkeitenSub Main(ByVal args() As String)Sub Main(ByVal args() As String) Console.WriteLine("Hello VB")Console.WriteLine("Hello VB")End SubEnd Sub

[STAThread][STAThread]static void Main(string[] args)static void Main(string[] args){ Console.WriteLine("Hello C#"); }{ Console.WriteLine("Hello C#"); }

.method private hidebysig static void Main(string[] args) cil managed.method private hidebysig static void Main(string[] args) cil managed{{ .entrypoint.entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 11 (0xb)// Code size 11 (0xb) .maxstack 1.maxstack 1 IL_0000: ldstr "Hello C#"IL_0000: ldstr "Hello C#" IL_0005: call void [mscorlib]System.Console::WriteLine(string)IL_0005: call void [mscorlib]System.Console::WriteLine(string) IL_000a: retIL_000a: ret} // end of method Class1::Main} // end of method Class1::Main

.method public static void Main(string[] args) cil managed.method public static void Main(string[] args) cil managed{{ .entrypoint.entrypoint .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) // Code size 14 (0xe)// Code size 14 (0xe) .maxstack 8.maxstack 8 IL_0000: nopIL_0000: nop IL_0001: ldstr "Hello VB"IL_0001: ldstr "Hello VB" IL_0006: call void [mscorlib]System.Console::WriteLine(string)IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nopIL_000b: nop IL_000c: nopIL_000c: nop IL_000d: retIL_000d: ret} // end of method Class1::Main} // end of method Class1::Main

VBVB

C#C#

Demo

Page 18: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Gemeinsamkeiten, SyntaxSyntax, Sonstiges, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 19: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: GrundlegendesSyntax: Grundlegendes

Groß-/KleinschreibungGroß-/KleinschreibungVBVB kein Unterschiedkein Unterschied

DIM a as dOuBleDIM a as dOuBle ' OK' OKDim b As Integer, B as Long Dim b As Integer, B as Long ' Fehler!' Fehler!

C#C# wesentlichwesentlich

int a, A; int a, A; // OK// OKLong b; Long b; // Fehler!// Fehler!

nicht CLS-konform, falls nicht CLS-konform, falls publicpublic!! [CLSCompliant(true)][CLSCompliant(true)] verwenden verwenden

Page 20: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: GrundlegendesSyntax: Grundlegendes

BlocktrennzeichenBlocktrennzeichen

VBVB Sub ... End SubSub ... End Sub (u.ä.)(u.ä.)

keine beliebigen Blöcke möglichkeine beliebigen Blöcke möglichC#C# { ... }{ ... }

AnweisungstrennzeichenAnweisungstrennzeichen

VBVB CR/LFCR/LF (auch: "(auch: "::")") Zeilenfortsetzung: "Zeilenfortsetzung: " _ _"" Formatierung ist entscheidend!Formatierung ist entscheidend!

C#C# ;; freie Formatierung möglichfreie Formatierung möglich

Page 21: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: Daten & TypenSyntax: Daten & TypenDatentypunterstützungDatentypunterstützung

Visual Basic .NETVisual Basic .NET C#C# .NET CTS.NET CTS

ObjectObject objectobject System.ObjectSystem.Object

StringString stringstring System.StringSystem.String

ByteByte bytebyte System.ByteSystem.Byte

ShortShort shortshort System.Int16System.Int16

IntegerInteger intint System.Int32System.Int32

LongLong longlong System.Int64System.Int64

SingleSingle floatfloat System.SingleSystem.Single

DoubleDouble doubledouble System.DoubleSystem.Double

BooleanBoolean boolbool System.BooleanSystem.Boolean

CharChar charchar System.CharSystem.Char

DecimalDecimal decimaldecimal System.DecimalSystem.Decimal

sbytesbyte System.SByteSystem.SByte

ushortushort System.UInt16System.UInt16

uintuint System.UInt32System.UInt32

ulongulong System.UInt64System.UInt64

nicht CLS-konform

nicht CLS-konform

Page 22: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: Daten & TypenSyntax: Daten & Typen

Arrays: GrößenänderungenArrays: Größenänderungen

VBVB ReDim Preserve ...ReDim Preserve ...

C#C# n/an/a Framework-Klassen wie Framework-Klassen wie ArrayListArrayList

verwendenverwenden

Arrays: ErstellungArrays: Erstellung

VBVB Dim a(n) as IntegerDim a(n) as Integer erzeugt erzeugt n+1n+1 Elemente (0 ... n) ! Elemente (0 ... n) !

C#C# int [] a = new int[n];int [] a = new int[n]; erzeugt erzeugt nn Elemente (0 ... n-1) ! Elemente (0 ... n-1) !

Page 23: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: Daten & TypenSyntax: Daten & Typen

VariableninitialisierungVariableninitialisierung

VBVB automatisches Initialisieren mit automatisches Initialisieren mit 00 oder oder NothingNothing

nur bei Erzeugung (lokale Variablen!)nur bei Erzeugung (lokale Variablen!)

C#C# explizites Initialisieren notwendigexplizites Initialisieren notwendig

VBVB++

C#C#

Initialisieren bei Deklaration möglich:Initialisieren bei Deklaration möglich:

Dim i as Integer = 0Dim i as Integer = 0int i = 0;int i = 0;

Page 24: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: Daten & TypenSyntax: Daten & Typen VB unterstützt außerdem:VB unterstützt außerdem:

Steuerung expliziter Variablendeklaration:Steuerung expliziter Variablendeklaration:

Option Explicit { On | Off }Option Explicit { On | Off }

Steuerung von Typumwandlungen:Steuerung von Typumwandlungen:

Option Strict { On | Off }Option Strict { On | Off }

Steuerung des Stringvergleichs:Steuerung des Stringvergleichs:

Option Compare { Binary | Text }Option Compare { Binary | Text }

Page 25: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

C# unterstützt außerdem:C# unterstützt außerdem:

?:?: ++++ ---- <<<< >>>> operator overloadingoperator overloading

public static MyType public static MyType operator –(MyType x){ ... } operator –(MyType x){ ... }

Testen auf Überlauf bei Testen auf Überlauf bei arithmetischen Operationen:arithmetischen Operationen:

checked / uncheckedchecked / unchecked

Syntax: Daten & TypenSyntax: Daten & Typen

VB: IIf(a,b,c)VB: IIf(a,b,c)

Demo

Page 26: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: FunktionenSyntax: Funktionen

DeklarationDeklaration

VBVB Function Function FunctionNameFunctionName((arg1arg1 as as TypeType, ... , ... argNargN as _ as _ TypeType) as ) as ReturnTypeReturnType    ...    ...    Return     Return someVariableOfReturnTypesomeVariableOfReturnTypeEnd Function End Function

Sub Sub ProcedureNameProcedureName((arg1arg1 as as TypeType, ... , ... argNargN as as TypeType))    ...    ...End SubEnd Sub

C#C# ReturnType ReturnType FunctionNameFunctionName((Type arg1Type arg1, ... , ... Type argNType argN)){{    ...    ...    return     return someVariableOfReturnType;someVariableOfReturnType;

}}

Page 27: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: FunktionenSyntax: FunktionenSelect Case / switchSelect Case / switch

VBVB Select Case iSelect Case i

Case "Frank", "Michael" To "Paul"Case "Frank", "Michael" To "Paul"

Console.WriteLine("Frank's group")Console.WriteLine("Frank's group")

Case oCase o

Console.WriteLine("It's John")Console.WriteLine("It's John")

Case ElseCase Else

Console.WriteLine("S.o. else")Console.WriteLine("S.o. else")

End SelectEnd Select

C#C# switch(i) {switch(i) {

case "Frank" : case "Frank" :

case "Michael" :case "Michael" :

......

case "Paul" :case "Paul" :

Console.WriteLine("Frank's group"); break;Console.WriteLine("Frank's group"); break;

case "John" :case "John" :

Console.WriteLine("John"); break;Console.WriteLine("John"); break;

default:default:

Console.WriteLine("S.o. else"); break;Console.WriteLine("S.o. else"); break;

}}

Demo

Page 28: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: FunktionenSyntax: Funktionen

VerschiedenesVerschiedenesVBVB Vorhandensein von Vorhandensein von ReturnReturn in allen in allen

Rückkehrzweigen einer Funktion wird nicht Rückkehrzweigen einer Funktion wird nicht geprüftgeprüft

Unterstützung optionaler ParameterUnterstützung optionaler Parameter OLE Automation!OLE Automation!

Unterstützung von ModulenUnterstützung von Modulen Variablen & Funktionen Assembly-globalVariablen & Funktionen Assembly-global

SharedShared members: Zugriff über Typ members: Zugriff über Typ oderoder InstanzInstanz

Standardsichtbarkeit in Klassen: Standardsichtbarkeit in Klassen: PublicPublic

C#C# staticstatic members: Zugriff nur über Typ members: Zugriff nur über Typ Standardsichtbarkeit in Klassen: Standardsichtbarkeit in Klassen: privateprivate

Demo

Page 29: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: ObjekteSyntax: Objekte

KonstruktorenKonstruktorenVBVB Public Class AClassPublic Class AClass

Public Sub New(ByVal n as String)Public Sub New(ByVal n as String) ...... End Sub End Sub ... ...End ClassEnd Class

C#C# public class AClass public class AClass {{ public AClass(string n) { ... }public AClass(string n) { ... } ......}}

Aktuelle Instanz referenzierenAktuelle Instanz referenzierenVBVB MeMe

C#C# thisthis

Page 30: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: ObjekteSyntax: ObjekteDestruktorenDestruktorenVBVB Protected Overrides Sub Finalize()Protected Overrides Sub Finalize()

......

C#C# ~AClass()~AClass(){ ... }{ ... }

Garbage Collector Garbage Collector nichtdeterministische Finalisierung nichtdeterministische Finalisierung

besser: besser: IDisposable.Dispose()IDisposable.Dispose() zur zur expliziten Freigabe von Ressourcenexpliziten Freigabe von Ressourcen in C# autom. Scoping durch in C# autom. Scoping durch usingusing::

using (Font myFont=new Font(...))using (Font myFont=new Font(...)) { ... } { ... }

Page 31: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: ObjekteSyntax: ObjekteVererbung vs. Interface-ImplementationVererbung vs. Interface-ImplementationVBVB Public Class DClassPublic Class DClass

Inherits BClass Inherits BClass Implements IInt Implements IInt

Welche Methode implementiert welche?Welche Methode implementiert welche?Sub X() Implements IInt.YSub X() Implements IInt.Y

eine Methode kann vielfach implementieren:eine Methode kann vielfach implementieren:Sub X() Implements IInt1.Y, IInt2.ZSub X() Implements IInt1.Y, IInt2.Z

C#C# public class DClass : BClass, IIntpublic class DClass : BClass, IInt explizite Interface-Methoden-Implementation:explizite Interface-Methoden-Implementation:

int IInt.X();int IInt.X();(Cast auf Interface nötig; kein (Cast auf Interface nötig; kein public/private/... erlaubt!)public/private/... erlaubt!)

Page 32: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: ObjekteSyntax: ObjekteSchlüsselwörterSchlüsselwörterVBVB MustInherit, NotInheritable, MustInherit, NotInheritable,

Overridable, Overrides, Shadows, ...Overridable, Overrides, Shadows, ...

C#C# abstract, sealed, virtual, override, abstract, sealed, virtual, override, new, ...new, ...

Konstruktor der Basisklasse aufrufenKonstruktor der Basisklasse aufrufenVBVB Public Sub New(ByVal n as String)Public Sub New(ByVal n as String)

MyBase.New()MyBase.New() ......End SubEnd Sub

C#C# public AClass() : base()public AClass() : base(){ ... }{ ... } impliziter Aufruf des Default-C'torsimpliziter Aufruf des Default-C'tors

Page 33: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: ObjekteSyntax: Objekte

EventsEvents

VBVB Dim WithEvents o as EventSource ...Dim WithEvents o as EventSource ...Event Happened(...) ...Event Happened(...) ...RaiseEvent Happened() ...RaiseEvent Happened() ...Sub hendl() Handles o.Happened ...Sub hendl() Handles o.Happened ...

• Delegates (s. C#)Delegates (s. C#)

C#C# public delegate void public delegate void HappenedHndl(object sender, EventArgs e); HappenedHndl(object sender, EventArgs e);public event HappenedHndl Happened; ...public event HappenedHndl Happened; ...Happened(this, eventargs); ...Happened(this, eventargs); ...public void sthHappened(object s, EventArgs a);public void sthHappened(object s, EventArgs a);o.Happened += new HappenedHndl(sthHappened);o.Happened += new HappenedHndl(sthHappened);

Page 34: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: ObjekteSyntax: Objekte

VerschiedenesVerschiedenesVBVB unterstütztunterstützt WithWith-Konstrukt:-Konstrukt:

With myObj With myObj .SomeFct(x,y) .SomeFct(x,y) .val = 42 .val = 42 End With End With

Unterstützung von "Legacy"-VB-Anweisungen Unterstützung von "Legacy"-VB-Anweisungen im Namensraum im Namensraum Microsoft.VisualBasicMicrosoft.VisualBasic

bequemes Verwenden von Late Bindingbequemes Verwenden von Late Binding ImportsImports gewährt Zugriff auf Namensräume gewährt Zugriff auf Namensräume

undund Objekte Objekte

C#C# unterstützt Parameter vom Typ unterstützt Parameter vom Typ outout

Page 35: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: VerschiedenesSyntax: Verschiedenes

Unsafe CodeUnsafe Code

VBVB n/an/a

C#C# Zeiger etc. möglich:Zeiger etc. möglich:

unsafe void Foo() {unsafe void Foo() {

char* buf = stackalloc char[256]; ... }char* buf = stackalloc char[256]; ... }

nicht durch die CLR verifizierbarnicht durch die CLR verifizierbar Ausführung nur unter "verschärften" Ausführung nur unter "verschärften"

Sicherheitsbedingungen möglichSicherheitsbedingungen möglich

Page 36: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Syntax: VerschiedenesSyntax: Verschiedenes

DokumentationDokumentation

VBVB keine besondere Unterstützungkeine besondere Unterstützung manuelles Erstellen von Hilfe-Dateienmanuelles Erstellen von Hilfe-Dateien Add-Ins (Add-Ins (IntelliDocIntelliDoc)) V.Next ...V.Next ...

C#C# Spezielle Tags für XML-Dokumentation:Spezielle Tags für XML-Dokumentation:

/// <summary> Erste Klasse! </summary>/// <summary> Erste Klasse! </summary>/// <seealso cref="Class2"/>/// <seealso cref="Class2"/>

Generieren von Online-DokumentationGenerieren von Online-Dokumentation

Demo

Page 37: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, Gemeinsamkeiten, Syntax, SonstigesSonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 38: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

SonstigesSonstigesClass ViewClass View

VBVB StandardStandard C#C# erweiterterweitert

Page 39: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

SonstigesSonstiges

Echtzeit-SyntaxkontrolleEchtzeit-SyntaxkontrolleVBVB Code ValidationCode Validation

Background Compile (entdeckt Build Errors Background Compile (entdeckt Build Errors zur Entwurfszeit!)zur Entwurfszeit!)

C#C# Code ValidationCode Validation

VerschiedenesVerschiedenesVBVB Automatische Automatische End ... End ... -Blockanweisungen-Blockanweisungen

Automatisches Einrücken von CodeAutomatisches Einrücken von Code Automatische Groß-/KleinschreibungAutomatische Groß-/Kleinschreibung

C#C# Automatische Automatische {}{} -Klammerpaare -Klammerpaare Automatisches Einrücken (begrenzt)Automatisches Einrücken (begrenzt)

Page 40: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, SonstigesGemeinsamkeiten, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 41: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

MigrationMigration

VB 6VB 6VB .NETVB .NET

Page 42: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

VB6 VB6 VB .NET VB .NET

3 Upgrade-Strategien:3 Upgrade-Strategien: komplettekomplette Neuimplementierung in .NET Neuimplementierung in .NET komplette Portierungkomplette Portierung

alte Programmarchitektur bleibt intaktalte Programmarchitektur bleibt intakt

MischlösungMischlösung auf bestehenden Code aufbauenauf bestehenden Code aufbauen VB 6-Komponenten VB 6-Komponenten

weiterverwenden, .NET-Komponenten weiterverwenden, .NET-Komponenten sinnvoll darauf aufsetzensinnvoll darauf aufsetzen

später Schritt für Schritt migrierenspäter Schritt für Schritt migrieren

Page 43: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

VB6 VB6 VB .NET VB .NET

SieSie entscheiden: entscheiden: Wie sieht Ihre Anwendungsarchitektur aus?Wie sieht Ihre Anwendungsarchitektur aus? Handelt es sich um eine Neuentwicklung Handelt es sich um eine Neuentwicklung

oder soll die Applikation nur noch gewartet oder soll die Applikation nur noch gewartet werden?werden?

Machen Sie einen Upgrade-Plan!Machen Sie einen Upgrade-Plan! Welche Aspekte/Teile Ihrer Anwendung Welche Aspekte/Teile Ihrer Anwendung

gewinnen "added value" durch .NET?gewinnen "added value" durch .NET? Wie kann die bestehende Anwendung für Wie kann die bestehende Anwendung für

das Upgrade "fit" gemacht werden?das Upgrade "fit" gemacht werden?

Page 44: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

VB6 VB6 VB .NET VB .NET

Upgrade-Technologien:Upgrade-Technologien:

Code-MigrationCode-Migration Upgrade WizardUpgrade Wizard Sourcecode AnalyzerSourcecode Analyzer Tools Tools

(Dritthersteller)(Dritthersteller) Application MiningApplication Mining Tools (Dritthersteller) Tools (Dritthersteller)

InteroperabilitätInteroperabilität COM Interop COM Interop Platform InvokePlatform Invoke (P/ (P/InvokeInvoke))

Page 45: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

VB6 VB6 VB .NET VB .NET Demo

Page 46: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

VB6 VB6 VB .NET VB .NET

Weiterführende Infos im Internet:Weiterführende Infos im Internet:

MSDNMSDN®® Website: Website: http://msdn.microsoft.com/http://msdn.microsoft.com/

VB .NET Upgrade Websites:VB .NET Upgrade Websites: http://msdn.microsoft.com/vbasic/technical/http://msdn.microsoft.com/vbasic/technical/

upgrade/guide.aspupgrade/guide.asp http://msdn.microsoft.com/vstudio/nextgen/http://msdn.microsoft.com/vstudio/nextgen/

Technology/vbupgrade.aspTechnology/vbupgrade.asp http://msdn.microsoft.com/library/techart/http://msdn.microsoft.com/library/techart/

VB 6tovbdotnet.htmVB 6tovbdotnet.htm

Page 47: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

VB6 VB6 VB .NET VB .NETWeiterführende Informationen – Bücher:Weiterführende Informationen – Bücher:

Ed Robinson, Michael Bond, Ian Ed Robinson, Michael Bond, Ian Oliver:Oliver:"Upgrading Microsoft Visual Basic "Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET"6.0 to Microsoft Visual Basic .NET"Microsoft Press; Microsoft Press; ISBN 073561587XISBN 073561587X""Von Microsoft Visual Basic 6.0 Von Microsoft Visual Basic 6.0 nach Microsoft Visual Basic.NET" nach Microsoft Visual Basic.NET" Microsoft Press; Microsoft Press; ISBN 3860636669ISBN 3860636669

Dan Appleman: Dan Appleman: "Moving to VB.NET""Moving to VB.NET"Apress; ISBN: 1893115976Apress; ISBN: 1893115976

Page 48: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

MigrationMigration

JavaJavaVisual C#Visual C#

Page 49: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Java Java C# C#

3 Wege zu .NET für Java-Programmierer:3 Wege zu .NET für Java-Programmierer:

VJ++ 6.0 COM-Anwendungen: COM VJ++ 6.0 COM-Anwendungen: COM InteropInterop

Visual J# .NET: Java-Sprache für .NET Visual J# .NET: Java-Sprache für .NET (erzeugt MSIL)(erzeugt MSIL)

Java Language Conversion Assistant Java Language Conversion Assistant (JLCA): Sourcecode-Migration (JLCA): Sourcecode-Migration Java Java C# C#

Page 50: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Java Java C# C#

Java Language Conversion AssistantJava Language Conversion Assistant aktuell: Beta2 (aktuell: Beta2 (

http://msdn.microsoft.com/vstudio/downloads/jca/default.asphttp://msdn.microsoft.com/vstudio/downloads/jca/default.asp)) konvertiert automatischkonvertiert automatisch

Java Java C# C# JSP JSP ASP.NET (final version) ASP.NET (final version) J2EE J2EE .NET (ArtinSoft, MS-Partner) .NET (ArtinSoft, MS-Partner)

Integration in Visual Studio .NETIntegration in Visual Studio .NET unterstützt JDK 1.1.4unterstützt JDK 1.1.4

Page 51: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Java Java C# C# Demo

Page 52: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

AgendaAgenda

Das .NET FrameworkDas .NET Framework Visual Basic .NET: ÜberblickVisual Basic .NET: Überblick Visual C# .NET: ÜberblickVisual C# .NET: Überblick Vergleich der SprachenVergleich der Sprachen

Gemeinsamkeiten, Syntax, SonstigesGemeinsamkeiten, Syntax, Sonstiges

MigrationMigration ZusammenfassungZusammenfassung

Page 53: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

ZusammenfassungZusammenfassungHighlightsHighlightsVBVB CLS-konformCLS-konform

gute Unterstützung von OLE Automationgute Unterstützung von OLE Automation Background CompileBackground Compile beim Editieren beim Editieren einfache Event-Syntaxeinfache Event-Syntax weitgehende automatische Codeformatierungweitgehende automatische Codeformatierung

C#C# "Sprache des .NET Framework""Sprache des .NET Framework" erzwingt Programmierdisziplin erzwingt Programmierdisziplin XML-DokumentationXML-Dokumentation ermöglicht "unsicheren" Codeermöglicht "unsicheren" Code

Page 54: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

ZusammenfassungZusammenfassung

Naheliegende Migrationspfade:Naheliegende Migrationspfade: Visual Basic 6 Visual Basic 6 Visual Basic .NET Visual Basic .NET C/C++, Java C/C++, Java Visual C# .NET Visual C# .NET

VB .NET ist vollwertige .NET-SpracheVB .NET ist vollwertige .NET-Sprache kein Grund für kein Grund für

Minderwertigkeitskomplexe mehr! Minderwertigkeitskomplexe mehr! Base Class Library bestimmt Base Class Library bestimmt

verfügbare Funktionalitätverfügbare Funktionalität Wahl der Sprache für 95% der Probleme Wahl der Sprache für 95% der Probleme

irrelevantirrelevant

Page 55: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

ZusammenfassungZusammenfassung

Sie haben die QSie haben die Q

VBVB C#C#

..NNEETT

Wahl!Wahl!Sie haben die QuSie haben die QuSie haben die Sie haben die

Page 56: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Fragen?Fragen?

Page 57: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Weitere InformationenWeitere Informationen INFO: "Differences Between Visual Basic .NET and Visual INFO: "Differences Between Visual Basic .NET and Visual

C# .NET" White Paper Is Available (Q308470)C# .NET" White Paper Is Available (Q308470)http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q308http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q308470470

Daniel Appleman "Visual Basic .NET or C#...Which to Choose?"Daniel Appleman "Visual Basic .NET or C#...Which to Choose?"http://www.desaware.com/Ebook2L2.htmhttp://www.desaware.com/Ebook2L2.htm

Eric Gunnerson "A Programmer's Introduction to C#", Apress Eric Gunnerson "A Programmer's Introduction to C#", Apress 20012001

Daniel Appleman "Moving to VB.NET: Strategies, Concepts, and Daniel Appleman "Moving to VB.NET: Strategies, Concepts, and Code", Apress 2001Code", Apress 2001

Bernd Marquardt "Performance in .NET", XML in Action 2002, Bernd Marquardt "Performance in .NET", XML in Action 2002, PotsdamPotsdamhttp://213.178.67.35/events/xmldevcon/Nachlese/Slides/N/N7.ziphttp://213.178.67.35/events/xmldevcon/Nachlese/Slides/N/N7.zip

VB .NET Upgrade GuideVB .NET Upgrade Guidehttp://msdn.microsoft.com/vbasic/techinfo/articles/http://msdn.microsoft.com/vbasic/techinfo/articles/upgrade/guide.aspupgrade/guide.asp

Java Language Conversion AssistantJava Language Conversion Assistanthttp://msdn.microsoft.com/vstudio/downloads/jca/default.asphttp://msdn.microsoft.com/vstudio/downloads/jca/default.asp

Page 58: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Allgemeine InformationenAllgemeine Informationen

Jeffrey Richter:Jeffrey Richter:"Applied Microsoft .NET "Applied Microsoft .NET Framework Programming"Framework Programming"Microsoft Press;Microsoft Press;ISBN: 0735614229 ISBN: 0735614229

Ralf Westphal: Ralf Westphal: ".NET kompakt"".NET kompakt"Spektrum Akad. Vlg.; Spektrum Akad. Vlg.; ISBN: ISBN: 3827411858 3827411858

Page 59: Visual Basic.NET & C# Die Qual der Wahl? Frank Prengel Technologieberater Microsoft GmbH frankpr@microsoft.com

Microsoft’s Microsoft’s VisionVision

EmpowerEmpowerpeoplepeople

throughthroughsoftwaresoftwareany time, any place, and on any device.any time, any place, and on any device.

greatgreat