Druckversion
Einführung in .NET/C#
Beispielbild
(für JAVA-Entwickler)
Tomasz Naumowicz
[email protected]
Agenda
- Überblick über .NET
- C# Basiswissen für Java-Entwickler
- C# Tipps
FU Berlin, Einführung in .NET/C#, 26.04.2006
2
.NET / C# - Java
Wichtig:
.NET ist eine Plattform, C# eine Sprache
.NET / C# ist kein Versuch, Java nachzumachen
.NET soll keine Revolution sein, eher „Evolution“
…um die Entwicklung bei neuen Anforderungen zu vereinfachen
FU Berlin, Einführung in .NET/C#, 26.04.2006
3
Framework, Languages und Tools
VB
C++
C#
JScript
J#
ASP.NET
Web Forms Web Services
Mobile Internet
Windows
Forms
ADO.NET and XML
Base Class Library
Common Language Runtime
Visual Studio
+
VS Team Foundation Server
Common Language Specification
Operating System
FU Berlin, Einführung in .NET/C#, 26.04.2006
4
Sprachen
Die .NET Plattform ist Sprachneutral
-
Alle .NET Sprachen sind gleich berechtigt
-
Wahl der Sprache nach Ihren Fähigkeiten
Common language specification (CLS)
-
Satz an Merkmalen, die in jeder Sprache garantiert sind
Microsoft liefert
-
Visual Basic®, C++,
C#, J#, JScript®
Drittanbieter liefern
-
APL, COBOL, Delphi, Pascal, Eiffel, Haskell, ML, Oberon, Perl,
Python, Scheme, Smalltalk…
FU Berlin, Einführung in .NET/C#, 26.04.2006
5
IL - Native Compiler
Source
Code
IL Code
Ngen
Native
Code
VB
C#
C++
Compiler
Compiler
Compiler
Assembly
Assembly
Assembly
Common Language Runtime JIT Compiler
Managed
Code
CLR Services
Managed
CLR
Code
Managed
Code
Unmanaged
Code
Operating System Services
FU Berlin, Einführung in .NET/C#, 26.04.2006
6
Agenda
- Überblick über .NET
- C# Basiswissen für Java-Entwickler
- Was ist gleich
- Was ist ähnlich
- Was ist neu
- C# Tipps
FU Berlin, Einführung in .NET/C#, 26.04.2006
7
Gleich…
-Virtuelle Maschine
-Nur Objekte
-Garbage Collection
-Jagged Arrays
-Eine Basisklasse, mehrere Interfaces
-Immutable Strings
-Unterstützung für Ausnahmen (Exceptions)
-Anonyme Methoden
-(mehr)
FU Berlin, Einführung in .NET/C#, 26.04.2006
8
Ähnlich…
-Schlüsselwörter
-Main Methode
-Aufruf von Basisklassen
- Konstruktor() : base() oder Konstruktor(Integer param) : base(param, 20)
- Kein „super“-Schlüsselwort
-Assembly ~ JAR
- Aber mit Metadaten, Versionsverwaltung etc.
-Namespaces
- ~ Java Package Name aber mehr Freiheit
-Syntax für Vererbung
-Zugriffsmodifizierer
-(mehr)
FU Berlin, Einführung in .NET/C#, 26.04.2006
9
Syntax für Vererbung
-Kompakter, Notation ist dafür wichtiger
- Interfaces durch I* hervorheben
FU Berlin, Einführung in .NET/C#, 26.04.2006
10
Zugriffsmodifizierer
Zugriffsmodifizierer
Beschreibung
public
Das Datenelement ist außerhalb der Klasse für alle sichtbar,
auch außerhalb der abgeleiteten Klassen
protected
Das Datenelement ist außerhalb der Klasse nicht sichtbar und
ist nur noch von abgeleiteten Klassen aus zugänglich
private
Das Datenelement ist außerhalb der definierten Klasse nicht zu
sehen.
internal
Das Datenelement ist nur innerhalb der aktuellen
Kompilierungseinheit sichtbar. Der Zugriffsmodifizierer internal
erzeugt einen Hybrid aus öffentlichem und geschütztem
Zugriff, je nachdem, wo er Liegt
Kein Zugriffsmodifizierer  private
FU Berlin, Einführung in .NET/C#, 26.04.2006
11
Neu
-Mehrere Programmiersprachen
-Generics (Unterstützung direkt in der CLR)
-Exceptions müssen nicht behandelt werden
-Mehrdimensionale Arrays
-Zeiger (pointer) und „unsafe“ Code
-Attribute
-Überladen von Operatoren
-Strings mit Escape-Characters
- “C:\\Files\\Directory\\file.txt“  @“C:\Files\Directory\file.txt“
-Indexer
-Variable Parameterliste
-Overflow Erkennung
FU Berlin, Einführung in .NET/C#, 26.04.2006
12
Neu
-Boxing
-Delegates und Events
-Enum
-Properties
-foreach
-(mehr)
FU Berlin, Einführung in .NET/C#, 26.04.2006
13
Boxing / Unboxing
-Automatische Konvertierung von Werttypen
-Vorteil:
ArrayList al = new ArrayList();
al.Add(1);
al.Add(23);
int number = (int) al[0];
FU Berlin, Einführung in .NET/C#, 26.04.2006
14
Delegate
Delegate ähnlich zum Funktionspointer aus C/C++
Zusätzlich: Typsicherheit
Grundlage für Events
Syntax:
Hier wird ein Datentyp für den Funktionspointer definiert
Datentyp bekommt den Namen „CallbackFunction“
Beschreibt: 2 Parameter (String und int) und ein Rückgabewert (bool)
public delegate bool CallbackFunction(string p1, int p2);
Hier wird eine Funktion definiert, die an den Datenytpen oben passt
public bool Function(string parameter1, int parameter2)
{
return true;
}
…
Hier wird eine Variable von dem Typ „CallbackFunction“ definiert.
Diese Variable wird der „Funktionspointer“ sein.
private CallbackFunction _delegate;
_delegate = new CallbackFunction(Function);
_delegate(“text“, 13);
…
Hier wird ein Funktionspointer erzeugt (vom
Typ „CallbackFunction“)
und unter „_delegate“ gespeichert.
Hier wird die Funktion aufgerufen.
FU Berlin, Einführung in .NET/C#, 26.04.2006
15
Events
Event: publish-subscribe Modell in der Sprache enthalten
Syntax (publisher):
public event EventHandler MessageReceived;
protected void OnMessageReceived() {
if (MessageReceived != null)
MessageReceived(this, null);
}
private ...
OnMessageReceived();
...
FU Berlin, Einführung in .NET/C#, 26.04.2006
16
Events
Event: publish-subscribe Modell in der Sprache enthalten
Syntax (client):
...
Publisher.MessageReceived += new EventHandler(Publisher_MessageReceived);
...
private void Publisher_MessageReceived(object sender, EventArgs args) {
//code
}
Demo
FU Berlin, Einführung in .NET/C#, 26.04.2006
17
Enum
Keine String-Konstanten mehr. Typsichere Lösung.
public enum MessageType { Ping, Query, Response }
FU Berlin, Einführung in .NET/C#, 26.04.2006
18
Properties
Zugriff auf Variablen über Setter- und Getter-Methoden vereinfacht
private string _username;
public string Username {
set { _username = value.ToUpper(); }
get { return _username; }
}
Oder als Read-Only:
public string Username {
get { return _username; }
}
Aufpassen: Mögliche Ausnahmen (Exceptions) bei Zuweisungen
FU Berlin, Einführung in .NET/C#, 26.04.2006
19
foreach
Einfacher durch Collections iterieren
foreach (String s in _arrayList)
Console.WriteLine(s);
FU Berlin, Einführung in .NET/C#, 26.04.2006
20
Tipps (1 / 2)
Dynamic Help (Ctrl + F1 + D oder Help -> Dynamic Help)
Automatische Quellcode Formatierung und Erzeugung (Tooltips lesen)
Code snippets (Insert -> Snippets)
Refactoring (endlich da )
FU Berlin, Einführung in .NET/C#, 26.04.2006
21
Tipps (2 / 2)
Cross-Thread Aufrufe waren NIE sicher, sie müssen synchronisiert
werden.
.NET 2.0 wirft immer eine Exception falls Cross-Thread aufrufe
stattfinden.
FU Berlin, Einführung in .NET/C#, 26.04.2006
22
Cross-Thread + SerialPort
Problem:
- SerialPort.DataReceived Event kommt aus dem ThreadPool
-  nicht synchronisiert
Lösung:
- SynchronizingObject verwenden.
- Lösung in der Demo.
FU Berlin, Einführung in .NET/C#, 26.04.2006
23

public string Username