Einführung in Microsoft .NET 2.0

Post on 06-Jan-2016

40 views 0 download

description

Einführung in Microsoft .NET 2.0. Daniel Kirstenpfad Microsoft Senior Student Partner i-dankir@microsoft.com. Agenda. Was ist .NET? Visual Studio 2005 C# 2.0. Clients. Services. Tools. Experiences & Solutions. Server. Die .NET Plattform. .NET basiert auf offenen Standards. - PowerPoint PPT Presentation

Transcript of Einführung in Microsoft .NET 2.0

Einführung in Microsoft .NET 2.0

Daniel KirstenpfadMicrosoft Senior Student Partneri-dankir@microsoft.com

Agenda

Was ist .NET? Visual Studio 2005 C# 2.0

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

.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 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()

.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

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)

.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

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

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

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)

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 :

CLS

CLR

CLI

CTS

FCL

BCL

MSIL Assemblies

Metadaten

Garbage Collector

GAC

Strong-Name

„side-by-side execution“

Manifest

managed/unmanaged

CAS

„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 abgelegts.Push(3); // Integerint 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 abgelegts.Push(3); // Integerint 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 { //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(...) {...}

}

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)

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 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); }}

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> (T gibt den Typ an)

zwei Properties: HasValue und Value

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