net architektur und c# (c-sharp) - cs.hs-rm.deweber/sysprog/proj07/dotnet-cs.pdf · fachhochschule...

87
Fachhochschule Wiesbaden - University of Applied Sciences - Systemprogrammierung .NET Architektur und C# (C-Sharp) Vorgetragen von Fadime Cosar und Ecevit Koç

Upload: hadien

Post on 14-Oct-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

Fachhochschule Wiesbaden- University of Applied Sciences - Systemprogrammierung

.NET Architektur undC# (C-Sharp)

Vorgetragen von

Fadime Cosar und Ecevit Koç

Fachhochschule Wiesbaden- University of Applied Sciences -

Inhalt Was ist .NET ? Architektur

Architekturübersicht Compiler und Sprachen Common Language Runtime (CLR) Unterstützte Sprachen Klassenbibliotheken („Framework“)

C# Beispiele in C# Weitere Informationen

Fachhochschule Wiesbaden- University of Applied Sciences -1. Was ist .NET?

.NET ist eine von Microsoft entwickelte Softwareplattform. Diese umfasst eine Laufzeitumgebung, eine Sammlung von Klassenbibliotheken (API) und angeschlossene Dienstprogramme (Services). Die Plattform ist die Umsetzung des Common-Language-Infrastructure-Standards für Microsoft Windows.

Fachhochschule Wiesbaden- University of Applied Sciences -1. Wo kann man Dot Net begegnen

- Internetbrowser (asp.net)

- Handy-Browser (WAP, IMODE, ...)

- Windowsprogramme (ab Windows 98)

- PDA-Programme (PocketPC2002, Windows CE)

- Elektronischer Geschäftsdatenaustausch („Webservice“)

- MS Office Erweiterungen (ab Office 2003)

Fachhochschule Wiesbaden- University of Applied Sciences -1. Dot Net besteht aus

Technisch gesehen ist Dot Net eine Java ähnliche Erweiterung für Betriebssysteme von Microsoft

Die Erweiterung besteht aus:

- Einer Ausführungseinheit für Dot Net Programme- Einer umfangreichen Klassenbibliothek- Sowie Konfigurations- und Programmentwicklungswerkzeugen

Fachhochschule Wiesbaden- University of Applied Sciences -

1. Dot Net ARCHITEKTUR I

VB – Quellcode C# - Quellcode Java – Quellcode

VB – Compiler C# - Compiler Java – Compiler

Assembly Klassenbibliothek („Framework“)

Ausführungsmodul („CLR“)

CIL Interpreter

Betriebssystem

Fachhochschule Wiesbaden- University of Applied Sciences -

1. Dot Net ARCHITEKTUR II- Es gibt verschiedene Dot Net Sprachen (C#,C++, VB)- Alle Compiler für Dot Net erzeugen Zwischencode

(„CIL“) - Compilierte Module werden zu Assemblies

zusammengefasst (EXE oder DLL- Datei)- Die Dot Net Laufzeitumgebung („CLR“) enthält u.a.

einen Interpreter für CIL, er führt Assemblies aus- Die Klassenbibliothek („Dot Net Framework“) enthält

u.a. Klassen für Zeichenketten, Dateien, Grafische Benutzeroberflächen,…..

Fachhochschule Wiesbaden- University of Applied Sciences -

1. Common Language RuntimeDie CLR ist das Ausführungsmodul von Dot Net. Zu seinen Aufgaben gehören u.a.- Interpreter

* Konvertierung von Zwischensprachen (CIL) in Computersprache

- Codeverwaltung (Laden und Ausführen)- Erzwingung von Code Sicherheit- Überprüfung von Typsicherheit- Fehlerbehandlung (Exceptions)- Speicherverwaltung (Garbage Collection)- Nebenläufigkeiten (Threadunterstützung)

Fachhochschule Wiesbaden- University of Applied Sciences -2. Unterstützte Sprachen

C# (C Sharp)- Von Microsoft erfundene Programmiersprache- Syntax und Semantik ähnlich wie Java oder C++- Durchgehend objektorientiert- Standardisiert nach European Computer Manufacturers

Association (ECMA)- Einfach zu programmieren wie Visual Basic (VB),

Delphi,…. - Entwicklungssprache der Klassenbibliothek class MyApp {

public static void Main() { System.Console.WriteLine("Hello, C#!");

} }.

Fachhochschule Wiesbaden- University of Applied Sciences -

2. Weitere unterstützte Sprachen

VB (Visual Studio)* Syntax ähnlich wie VB6 * Unterstützt Code- Vererbung* Bestandteile des Office2003 SDK (Software Development Kit)

J#.net („Jay Sharp“)* ist Microsoft Version von Java* basierend auf Java 1.1* keine alternative zu Java

J-Script.net* JavaScript für Dot Net* Implementiert nach ECMA

Fachhochschule Wiesbaden- University of Applied Sciences -3. Umfang der

Klassenbibliothek

Die Framework Class Library (FCL) umfasst einige Tausend Klassen, die in so genannte Namensräume (Namespaces) unterteilt sind. Die Klassen erfüllen Aufgaben wie zum Beispiel das Formatieren von Text, das Verschicken von E-Mails, aber auch das Generieren von Code. Die Unterteilung in Namensräume dient dazu, die große Menge an Informationen übersichtlicher zu gestalten.

- umfassende OO-Klassenbibliothek (Kollektionen, Threads, Reflection, XMLVerarbeitung, Windows Forms, Web Forms, ADO.NET, ASP.NET)

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

2. Klassen, Objekte, Interface

3. Dateien und Verzeichnisse

4. Collections und Generics (Listen)

5. Multithreading

6. Oberflächenprogrammierung

7. Client-Server-Programmierung

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Unterscheidung im Verhalten von A und B:Bei (A) muss Platz auf dem Heap reserviert werden. Die Speicherreservierung erfolgt mittels Konstruktoraufrufs und mit new. Bei (B) ist die Konstruktorverwendung optional bei (A) Pflicht!

2 Kategorien von Datentypen: -(A) Referenztypen (Verweistypen): Objekte (Objektdaten) werden in einem speziellen Speicherbereich (Heap) abgelegt und über eine Speicheradresse referenziert. (Heap = dynamischer Speicher (Anordnung entspricht verzweigtem Baum))-(B) Werttypen: Objekte werden auf dem Speicherbereich (Stack) abgelegt (Stack = Kellerspeicher, Stapelspeicher, LIFO-Speicher) Bsp-Initialisierung: int k = new int(); oder int k =0;

Das .NET-Framework ist vollständig objektorientiert <Vererbungskette>:-Datentypen sind direkt/indirekt vom Basisdatentyp System.Object abgeleitet- Object = Basisklasse von .NET Framework

C#-Typsystem

WertTypen ReferenzTypen ZeigerTypen

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Zuordnung Datentypen: Übersicht (Wurzel=Typ Object)

WertTypen (15)

ReferenzTypen

Einfache integrierte DatenTypen: (13) Wertebereiche:=WB (1byte=8bit)( 8-Bit Groesse): bool, byte, sbyte; WB( true/false, 0..255,-128..127) (16-Bit Groesse): char, short, ushort; WB(unicode-Zeichen, -215..(215)-1, 0..(216-1)(32-Bit Groesse): float, int, uint; .NET-Typ(System.Single, System.Int32,..UInt32)(64-Bit Groesse): double, long, ulong; .NET-Typ(System.Double, System.Int64,..)(128-Bit Groesse): decimal; .NET-Typ(System.Decimal)Aufteilung der Bits in WB und Genauigkeit (G) z.B. decimal G=28 oder 29 Stellen

Enum

Struct Klassen

Interface

Object

Delegates

stringBenutzerdefinierbare Typen

ZeigerTypen

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Zeiger (Pointer): (sind als unsafe = unsicherer Code zu kennzeichnen) - Deklaration eines Zeigers: Datentyp * Pointername;- unsafe dient zum Erzeugen von unsicherem Code, der nicht von der Laufzeitumgebung kontrolliert wird und auf den auch die Garbage Collection keine Einwirkung hat.- darf nur auf elementare Datentypen und Strukturen angewendet werden (elementare Datentypen := 13 integrierte Datentypen)- Adressoperator: Pointername = &Variablenname;- Garbage Collection(GC) räumt automatisch nicht mehr referenzierte Objekte aus dem Speicher: da Zeiger nicht unter der Kontrolle der CLR laufen, würde daraus folgen, dass der Zeiger auf ein falsches Objekt zeigt, wenn der Zeiger noch auf dessen Elementen steht.

Abhilfe: mittels fixed-Modifikator wird die automatische Reinigung aufgehobend.h., die Adresse der Objektvariablen wird dem Zeiger unter Verwendung von fixed zugewiesen, damit das Objekt nicht erfasst werden kann von der GCfixed(Datentyp *Pointername = &Objektelement){..Anweisungen..}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, SchleifenSchlüsselwörter / Modifizierer (83):

abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern, false, finally, fixed, float, for, foreach, get, goto, if, implicit, in, int, interface, internal, is , lock, long, namespace, new, null, object, operator, out, override, params, partial, private, protected, public, readonly, ref, return, sbyte, sealed, set, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort, using, value, virtual, volatile, void, where, while, yield <Kontextschlüssel> (+7 in C#3.0)Nicht erlaubte Bezeichner: Schlüsselwörter, Ziffer als erstes Zeichen

Beispiele:int double =33;int 1x = 33; Erlaubte Bezeichner: @Schlüsselwörter, _Ziffer als zweites Zeichen

Beispiele:int @double =33;int _1x = 33;

Beispiele:int BuchstabenZahl =33;int _1x = 33;

Bezeichner := Name von Variablen, Operationen, Klassen,..

weitere: int @ =33; int @1x = 33; int _@ = 33;

Beispiele:int @BuchstabenZahl =33;int _@ = 33; int _ = 33;

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Kommentare: - //einzeiliger Kommentar - /* mehrzeilliger Kommentar*/ - /// <tag>

/// Dokumentationskommentar im XML-Stil /// </tag>

Konstanten: <Mit #define können keine MAKROS definiert werden>anstelle von #define MAX 10 kann in C# geschrieben werden : const int MAX = 10;allgemein: const Datentyp Bezeichner = Wert;

Ausgabe:System.Console.WriteLine(“Ausgabe“);Eingabe:Int32.Parse(Console.ReadLine()); //IntegerConsole.ReadLine(); //StringAusgabe VariablenWerte:int a= 22;Console.WriteLine(“a: {0}“,a); oder Console.WriteLine(“a: “+a);

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

impliziert typisierte Variablen (Implizierte Typdeklaration) var x = 3; //entspricht int x=3;var aa = “eins"; //entspricht string aa=eins;

Neu in C# 3.0: var (implizite Typdeklaration)jetzt 2 Varianten von Variablendeklaration - implizit und explizit typisierte Typdeklaration- beides nutzbar- bei implizit erfolgt die Zuordnung automatisch mittels var- bei explizit wie gehabt

Bisher: explizit typisierte Variablenint x=3;string aa = “eins";

Einschränkungen: (var-Verwendung)- es muss eine lokale Variable sein;- Initialisierung muss bei der Deklaration erfolgen, sprich zur Compile-Zeit feststehen - Typ darf kein null-Typ sein

Nicht möglich:var x = new int[] {1, 2, 3}; x = "Hallo"; var x;var z=null;

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Typumwandlung/Konvertierung:

Boxing (geschachtelt): (implizite Form der Konvertierung)Eine Variable eines Werttyps wird in ein Object konvertiert,d.h. der Wert wird in ein Objekt verpackt, d.h. er wird vom Stack entnommen, dann auf den Heap abgelegt und die Referenz darauf gespeichert.

Unboxing (nicht geschachtelt): Eine Variable des Objekttyps wird in einen Werttyp konvertiert

Beispiel: (object = alias in C# zu Object (.NET))int i=100;

//Boxingobject o = i;

//Unboxing <eingepackte int Wert wird wieder ausgepackt>int i = (int)o; //explizite Rückwandlung über ein Casting

//doppeltes Casting, erst Unboxing, dann Konvertierungbyte b = (byte)(int)o;

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Typumwandlung/Konvertierung:

1.) Implizite Typkonvertierung: (sind vordefiniert) (C#Compiler tut dies selbst!) in Pfeilrichtung! (d.h. byte->short->int.. Konvertiert!)

Typkonvertierung von bool in andere Datentypen nicht möglich!

char

bool

string

object

byte

int

uint

short

ushort

long

float

double

decimal

ulong

<Implizit numerische Konvertireung>

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Typumwandlung/Konvertierung:

2.) Explizite Typkonvertierung: (Anwendung: Wenn implizit nicht geht!)

Beispiel1: byte x=10, y=20;byte a=x+y; //Falsch Error wegen (Umwandlung int in byte)byte a= (byte)(x+y); //OK -explizite Konvertierung!

Implizite Typumwandlung nicht möglich!

Beispiel2: byte x=1.0; //Falsch Error wegen (Umwandlung double in byte)byte x= (byte)3.0; //OK -explizite Konvertierung! char x = (char)65; oder int i = (int)‘A‘; …

Typumwandlung: Voraussetzung: WB Quelle <= WB Ziel; double->int auch OK- von Datentyp in string erfolgt mit ToString()-Methode- aus einem string einen Wertetyp zu machen erfolgt mit: -> der Methode Parse() oder der Klasse Convert: Beispiel: int i = System.Int32.Parse(str); oder int i = Convert.ToInt32(str);Klasse Convert hat Methoden, welche jeden Basisdatentyp des .NET Frameworks in einen anderen Basisdatentyp konvertiert.

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Typumwandlung/Konvertierung:

2.) Explizite Typkonvertierung (Fortsetzung):

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, SchleifenFelder/Arrays: eindimensionale, mehrdimensionale und irreguläre Felder

Eindimensionale: Deklaration und Initialisierung Datentyp[] Name = new Datentyp [Größe]; oder ohne GrößeDatentyp[] Name = {Wert1, Wert2,…, WertN}; z.B.: char[] x = {‘c‘,‘h‘,‘a‘,‘r‘};//char[]x=new char[4]{..}

Mehrdimensionale: Angabe der Dimension erfolgt durch Komma-Anzahl in [ ]Datentyp[,] Name = new Datentyp [Größe1,Größe2]; //2-D Datentyp[,…,] Name = new Datentyp [Gr1,Gr2,…,GrN]; //N-D Datentyp[,] Name = {{2D-ele},1D-Ele}; //2Dz.B.: int[,,]Name={{{3,4,3},{3,4,3},{3,2,8}}}; //3D= [3,3,1]Wichtig! In allen {..} muss gleich Anzahl Elemente sein! Anzahl {} beliebig!Falsch: int[,,]Name={{{3,4,3,8},{3,4,3},{3,2,8}}};

Irreguläre Felder(Verzweigte Arr) = jagged Arr: Deklaration und Initialisierung Datentyp[][] Name = new Datentyp [Größe][]; z.B.: int[][] x = new int[3][]; //3zeiliges IrrFeldx[0] = new int[4]; x[1] = new int[2]; x[2] = new int[6]; for(int i=0; i<x[0].Length;i++) x[0][i]=i+1; //x[1][i]=i+1+x[0][3]; x[2][i]=i+1+x[1][1]

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Operatoren:

Logische Operatoren: &&, &, ||, |, ^ = (XOR), ! = NOT (Negation)

Arithmetische Operatoren: +, -, *, /, % , ++,--

Vergleichs-Operatoren: ==, !=, >, <, >= , <= //Rückgabe true/false

Bitweise Operatoren: ~(invertiert), |(OR), &(AND), << (links), >>(re)

Zuweisungs-Operatoren: =, +=, -=, *=, /= , %=, &=, |=, ^= , <<= , >>=

Stringverkettung mit +: string a=“str“; string b =“ing“; string c = a+b; //string

Sonstige Operatoren: . Punktoperator //Zugriff auf die Eigenschaften oder Methoden einer Klasse[] //Arrays ; ():Typkonvertierung, Operationsreihenfolge; new: Instanziierung einer Klasse; …u.a.

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Verzweigungen:

switch(Ausdruck){

case wert1: Anweisungen; Sprunganweisung; .. default: Anweisungen; Sprunganweisung;

}Sprunganweisungen: break, return, goto

(2) switch-Anweisung

(1) if/else-Anweisung:

if(Bedingung) {Anweisungen} else if(Bedingung) {Anweisungen} ...else {Anweisungen}

if(Bedingung) {Anweisungen}

if(Bedingung) {Anweisungen} else {Anweisungen}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Verzweigungen: (Fortsetzung)

< Variable > = < Bedingung > ? < Wert1> : <Wert2>;

(3) Bedingte Zuweisung: (Ternärer Operator)

goto Label;……Label: return true;

(4) goto-Anweisung

Sprung in eine Schleife ist nicht erlaubt, aber Sprung aus einer Schleife schon.

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Schleifen:

(1) for-Schleife:

for(<Initial>;<Bedingung>;<Inkrement>) {Anweisungen}

for(;<Bedingung>;) {Anweisungen; <Inkrement>;}

for(;;) {Anweisungen; <Inkrement>; … break;}

(2) while-Schleife:

while(<Bedingung>) {Anweisungen}

(3) do-while-Schleife:

do{Anweisungen}while(<Bedingung>);

(4) foreach-Schleife: (durchläuft alle Elemente einer Liste oder Array)

foreach([<Datentyp>]<Variable> in <Liste>){Anweisungen}

z.B.: foreach(string s in values){Console.Writeline(s);}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

1. Datentypen, Operatoren, Schleifen

Programmbeispiel: Summenrechnung

Zahl einlesen:

Runden um 3-Stellen nach Komma:

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interface

Generelle Aufbaustruktur eines C#-Programms:using System;using System.Collections.Generic;using System.Text;namespace CSharpTraining{ class Program { static void Main(string[] args) { //Anweisungen, Befehle, Ausgaben, .. } }}

!(ausserhalb einer Klasse):-> Funktionen/Methoden;-> Variablendefinition z.B. int k;

//Namespace-einbindung mittels “using“-> alle Klassen zur Verfügung

(ausserhalb einer Klasse):-> enum-Aufzählungstyp; delegate-> struct, interface

d.h. keine globalen Methoden und Variablen zugelassen

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interface

Zugriffsmöglichkeiten/Sichtbarkeit: - private: privat, die Elemente sind nur in der eigenen Klasse sichtbar

- protected: geschützt, Elementenzugriff mit Methoden der eigenen Klasse oder der vererbten Klasse.

- public: öffentlich, Zugriff von allen Klassen auf die Elemente möglich

- internal: intern, Zugriff auf Elemente nur Operationen, die zur Assembly gehören.

- protected internal: geschützt oder intern, Zugriff durch Operationen: -> der eigenen Klasse oder -> der abgeleiteten Klasse oder -> der gleichen Assemblys

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interfacestruct:- können auch Konstruktoren, Konstanten, Felder, Methoden, Eigenschaften, Indexer, Operatoren, Ereignisse und geschachtelte Typen enthalten (alternativ: Klasse)- ist ein Werttyp, wird i.d.R. verwendet um kleine Gruppen von zusammengehörigen Variablen einzukapseln, z.B. Buchmerkmale public struct Buch { public decimal preis; public string titel; public string autor; }- können nicht von anderen Strukturen erben => Strukturmember als protected deklarieren nicht möglich!- können ohne Initialisierung durch new verwendet werden

[Attribute] [Zugriff] struct Name[:Interface] {struct-Elemente}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interfaceenum:- wird zum Deklarieren einer Enumeration verwendet- ist ein eigener Typ, besteht aus einer Gruppe benannter Konstanten =

Enumeratorliste;- char nicht möglich, standard int;- der erste Enumerator hat Standard den Wert 0, der zweite 1, …- Beispiel: enum Tage{Sam, Son, Mon, Die, Mitt, Don, Frei}; //Sam=0,..oder enum Tage{Sam=1, Son, Mon, Die, Mitt, Don, Frei}; //1..7

- Enumeratorname darf keine Leerzeichen enthalten!- Beispiel Typkonvertierung: int x = (int) Tage.Frei; //explizite Typkonvertierung von enum-Typ in einen ganzzahligen Typ int Console.WriteLine(“Freitag = {0}", x); //Ausgabe: Freitag=7[Attribute] [Modifier] enum Bezeichner[:Datentyp] {enum-Liste}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interfacedelegate:- ist ein Typ, der auf eine Methode verweist. (ähnlich Funktionszeiger wie in C/C++ )- wie normale Methodensignatur mit Schlüsselwort delegate;- Deklaration ähnelt einer Methodendeklaration aber es ist eine Klasse! D.h. intern wird eine Klasse erstellt, die den gleichen Namen trägt. => kann daher auch ausserhalb einer Klasse deklariert werden.- Kann als Bestandteil eines Namespaces deklariert werden, eine Methode dagegen aber nicht!- können miteinander verkettet werden

[Zugriff] delegate Rückgabetyp Name (Parameterliste);

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, InterfaceProperties (Eigenschaften):- sind Member, zum Lesen, Schreiben oder Berechnen von Werten privater Felder;- mit set{} wird ein neuer Wert zugewiesen, - mit get{} wird der Eigenschaftswert zurückgegeben- mittels value-Schlüssels wird der Wert definiert, der von set zugewiesen wird;- Properties, ohne set-Methode sind schreibgeschützt

[Zugriff] Datentyp Name{ get{Anweisungen} set{Anweisungen}}

Aufruf- z.B.:Klasse tt = new Klasse();tt.a = 33.7;

private double radius;

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, InterfaceIndexer:- spezielle Eigenschaft, innerhalb einer Klasse nur einmal- Verwendung ausschließlich für Listen, um auf Elemente zu greifen

Elementtyp this [int index] { get{Accessorcode} set{Accessorcode}};

Beispiel: //erzeugen eines Indexers

private int [] Code = new int [3];

public int this [int index] { get{return Code[index];} set{Code[index]=value;}};

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, InterfaceKlassen und Interface-Standard-Klassen: wie in Java, nur Einfachvererbung, -Abstrakte Klassen (abstract = rein virtuell): Vererbung und Ableitung-Versiegelte Klassen (sealed): schützt vor Vererbung und Ableitungd.h. Gegenteil von Abstrakter Klasse; public sealed class A {} dürfen keine abstrakte, virtuelle Methoden haben; (z.B. String-Klasse in C# ist eine sealed-Klasse)-Statische Klassen (static): Klasse nicht instanziierbar und alle Member static-Partial-Klassen (partial): Aufteilung einer Klasse in mehrere Dateien Anwendung z.B. bei Formularen: in Form1.cs und Form1.Designer.cs-Verschachtelte Klassen(Nested Classes): innerhalb einer Klasse befindet sich eine weitere Klasse-Interface (Schnittstellen) (interface): Mehrfachvererbung mit mehreren Schnittstellen möglich! Unterklasse: class D :IEins,IZwei {…}enthält abstrakte Methoden und Eigenschaften, die nicht implementiert sind; diese werden den Klassen zur Verfügung gestellt, welche sie implementieren public interface IMuster {double a(); double a{get; set;}}

Neu in C#3.0 partielle Methoden: - darf nur in der partial-Klasse existieren;- Signatur in der einen Datei und die Implementierung in der anderen Datei.

Partial class A {void s(string t);}Partial class A {void s(string t){..}}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, InterfaceVererbung- Keine Mehrfachvererbung d.h. Klasse besitzt nur eine Oberklasse

Mehrfachvererbung Einfachvererbung

A

B C

Generalisierung

Spezialisierung

Class B : A{ …}

gleiche Methoden in Ober/Basis- und Unterklasse:- Oberklasse: public string gibAus(){..}- Unterklasse: new public string gibAus(){..}

Konstruktoraufruf der Oberklasse - Unterklasse: UnterklasseKonstruktor(Parameterliste): base(zugehörige Parameterliste) {…}

public Kreis(double x, double y, string farbe, double radiu) : base(x, y, farbe) /*Aufruf des konstruktors der Oberklasse*/ {this.radius = radiu;}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, InterfaceAbstrakte Klasse als Oberklasse:- hiervon können keine konkreten Exemplare erzeugt werden- Klassen B und C sind konkrete Klassen- Definition: public abstract class A{..}

Abstrakte Methoden:- sind implizit virtual und müssen überschrieben werden mit override- alle Unterklassen müssen diese implementieren, keine Implementierung in der Oberklasse, nur Deklaration.- Oberklasse: public abstract void methode();- Unterklasse: public override void methode(){...}

Virtuelle Methoden:- müssen überschrieben werden mit override in der Unterklasse- alle Unterklassen müssen diese implementieren, keine Implementierung in der Oberklasse, nur Deklaration.- Oberklasse: public virtual void methode(){..}- Unterklasse: public override void methode(){...}

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interface

1.Programmbeispiel: Abstrakte Klasse : GeometrischeKörper

Fachhochschule Wiesbaden- University of Applied Sciences -C#

2. Klassen, Objekte, Interface

2.Programmbeispiel: Interface : GeometrischeKörper

Schnittstellen: Implementiert beide:Implementiert nur IGeometrie:

HauptklasseNormale Klasse

Fachhochschule Wiesbaden- University of Applied Sciences -C#

Namespace System.IO

3. Dateien und Verzeichnisse

Einführung mit Anwendung

//Existiert Ordner?

//erstelle Verzeichnis

//lösche Verzeichnis (nur leere)

//lösche Verzeichnis (alle)

//Verzeichnis umbenennen

z.B. Directory.Move(alt, neu);

//Verzeichnis verschieben

z.B. Directory.Move(ordner, @pfad + @"\" + ordner);

//Das Arbeitsverzeichnis

Zugriff: Directory.ABC

Fachhochschule Wiesbaden- University of Applied Sciences -C#

3. Dateien und VerzeichnisseNamespace System.IO

Einführung mit Anwendung

//Das aktuelle Verzeichnis

DirectoryInfo info = new DirectoryInfo(ordner);

info.Name //Verzeichnisnameinfo.FullName //Verzeichnisname mit Pfadinfo.Parent //Namen des übergeordneten Verzeichnissesinfo.Root //Verzeichnis-Ortinfo.Attributes //Verzeichnisattributinfo.CreationTime.ToShortDateString() //Erstellungs-Zeitinfo.LastAccessTime.ToShortDateString() //Letzter Zugriffinfo.LastWriteTime.ToShortDateString() //Letzter Schreibzugriff

//abstract

Fachhochschule Wiesbaden- University of Applied Sciences -C#

Namespace System.IO

3. Dateien und Verzeichnisse

Einführung mit Anwendung

//Existiert Ordner?

//lösche File

Zugriff: File.ABC

//Kopiere File

//File umbenennen

z.B. File.Move(alt, neu);

//File verschieben (@ sehr wichtig!)

z.B. File.Move(datei, @pfad + @"\" + datei);

Fachhochschule Wiesbaden- University of Applied Sciences -C#

3. Dateien und VerzeichnisseNamespace System.IO

Einführung mit Anwendung

info.Name //Filenameinfo.FullName //Filename mit Pfad

info.Length //Filegroesseinfo.Attributes //Dateiattribut

info.CreationTime.ToShortDateString() //Erstellungs-Zeitinfo.LastAccessTime.ToShortDateString() //Letzter Zugriff

info.LastWriteTime.ToShortDateString() //Letzter Schreibzugriff

//abstract

FileInfo info = new FileInfo(datei);

Fachhochschule Wiesbaden- University of Applied Sciences -C#

Namespace System.IO

3. Dateien und VerzeichnisseEinführung mit Anwendung

/*kopiere File byteweise in umgekehrter Richtung (lseek)*/ public void kopiereFileVerkehrt(string quelle, string ziel){ ….//überprüfe zuerst ob File existiert? long position; int nread; FileStream fquelle = File.Open(quelle, FileMode.Open); FileStream fziel = File.Open(ziel, FileMode.OpenOrCreate); byte[] puffer = new byte[1]; position = fquelle.Seek(-1, SeekOrigin.End ); do { fquelle.Seek(position, 0); if ( (nread = fquelle.Read(puffer, 0, puffer.Length))

== puffer.Length) fziel.Write(puffer, 0, nread); position--; } while (position >=0 && nread == 1); fquelle.Close(); fziel.Close();}

public void gibCat(string datei){ ….//überprüfe zuerst ob File existiert? StreamReader sr = new StreamReader(datei); while(sr.Peek() != -1) Console.WriteLine(sr.ReadLine()); sr.Close();}

Programm

Fachhochschule Wiesbaden- University of Applied Sciences -C#

3. Dateien und Verzeichnisse

•Namespace System.IO

•Übersicht wichtiger Klassen:

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -C#

3. Dateien und Verzeichnisse

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -C#

4. Collections und Generics (Listen)

•Collections = Listen, zur Organisation von Daten

•Namensraum: using System.Collections; bzw. using System.Collections.Generic;

Aufnahme Objekte jeder Art, wahlfreier Zugriff möglich

entspricht FIFO-Speicher

(1)

(1)

(2)

(2)

entspricht LIFO-Speicher (stapel)(3)

(3)

Kombination Array+Hashtable (sortiert nach Schlüssel);Zugriff über Schlüssel oder Index

(4)

(4)

Speichert ein Array aus Bitwerten. Dargestellt als boolesche Werte.

(5)

(5)

Speichert Schlüssel-/Wertepaare;Zugriff über einen Index nicht möglich! (aus Implementierungsgründen)

(6)

(6)

Übersicht: Listenklassen (Collection)

Fachhochschule Wiesbaden- University of Applied Sciences -C#

4. Collections und Generics (Listen)

Übersicht: Listenklassen (Generics)

Ersatz für Hashtabel, eine generische Schlüssel-/Wert Liste

Ersatz für Arrayliste, generische Standardliste

(1)

(2)

Eine generische doppelt verkettete Liste

(3)

Eine generische Queue(4)

Ein generisches Dictionary, sortiert nach dem Key (5)

Eine generische Schlüssel-/Wert Liste, sortiert nach dem Key (6)

(1) (2) (3) (4)

(5) (6) (7)

Ein generischer Stack (7)

(5) benötigt mehr Speicher als (6)(6) ist schneller gefüllt, wenn vorsortiert alle Elemente eingefügt werden

(5) Ist schneller beim Einfügen und Entnehmen, wenn Werte unsortiert sind

Fachhochschule Wiesbaden- University of Applied Sciences -C#

4. Collections und Generics (Listen)

Vergleich: (Collection - Generic) Stack

Fachhochschule Wiesbaden- University of Applied Sciences -C#

4. Collections und Generics (Listen)

//true (weil letztes Element!)

//true (letztes Ele)

8 <..: 2>13 <..: 2>

Beispiel-Vergleich: (Collection - Generic) Stack

Fachhochschule Wiesbaden- University of Applied Sciences -C#

4. Collections und Generics (Listen)

Beispiel: Priority Queue

2.)3.)

4.)7.)

tm = new SortedList<string, string>(); 1.)5.)

foreach (string str in tm.Keys) { System.Console.WriteLine(str+ "->"+tm[str].ToString());}

8.)

PQueue instanz = new PQueue();

Fachhochschule Wiesbaden- University of Applied Sciences -C#

5. Multithreading- Namespace System.Threading - darin die Thread-Klasse Thread- Der Konstruktor erwartet einen Delegate, der die Startmethode für den

Thread definiert. (Delegatetyp: Threadstart ist parameterlos und ohne Rückgabewert)

- Multithreading: mehrere Threads innerhalb eines Programms, teilen sich einen gemeinsamen Adressraum (z.B. Garbage-Collection)

- Erzeugen und Starten eines Threads:

//Erzeuge Thread thread_AThread thread_A = new Thread( new ThreadStart(Methode)); //Starte Thread thread_A.Start();

Methoden-Signatur muss leer sein!

public void gibAus() { …}

ThreadStart de = new ThreadStart(gibAus); // DelegateThread thread_A = new Thread(de); // neuer Threadthread_A.Start(); // Thread starten

1.

2.

Fachhochschule Wiesbaden- University of Applied Sciences -C#

5. Multithreading- Ein Thread wird automatisch beendet, wenn das Ende der Thread-

Methode erreicht ist.- Abort()-Methode initiiert das Beenden des Threads,

es wird eine ThreadAbortException ausgelöst, die das Beenden des Threads bewirkt. Beenden eines Threads erfolgt nur mit der Join()-Methode.

- Sleep(..) aktiver Thread wird unterbrochen für eine bestimmte Zeit

thread_A.Abort(); thread_A.Join(); //warte auf Ende

Priority: gibt die Priorität des Threads an (default: Normal)

ThreadState: aktueller Threadzustand

thread_A.Name; thread_A.Priority;

Fachhochschule Wiesbaden- University of Applied Sciences -C#

5. Multithreading

- Steuerung nebenläufiger Threads zur Vermeidung von Deadlocks- Mechanismen zur Synchronisation:

Locks, Mutexe, Monitore, Semaphore,..

Synchronisation

Beispiele:

lock()

public void gibAus() { Monitor.Enter(this); …//krittischer Bereich Monitor.Exit(this);}

Monitor()

public void gibAus() { //Lock auf aktuelles Objekt lock(this) { … //krittischer Bereich }}

Mutex() public void gibAus() { Mutex mutex = new Mutex(false); mutex.WaitOne() //Sema: P …//krittischer Bereich mutex.Close() //Sema: V}

Mutex:

- Erbt von der abstrakten Klasse: WaitHandle

Fachhochschule Wiesbaden- University of Applied Sciences -C#

5. Multithreading

Synchronisation: Monitor//wartender Thread wird aufgeweckt

Monitor.Pulse(this); //aufwecken block.Threads

Monitor.Wait(); //blockieren/Monitor freigeben

Enter(..): sperrt das angegebene Objekt für den aktuellen Thread

Exit(): //hebt Sperre wieder auf

Pulse() //informiert nächsten Thread: Objekt blockiert, falls Zugriffswunsch, wird in Warteschlange gestelltSobald Sperre beendet, der erste Thread in Warteschlange bekommt den Zugriff

Wait(): hebt Blockierung auf und blockiert aktuellen Thread

public void gibAus() { Monitor.Enter(this); …//krittischer Bereich Monitor.Exit(this);}

Programm: Arzt,Patient,Zimmer

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Default Start

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Starten der leeren AnwendungAusgabe:

Teilklasse in der die Steuerung der Steuerelemente kommt: (eigener Code)

Zur Laufzeit festgelegte Ereignisse

Falls Elemente eingefügt und deren Eigenschaften manuell eingestellt werden, so werden diese hier automatisch registriert (aktualisiert!)

Ruft Methode in der anderen Teilklasse auf, enthält automatisch festgelegten Standardcode.

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Steuerelemente Eigenschaften werden automatisch hier eingefügt!

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Übersicht-Steuerelemente

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Beispiel: Adressenverwaltung

Speichern/Laden file

Speichern der Listbox-Inhalt, Schlüssel+Wertepaare

Fachhochschule Wiesbaden- University of Applied Sciences -C#

6. Oberflächenprogrammierung

Programm: Adressenverwaltung

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Socket-Anlegen: Client und Server

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

s.Bind(new IPEndPoint(IPAddress.Loopback, 3000));

Server: Socket mit Adresse Binden (Server legt seinen Port fest)

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

s.Listen(5);

Server: Warteschlange für Verbindung(Server legt Warteschlange an)

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

While(true){ Socket newSocket = s.Accept(); //blockiert, bis sich Client verbindet….

Server: Verbindung auswählen aus WS(Server ist empfangsbereit)

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

s.Connect(new IPEndPoint(IPAddress.Loopback, 3000));

Client: Verbindung herstellen

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close()

s.Send(zahl); //Client sendet

Client: Daten senden/Daten empfangen

Server: Daten empfangen/Daten senden

while (newSocket.Receive(zahl) > 0){ … A() }

A():= newSocket.Send(zahl); //Server sendet

s.Receive(zahl); //Client empfängt

byte[] zahl = new byte[3];

zahl[0] = byte.Parse(Console.ReadLine());

zahl[2] = (byte)(zahl[0] + zahl[1]);

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

TCP-STREAM

SERVER

Receive()

Send()

Socket()

Bind()

Listen()

Accept()

Shutdown/Close()

Client

Send()

Receive()

Socket()

Connect()

Close() s.Close();

Client/Server: Schließen der Sockets

newSocket.Shutdown(SocketShutdown.Both);newSocket.Close();} //Ende While(True)

Server

Client

s.Close();//Server ganz beenden

Programm: TCP-Mathe

Fachhochschule Wiesbaden- University of Applied Sciences -C#

7. Client Server Programmierung

Wichtige Namensräumeusing System.Net.Sockets;using System.Net;

SERVER

ReceiveFrom()

SendTo()

Socket()

Bind()

Close()

Client

SendTo()

ReceiveFrom()

Socket()

Bind()

Close()

UDP-Datagram

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel: Datentypen, Operatoren, SchleifenProgramm: Summenrechnung

Beispiel: Klassen, Objekte, InterfaceProgramm: Polymorphe Geometrische ObjekteProgramm: Geometrische Objekte (Interface)

Beispiel: Dateien und VerzeichnisseProgramm: Kopierprogramm

Beispiel: Collections und Generics (Listen) (Pro: P-Queue) Beispiel: Multithreading (Programm: Arzt-Patient-Zimmer) Beispiel: Oberflächenprogrammierung

Programm: AdressenlisteProgramm: Arzt-Patient-Zimmer-Simulation

Beispiel: Client Server ProgrammierungProgramm: TCP-Mathe

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Craute_Beispiele_Konsole.exe

Beispiel <Datentypen, Operatoren, Schleifen>

Weiter mit Klassen zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel <Klassen, Objekte, Interface>

Craute_Beispiele_Klassen.exe

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel <Klassen, Objekte, Interface>

Weiter mit Dateien+Verzeichnisse

Craute_Beispiele_Schnittstelle.exe

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Craute_Kopierprogramm.exe

Beispiel <Dateien und Verzeichnisse>

Weiter mit Collections, Generics zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel <Collections, Generics (Listen)>

Craute_Bsp_Collections.exe

Weiter mit Multithreading zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel <Multithreading>

Craute_Beispiele_ThreadsQueue.exe

Weiter mit Windowsprogrammierungzurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel <Oberflächenprogrammierung>

Craute_Beispiele_GUI_Adressbuch.exe

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Beispiel <Oberflächenprogrammierung>

Craute_Beispiele_GUI_THREADS.exe

Weiter mit Socketprogrammierung zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Beispiele in C#

Craute_Beispiel_TCP_Internet_Cli.exe

Beispiel <Client Server Programmierung>

Craute_Beispiel_TCP_Internet_Ser.exe

zurück

Fachhochschule Wiesbaden- University of Applied Sciences -Weitere Informationen

Internetquellen:http://www.microsoft.comhttp://www.microsoft.com/downloads/Search.aspx?displaylang=dehttp://msdn2.microsoft.com/de-de/library/ms123401(MSDN.10).aspxhttp://msdn2.microsoft.com/de-de/library/kx37x362(VS.80).aspxhttp://www.asp.net/downloads/essential/http://www.asp.net/downloads/http://www.mono-project.com/Downloadshttp://www.go-mono.com/docs/http://www.go-mono.comhttp://www.galileocomputing.de/openbook/visual_csharp/index.htm

Literaturquellen:s

[Kru03] KRUGLINSKI, DAVID: Inside Visual C++ .NET, Microsoft Press, http://www.microsoft.com/germany/mspress[Ell06] ELLER, FRANK: Visual C# 2005, Addison-Wesley, http://www.addison-wesley.de[Zep04] ZEPPENFELD, KLAUS: Objektorientierte Programmiersprachen, Spektrum, http://www.spektrum-verlag.de

Fachhochschule Wiesbaden- University of Applied Sciences -Weitere Informationen

Software, Installation

Andere-Plattform: http://www.mono-project.com/Downloads

Fachhochschule Wiesbaden- University of Applied Sciences -Weitere Informationen

Software, InstallationAndere-Plattform: http://www.mono-project.com/Downloads

Fachhochschule Wiesbaden- University of Applied Sciences -Noch Fragen?

ENDE!

Beenden start