Download - Einführung in Microsoft .NET 2.0
![Page 2: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/2.jpg)
Agenda
Was ist .NET? Visual Studio 2005 C# 2.0
![Page 3: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/3.jpg)
Die .NET Plattform
ServicesServices
To
ols
To
ols
Ex
pe
rien
ces
E
xp
erie
nce
s
& S
olu
tion
s&
So
lutio
ns
ClientsClients
ServerServer
![Page 4: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/4.jpg)
.NET basiert auf offenen Standards
ECMA-334, ISO/IEC 23270: C# Language Specifiaction, 2nd edition
ECMA-335, ISO/IEC 23271: Common Language Infrastructure, 2nd ed.
ISO/IEC 23272: CLI TR nicht nur Microsoft: HP, Intel,
Fujitsu-Siemens, Sun Microsystems, …
ECMA = European Computer Manufacturers Association
ISO = International Standardization Organisation
![Page 5: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/5.jpg)
.NET ist einfacher…
Windows APIWindows APIHWND hwndMain = CreateWindowEx(HWND hwndMain = CreateWindowEx( 0, "MainWClass", "Main Window",0, "MainWClass", "Main Window", WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL, (HMENU)NULL, hInstance, NULL); (HWND)NULL, (HMENU)NULL, hInstance, NULL); ShowWindow(hwndMain, SW_SHOWDEFAULT); ShowWindow(hwndMain, SW_SHOWDEFAULT); UpdateWindow(hwndMain);UpdateWindow(hwndMain);
.NET Framework.NET Framework
Form Form form =form = new new Form() Form()form.Text = "Main Window"form.Text = "Main Window"form.Show()form.Show()
![Page 6: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/6.jpg)
.NET ist Sprachunabhängig
.NET Anwendungen kann man in (fast) jeder Sprache programmieren
Dabei kann man auch mehrere Sprachen innerhalb einer Anwendung mischen
Dies ist möglich durch – Common Language Infrastructure (CLI),
– Common Language Specification (CLS),
– Common Type System (CTS) und
– eine gemeinsame Klassenbibliothek (FCL)
![Page 7: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/7.jpg)
.NET ist Sprachunabhängig
DEMO
![Page 8: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/8.jpg)
Die Common Language Runtime
… ist die Laufzeitumgebung des .NET Frameworks
Sie führt .NET Programme aus
Die CLR ist eine einheitliche Umgebung, unabhängig von der verwendeten Programmiersprache
Sie stellt Basisdienste bereit, z.B. den Garbage Collector, Code Access Security (CAS), und die Framework Class Library (FCL)
![Page 9: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/9.jpg)
CLI/CLS/CTS
Die Common Language Infrastructure (CLI) definiert Dateiformate, IL-Befehlssatz usw.
Die Common Language Specification (CLS) legt bestimmte Eigenschaften fest, die alle .NET Sprachen erfüllen müssen/sollten (z.B. Regeln für die Benennung von Variablen/Methoden/Klassen usw.)
Das Common Type System (CTS) legt die Datentypen fest, die .NET Sprachen verwenden dürfen. Alle Datentypen sind in allen .NET Sprachen gleich.
Dadurch ist es möglich, Programme in mehreren verschiedenen .NET Sprachen zu schreiben. Man kann z.B. eine Klasse in C# schreiben, in VB.NET davon eine Klasse ableiten, und diese dann in C++ verwenden.
![Page 10: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/10.jpg)
Die Klassenbibliothek
Die Framework Class Library ist eine gemeinsame Klassenbibliothek für alle .NET Sprachen
Da alle .NET Sprachen die selbe Klassenbibliothek verwenden, sind alle .NET Sprachen gleich mächtig, d.h. alles was man mit C# machen kann geht auch in VB.NET und umgekehrt.
Ausnahme: C++ (kann auch unmanaged Code erzeugen)
Base Class Library (BCL): Der Teil der FCL, der im ECMA Standard beschrieben ist (Im Prinzip FCL ohne Windows Forms, ADO.NET und ASP.NET)
![Page 11: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/11.jpg)
wichtige Namespaces in der FCL
System
System.Data System.Xml
System.Drawing
System.Windows.FormsSystem.Web
Globalization Resources Threading Serialization
Diagnostics Reflection Text Remoting
Configuration Net ServiceProcess InteropServices
Collections IO Security Runtime
Design SQLTypes
ADO SQL
XPath Schema
XSLT Serialization
Imaging Text
Drawing2D Printing
Design
System.ComponentModelCaching UI
Services Configuration
Mobile Security
Hosting Mail
Sessionstate
Namespaces die in der
Base Class Library
fehlen:
- Windows Forms
(System.Windows.Forms)
- ADO.NET
(System.Data)- ASP.NET
(System.Web)
![Page 12: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/12.jpg)
.NET 2.0 – wo gibt es Änderungen?
System
System.Data System.Xml
System.Drawing
System.Windows.FormsSystem.Web
Globalization Resources Threading Serialization
Diagnostics Reflection Text Remoting
Configuration Net ServiceProcess InteropServices
Collections IO Security Runtime
Design SQLTypes
ADO SQL
XPath Schema
XSLT Serialization
Imaging Text
Drawing2D Printing
Design
System.ComponentModelCaching UI
Services Configuration
Mobile Security
Hosting Mail
Sessionstate
Namespaces mit neuen /
geänderten Klassen
sind mit einem Stern
markiert ;)
Neu
NeuNeu
Neu
Neu
Neu
![Page 13: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/13.jpg)
einige .NET Sprachen…
APL
Cobol
Eiffel
Fortran
Pascal
Perl
Python
Ada
C
C++C#
Haskell
Java
JScript
Visual Basic
Mercury
ML
Oz
Oberon
Smalltalk
J#
RPG
Mondrian
Delphi
![Page 14: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/14.jpg)
Microsoft Intermediate Language
Ähnlich wie bei Java, wo Java-Quellcode zu Java Bytecode übersetzt wird, werden .NET Programme in MSIL übersetzt.
MSIL ist eine Assemblerähnliche Sprache, und wird in der Regel erst zur Laufzeit („Just in Time“) zu Maschinencode übersetzt.
MSIL war von Anfang an dafür gedacht, compiliert zu werden (und nicht interpretiert wie ursprünglich mal beim Java Byte Code)
Kann schon bei Installation einer Anwendung komplett zu Native-Code übersetzt werden (oder auch „just in time“)
![Page 15: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/15.jpg)
Compilierung nach MSIL
C# C++VB.NET
.NET Assembly mit MSIL undMetadaten
(.net .exe oder .dll Datei,benötigt .net Runtime)
VB
.NE
T C
ompi
ler
Maschinencode
JIT
Com
pile
r
Maschinencode
(„herkömmliche“ .exeoder .dll, direkt
ausführbar)
Der JIT (Just in Time) Compiler übersetztdie MSIL Programme zur Laufzeit inMaschinencode
Nur in C++ kann man noch „normale“ .exeDateien erzeugen (wenn man kein .netverwendet)
![Page 16: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/16.jpg)
C#/VB.NET „Hello World“ in MSIL
![Page 17: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/17.jpg)
.NET Reflector
DEMO
ILDASM: im .NET Framework enthalten.NET Reflector: http://www.aisto.com/roeder/dotnet
![Page 18: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/18.jpg)
Assemblies
Assemblies sind .NET .exe oder .dll Dateien Assemblies bestehen aus einem Manifest und MSIL
Code und/oder Ressourcen (Bilder, Texte, …) Das Manifest enthält Informationen wie z.B.
– die Version und den Ländercode der Assembly
– Abhängigkeiten von anderen Assemblies
– Metadaten über die Typen in der Assembly
– von der Assembly exportierte Typen
– Rechte die zur Ausführung nötig sind
![Page 19: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/19.jpg)
Der Global Assembly Cache
Gemeinsam genutzte Assemblies werden im Global Assembly Cache (GAC) gespeichert
z.B. c:\windows\assembly Von einer Assembly können mehrere Versionen parallel
installiert und ausgeführt werden („side-by-side execution“) Es wird automatisch die korrekte Version verwendet Assemblies im GAC haben einen Strong-Name,
d.h. sie sind signiert Der GAC löst das „DLL-Hell“-Problem
![Page 20: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/20.jpg)
Der Global Assembly Cache
DEMO
Schlüsselpaar erzeugen: Schlüsselpaar: sn -k key Signieren:
al /out:Assembly.dll MyModule.netmodule /keyfile:key.snk
![Page 21: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/21.jpg)
Der Garbage Collector
Der Garbage Collector ist Teil der Common Language Runtime
Er ist zuständig für die Speicherverwaltung Er reserviert Speicher für neue Objekte, und löscht
Speicher, wenn sie nicht mehr verwendet werden Die Freigabe des Speichers erfolgt nichtdeterministisch,
z.B. wenn der freie Speicher knapp wird deterministische Freigabe ist durch das
IDisposable-Pattern möglich Objekte werden in 3 Generationen verwaltet
![Page 22: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/22.jpg)
Themen bis jetzt…
.NET = sehr viele Abkürzungen und Begriffe :
CLS
CLR
CLI
CTS
FCL
BCL
MSIL Assemblies
Metadaten
Garbage Collector
GAC
Strong-Name
„side-by-side execution“
Manifest
managed/unmanaged
CAS
![Page 23: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/23.jpg)
„Was ist .NET“?
Fragen zum ersten Teil?
![Page 24: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/24.jpg)
Agenda
Was ist .NET? Visual Studio 2005 C# 2.0
![Page 25: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/25.jpg)
VS 2005: Edit & Continue
DEMO
![Page 26: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/26.jpg)
VS 2005: Click Once Deployment
DEMO
![Page 27: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/27.jpg)
Agenda
Was ist .NET? Visual Studio 2005 C# 2.0
![Page 28: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/28.jpg)
Attribute
Mit Attributen kann man „Kommentare, die ein Programm lesen kann“ schreiben
Attribute können vergeben werden für– Assembly, Klasse, Konstruktor, Delegate, Enum,
Event, Eigenschaft, Felder, Interface, Methode, Modul, Parameter, Rückgabewerte und Struct
Beispiele: DebuggerStepThrough, DesignerCategory, AssemblyVersion, FileIOPermission, …
![Page 29: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/29.jpg)
Attribute: Beispiel
[FileIOPermission(SecurityAction.Demand, unrestricted=true)]public void SchreibeDaten(){ try { StreamWriter sw = new StreamWriter(dateiName); sw.Write("Hallo Welt!"); sw.Close(); } catch (IOException ex) { MessageBox.Show(ex.Message); }}
![Page 30: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/30.jpg)
Generische Datentypen
Generierung typsicherer Datenstrukturen– Sonst werden Daten oft als object abgespeichert
– Danach muss auf den korrekten Typ „gecastet“ werden
Stack s = new Stack();// Daten werden als object abgelegts.Push(3); // Integerint i = (int)s.Pop(); // cast auf int
![Page 31: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/31.jpg)
Generics
Generics sind .NET Typen und Methoden, die durch Typparameter abstrahiert werden können
Einfaches Beispiel: Sortierung– Man kann int, string, double, ... sortieren
– Mit generischen Typen schreibt man nur eine Sortierungs-Methode
– Diese kann dann mit den unterschiedlichen Typen „angewendet“ werden
![Page 32: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/32.jpg)
Generics
Der Code der generischen Klasse wird für den/die Datentypen aufgebaut– Legt man einen Stack für int und einen für double
an, so enthält Applikation zweimal den jeweiligen Code
Stack<int> s = new Stack<int>();// Daten werden als int abgelegts.Push(3); // Integerint i = s.Pop();
![Page 33: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/33.jpg)
Generics
Es sind auch generische Methoden möglich Generics können mit Klassen oder Strukturen als
Typ-Parameter aufgerufen werden.
public class G1<T> {…};public interface I1<T> {…};public struct S1<T> {…};public class Test<T>{ public T Min<T>(T t1, T t2) {…};}
![Page 34: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/34.jpg)
Iteratoren
Vereinfacht: macht bei Methodenaufruf da weiter machen, wo das letzte return aufgehört hat
public IEnumerator DemoMethode(){ yield return "Montag"; yield return "Dienstag"; // Mittwoch, Donnerstag, Freitag, …}
public void andereMethode(){ foreach (string tag in DemoMethode) Console.WriteLine(tag);}
![Page 35: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/35.jpg)
Iteratoren (2)
Der Rückgabewert einer Iterator-Methode muss IEnumerable oder IEnumerator sein
yield return statt return
![Page 36: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/36.jpg)
Baum für das Iteratoren-Beispiel
![Page 37: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/37.jpg)
Partielle Klassen
Klassen können aus mehreren Dateien bestehen:
public partial class C { //Datei Part1.cs int x;public void M1(...) {...}public int M2(...) {...}
}
public partial class C { //Datei Part2.cs
string y;public void M3(...) {...}public void M4(...) {...}
}
![Page 38: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/38.jpg)
Partielle Klassen
Teile können nach Funktionalitäten gruppiert werden
verschiedene Entwickler können gleichzeitig an derselben Klasse arbeiten
erster Teil kann maschinengeneriert sein, zweiter Teil handgeschriebenBeispiel Windows Form:
Form1.cs : DesignForm1.Designer.cs : Code
Gilt für Klassen und Strukturen (und in C# für Interfaces)
![Page 39: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/39.jpg)
Delegates
Was sind Delegates? Neu: Covarianz / Contravarianz bei Delegates
![Page 40: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/40.jpg)
Delegates
… speichern die Adresse einer Methode Ein Delegate hat eine bestimmte Signatur, die
Rückgabewert und Parameter der Methode(n) die man dem Delegate zuweisen kann vorgibt
einfacher Delegate oder MulticastDelegate (kann auf mehrere Methoden verweisen)
namespace DelegateDemo{ delegate void EinfacheMethodeDelegate(); delegate void EinIntParameterDelegate(int i); delegate double FunktionDelegate(double x);}
![Page 41: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/41.jpg)
Delegates (2)
Ein Delegate wird wie eine Methode aufgerufendelegate void EinDelegate(int i);
class DelegateDemo{ void Methode1() { EinDelegate d = new EinDelegate(this.Methode2); d(5); }
void Methode2(int k) { Console.WriteLine("Methode 2: " + k); }}
![Page 42: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/42.jpg)
MulticastDelegates
delegate void EinDelegate(int i);
class DelegateDemo{ void Methode1() { EinDelegate d = new EinDelegate(this.Methode2); d += new EinDelegate(this.Methode3); d(5); }
void Methode2(int k) { Console.WriteLine("Methode 2: " + k); } void Methode3(int j) { Console.WriteLine("Methode 3: " + j); }}
![Page 43: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/43.jpg)
Delegates: Covarianz
Der Rückgabewert der Methode darf spezieller sein, als im Delegate angegeben
delegate Tier EinDelegate(int i);
class DelegateDemo{ void Demo() { EinDelegate d = new EinDelegate(this.EineMethode); } Hund EineMethode(int k) { // … }}
![Page 44: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/44.jpg)
Delegates: Contravarianz
Parameter im Delegate dürfen spezieller sein als in der Methode
delegate void EinDelegate(Hund i);
class DelegateDemo{ void Demo() { EinDelegate d = new EinDelegate(this.EineMethode); } void EineMethode(Tier k) { // … }}
![Page 45: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/45.jpg)
Delegates: vereinfachte Zuweisung
delegate void EinDelegate(int i);
class DelegateDemo{ void Demo() { // C# 1.0/1.1 EinDelegate d = new EinDelegate(this.EineMethode);
// C# 2.0 EinDeleagate d2 = EineMethode; } void EineMethode(int k) { // … }}
![Page 46: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/46.jpg)
Anonyme Methoden
In C# 1.0/1.1 kann man einem Delegate nur eine vorhandene Methode („named Method“) zuweisen
In C# 2.0 neu: anonyme Methoden
button.Click += delegate { MessageBox.Show("Hallo Welt"); }
![Page 47: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/47.jpg)
Nullable Types
Nullable Types können alle Werte des zugrunde liegenden Typen annehmen können - und zusätzlich den Wert null.
Null signalisiert dass die Variable noch nicht initialisiert wurden
Nullable Types sind als Generics gelöst
Sie sind vom Typ: System.Nullable<T> (T gibt den Typ an)
zwei Properties: HasValue und Value
![Page 48: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/48.jpg)
Nullable Types
Beispiel:
int? var;
if( var == null || var.HasValue == false)
Console.WriteLine("Nicht initialisiert");
Else
Console.WriteLine( var.Value);
![Page 49: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/49.jpg)
Web Services
DEMO
![Page 50: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/50.jpg)
Windows Forms und Datenbanken
DEMO
![Page 51: Einführung in Microsoft .NET 2.0](https://reader035.vdokument.com/reader035/viewer/2022062321/56813b92550346895da4c156/html5/thumbnails/51.jpg)
Einführung in Microsoft .NET 2.0