net architektur und c# (c-sharp) - cs.hs-rm.deweber/sysprog/proj07/dotnet-cs.pdf · fachhochschule...
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#
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
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
Windows-Plattform:
Software, Installation
http://www.asp.net/downloads/essential/
wichtig:Zuerst
Framework installieren und dann
SDKinstallieren!
http://www.microsoft.com/downloads/Search.aspx?displaylang=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