If you can't read please download the document
Upload
vankhanh
View
218
Download
0
Embed Size (px)
Citation preview
C#im Rahmen des Seminars - Programmiersprachen
Markus Nestvogel
2
1. Einfhrung2. Microsoft .NET3. C#
Gliederung
3
objektorientierte Programmiersprachefr Microsoft .NET entwickeltKonkurrenz zu Javawird in Zwischensprache (IL) bersetztbentigt Runtime
1 Einfhrung
4
Vision von MicrosoftVerknpfung von Informationen, Menschen, Systeme und GerteVerteilte Applikationen
.NET Frameworktechnische Umsetzung
2 .NET
5
DesignzieleBetriebssystem ber dem Betriebssystemhoher Grad an Sicherheithchst mgliches Ma an Kompatibilittgemeinsame Plattform fr unterschiedliche Sprachen
C#, C++ mit verwalteten Erweiterungen, J#, Haskell....
groe Basisklassenbibliothekschnelle Anwendungsentwicklung (Rapid Application Development, RAD)standardisierte Benutzeroberflchen...
2.1 .NET-Framework
6
Laufzeitumgebung, unter der .NET-Programme ausgefhrt werdenvirtuelle Maschine mit eigenem Befehlssatz (IL)
HauptbereicheAusfhrung der ProgrammeTypverwaltung (CTS)Freispeicherverwaltung mit Garbage CollectionProzessraumverwaltung in Application Domains
2.2 Common Language Runtime
7
bersetzung und Ausfhrung
classloader JIT - Compiler
nativer MaschinencodeAusfhrung
.NET
Bas
iskl
asse
nbib
lioth
ekIL
.NET Sprachen Compiler
Quelltext
CLR
8
Zielcode aller .NET Sprachcompilerhnlich Java Bytecode
aber: Typinformation ist nicht Bestandteil von einer Instruktion
IL-Code wird vor Ausfhrung grundstzlich durch einen Just In Time Compiler in nativen Maschinencode bersetzt
2.3 Intermediate Language
.locals init ([0] int32a, [1] int32 b,[2] int32 c)
IL_0000: ldc.i4 0x925IL_0005: stloc.0IL_0006: ldc.i4.2IL_0007: stloc.1IL_0008: ldloc.0IL_0009: ldloc.1IL_000a: addIL_000b: stloc.2
int a = 2341;int b = 2;int c = a+b;
0 sipush 23413 istore_14 iconst_25 istore_26 iload_17 iload_28 iadd9 istore_310 return
Microsoft-IL Java-Bytecode
9
Sobald ein Modul in IL bersetzt wird gehrt es zu einem Assembly
Codeabschnitt, RessourcenabschnittManifest mit Metadaten ber die enthaltenen Typen
private Assemblies stehen im (Unter-)Verzeichnis der Anwendung ffentliche Assemblies sind im GAC installiert
einmalig kompiliertmehrere Versionen knnen gleichzeitig installiert seinVersionsberprfung durch die CLR verhindert das falsche Assemblies benutzt werdenEnde der .dll-Hlle
Assemblies
10
als Common Type System in die CLR integrierteinheitlich fr alle Sprachenalles ist ein Objekt (2004.ToString();)
alle Typen werden von System.Object abgeleitet
es existieren genau zwei Arten von TypenWerttypenVerweistypen
2.4 Typsystem
11
CTS
.NETDatentypen
BenutzerdefinierteDatentypen
Datentyp(System.Object)
Werttypen Verweistypen
Int16
Char
Decimal
...
Enums
Strukturen
String
Boxing-Klassen
.NET-Delegaten
.
Delegaten
Interfaces
Klassen
12
Werttypenechte Werte (int, double, decimal, ...)werden auf Stack gespeichertmssen initialisiert werdeneigene Werttypen mglich (Strukturen)
Verweistypenobjektorientierte Zeigerwerden im Heap gespeichert
13
Boxing vs. Unboxing
123
123
123
System.Int32
i
o
j
// implizites Boxingstring s = 7.GetType().ToString();// explizites Boxingint i = 123;object 0 = i;int j = (int) o
14
wird periodisch gestartetmarkiert alle erreichbaren Objekte entfernt alle Unmarkierten
2.5 Garbage Collection
Objekt A
Objekt B
Objekt C
Objekt D
Objekt E
Objekt F
Objekt G
eva
lua
tion
Sta
ck
Objekt A
Objekt C
Objekt E
Objekt F
eva
lua
tion
Sta
ck
Heap Heap
15
Anwendungen teilen sich einen ProzessraumCode muss typsicher sein (verwalteter Code)unsicherer Code luft weiterhin in isolierten Prozessen
2.6 Application Domains
Prozess
Computer
Prozess
Unverwaltete Umgebung
Objekt Objekt
ObjektObjekt
Anwendung
Objekt Objekt
ObjektObjekt
Anwendung
Objekt Objekt
ObjektObjekt
Anwendung
Application Domain Application Domain
Verwaltete Umgebung
Freispeicherverwaltung, Typsicherheit auf Basis von Laufzeittypen, Codesicherheit, Lizensierung
Direkter Speicherzugriff mglich, COM Komponenten,
Bibliotheken mit API-Routinen
16
Die .NET-Sprachelaut MS: Symbiose aus Visual Basic und C++erinnert stark an Java
bentigt Runtime zur AusfhrungWerte mssen vor Verwendung initialisiert werden
Aufbaueigene Typen werden in Klassen implementiert
class, abstract class, interface, struct,...
3 C#
17
Namensrumehnlich Java-Packageskeine Namenskollisionen mit externen Symbolenbeliebig viele Unternamensrume erlaubteinzubinden durch using Namensraum; Klausel
einzelne Klasse mssen mit einem Alias angegeben werden (using myClass = new Namesraum.Klasse;)
3.1 C# - Syntax
namespace NamensRaum{[class-Klassendefinition][struct-Klassendefinition][interface-Schnittstellendeklarationen][enum-Vereinbarungen fr Aufzhlungstypen][delegate-Vereinbarungen fr Methodenzeiger]
namespace NamensUnterRaum{...}
}
18
class-Klassen
eine Klasse kann nur von einer Basisklasse erbenMehrfachvererbung bei Schnittstellen erlaubt
Schnittstellen
[Modifizierer] class MeineKlasse [: {Basisklasse | Schnittstelle[,...]}]{
...}
[Modifizierer] interface IMeineSchnittstelle [: Schnittstelle1 [,...]}]{
[Methodenprototypen]}
19
Vererbung
Vererbung
Einfachvererbung Mehrfachvererbung
Implementierungs-Vererbung
class
partielle Implemen-tierungsvererbung
abstract class
schnittstellen-Vererbunginterface
nicht polymorpheImplementierung
new
polymorpheImplementierung
virtual,override
20
StrukturenStrukturen sind immer Werttypen
werden nur im Stack verwaltet -> bessere Performanceweniger Arbeit fr Garbage Collector
ideal fr kleine Datenstrukturen mit Wertsemantikermglichen das Erzeugen von primitiven Typennicht ableitbar.NET Framework nutzt diese auch
int, byte, double, float, ... sind alles structs
Syntax[Modifizierer] struct MeinStrukturtyp [: Schnittstelle[,...]]{
...}
21
Zugriffsmodifizierer
22
Beispiel : Hallo Welt!using System;
class Hallo{
static void Main(){
Console.WriteLine("Hallo {0}!","Welt");}
}
Ausfhrungmit csc.exe in IL bersetzenHallo.exe starten
23
Eigenschaftenzweiteilige Methode erlaubt gesicherten schreibenden und lesenden Zugriff auf einen Wert
Beispiel Zhler:
Gebrauch: MyClass.Counter++;
3.2 Neuerungen gegenber Java
int counter;
public int Counter{get{
return counter;}set{
counter = value;}
}
24
foreach - Schleife
enums
static int SummiereArray(int[] array){int summe = 0;foreach (int a in array) {
summe = summe + a;}return summe;
}
enum Tageszeit : byte{Morgen = 1,Mittag,Abend,Nacht
};
Tageszeit zeit1 = Tageszeit.Abend;Tageszeit zeit2 = (Tageszeit) 3;
25
Ersatz fr Funktionszeigerobjektorientiert und sicherPlatzhalter fr Callback-Methoden
Grundlage fr Ereignisbehandlung
kann mehrere Methoden delegieren
Delegaten
26
Beispiel Multicast Delegat:
using System;
delegate void EinDelegat(string message);
class TestDelegat{static void ErsteMethode(string str) {
Console.WriteLine("Methode 1: {0}",str);}
static void ZweiteMethode(string str) {Console.WriteLine("Methode 2: {0}",str);
}
static void Main(string[] args) {EinDelegat call = new EinDelegat(ErsteMethode);call += new EinDelegat(ZweiteMethode);call ("Beim Delegat angemeldet");call -= new EinDelegat(ZweiteMethode);call ("Noch immer angemeldet");Console.ReadLine();
}}
27
ein Objekt macht ein anderes auf interessante Situation aufmerksamEreignisse sind Callback-Funktioneneigener Code wird in unabhngige Komponente eingefgt
Klick auf einen Windows.Forms Button startet eigene Methode
Events in C#fester Bestandteil der Sprachebasieren auf Delegaten
Ereignisbehandlung
28
Beispiel Ereignisbehandlung:
using System;
namespace Ereignisbehandlung {// Delegat fr Ereignispublic delegate void KundeEventHandler();
public class Kunde {// Ereignisdefinitionpublic event KundeEventHandler Zahlen; public void Bezahlen() {
//Ereignis auslsenZahlen();
}}
public class Kasse {Kunde k; public Kasse (Kunde kunde) {
k = kunde;// Ereignis abonnierenkunde.Zahlen += new KundeEventHandler(Kunde_Zahlen);
}// Wenn Ereignis eintritt ausfhrenprivate void Kunde_Zahlen(){
Console.WriteLine("Kunde hat bezahlt");}
}
29
public class Test {static void Main(string[] args) {
Kunde kunde = new Kunde();Kasse kasse = new Kasse(kunde);kunde.Bezahlen();Console.ReadLine();
}}
}
30
Vielen Dank fr das Interesse
Fragen zum Vortrag oder der Ausarbeitung jetzt stellen oder an [email protected] schicken
Guten Appetit!
Ende