„Was ist .NET“?

Werbung
Einführung in Microsoft .NET 2.0
Daniel Kirstenpfad
Microsoft Senior Student Partner
[email protected]
Agenda
 Was ist .NET?
 Visual Studio 2005
 C# 2.0
Die .NET Plattform
Services
Server
Experiences
& Solutions
Tools
Clients
.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
.NET ist einfacher…
Windows API
HWND hwndMain = CreateWindowEx(
0, "MainWClass", "Main Window",
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
(HWND)NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hwndMain, SW_SHOWDEFAULT);
UpdateWindow(hwndMain);
.NET Framework
Form form = new Form()
form.Text = "Main Window"
form.Show()
.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)
.NET ist Sprachunabhängig
DEMO
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)
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.
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)
wichtige Namespaces in der FCL
System.Web
System.Window s.Forms
Services
Configuration
Design
Caching
UI
System.ComponentModel
Hosting
Mail
Mobile
Security
Sessionstate
System.Draw ing
Draw ing2D
Printing
Imaging
Text
System.Data
Namespaces die in der
Base Class Library
fehlen:
-
(System.Windows.Forms)
-
System.Xml
ADO
SQL
XSLT
Serialization
Design
SQLTypes
XPath
Schema
System
Collections
IO
Security
Runtime
Configuration
Net
ServiceProcess
InteropServices
Diagnostics
Reflection
Text
Remoting
Globalization
Resources
Threading
Serialization
Windows Forms
-
ADO.NET
(System.Data)
ASP.NET
(System.Web)
.NET 2.0 – wo gibt es Änderungen?
System.Web
Neu
System.Window s.FormsNeu
Services
Configuration
Design
Caching
UI
System.ComponentModel
Hosting
Mail
Mobile
Security
System.Draw ing
Sessionstate
System.Data
Draw ing2D
Printing
Imaging
Text
System.Xml
Neu
ADO
SQL
XSLT
Serialization
Design
SQLTypes
XPath
Schema
System
Neu
Neu
Neu
Collections
IO
Security
Runtime
Configuration
Net
ServiceProcess
InteropServices
Diagnostics
Reflection
Text
Remoting
Globalization
Resources
Threading
Serialization
Namespaces mit neuen /
geänderten Klassen
sind mit einem Stern
markiert ;)
einige .NET Sprachen…
Perl
Fortran
Java
Python
Smalltalk
Ada
Mercury
Cobol
Delphi
Oberon
RPG
C++
APL
C#
Oz
Visual Basic
J#
Pascal
C
Mondrian
JScript
Haskell
Eiffel
ML
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“)
Compilierung nach MSIL
piler
om
C++ C
C
ed
ag
an
M
r(
le
pi
om
er
C
pil
++
m
Nur in C++ kann man noch „normale“ .exe
Dateien erzeugen (wenn man kein .net
verwendet)
C
Co
.NET Assembly mit MSIL und
Metadaten
(.net .exe oder .dll Datei,
benötigt .net Runtime)
JIT Compiler
C#
C++
++
)
VB.NET
VB.NET Compiler
C#
Maschinencode
(„herkömmliche“ .exe
oder .dll, direkt
ausführbar)
Der JIT (Just in Time) Compiler übersetzt
die MSIL Programme zur Laufzeit in
Maschinencode
Maschinencode
C#/VB.NET „Hello World“ in MSIL
.NET Reflector
DEMO
ILDASM: im .NET Framework enthalten
.NET Reflector: http://www.aisto.com/roeder/dotnet
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
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
Der Global Assembly Cache
DEMO
 Schlüsselpaar erzeugen: Schlüsselpaar: sn -k key
 Signieren:
al /out:Assembly.dll MyModule.netmodule /keyfile:key.snk
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
Themen bis jetzt…
.NET = sehr viele Abkürzungen und Begriffe :
managed/unmanaged
GAC
CAS
CLI
Metadaten
CTS
Assemblies
CLS
MSIL
FCL
Strong-Name
Manifest
Garbage Collector
CLR
BCL
„side-by-side execution“
„Was ist .NET“?
Fragen zum ersten Teil?
Agenda
 Was ist .NET?
 Visual Studio 2005
 C# 2.0
VS 2005: Edit & Continue
DEMO
VS 2005: Click Once Deployment
DEMO
Agenda
 Was ist .NET?
 Visual Studio 2005
 C# 2.0
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, …
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);
}
}
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 abgelegt
s.Push(3);
// Integer
int i = (int)s.Pop(); // cast auf int
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
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 abgelegt
s.Push(3);
// Integer
int i = s.Pop();
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) {…};
}
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);
}
Iteratoren (2)
 Der Rückgabewert einer Iterator-Methode muss
IEnumerable oder IEnumerator sein
 yield return statt return
Baum für das Iteratoren-Beispiel
Partielle Klassen
 Klassen können aus mehreren Dateien bestehen:
public partial class C {
int x;
public void M1(...) {...}
public int M2(...) {...}
}
//Datei Part1.cs
public partial class C {
string y;
public void M3(...) {...}
public void M4(...) {...}
}
//Datei Part2.cs
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
handgeschrieben
Beispiel Windows Form:
Form1.cs
:
Design
Form1.Designer.cs :
Code
 Gilt für Klassen und Strukturen (und in C# für Interfaces)
Delegates
 Was sind Delegates?
 Neu: Covarianz / Contravarianz bei Delegates
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);
}
Delegates (2)
 Ein Delegate wird wie eine Methode aufgerufen
delegate 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);
}
}
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);
}
}
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)
{
// …
}
}
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)
{
// …
}
}
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)
{
// …
}
}
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"); }
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>
 zwei Properties:
HasValue und Value
(T gibt den Typ an)
Nullable Types
 Beispiel:
int? var;
if( var == null || var.HasValue == false)
Console.WriteLine("Nicht initialisiert");
Else
Console.WriteLine( var.Value);
Web Services
DEMO
Windows Forms und Datenbanken
DEMO
Einführung in Microsoft .NET 2.0
Herunterladen