1 Softwareentwicklung mit.NET Teil 2 Einführung in C# Dr. Ralph Zeller.

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005.
Kapselung , toString , equals , Java API
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung XML XML Einführung Andreas Leicht.
Programmieren mit JAVA
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
C# Einheitliches Typsystem
Die .NET Common Language Runtime
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Informatik 1 Letzte Übung.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Dynamische Datentypen
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Starten der Entwicklungsumgebung (IDE)
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Besprechung der Hausaufgabe
Microsoft Student Partner
Objektorientierte (OO) Programmierung
Java Programme nur ein bisschen objektorientiert.
Objektorientierte Programmierung mit JAVA. © Klasse Wie in C++ ist die Klasse das primäre Mittel um ein Entity abzubilden Die Eigenschaften.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Konstruktoren.
OOP II.
Grundkurs Informatik 11-13
«Delegierter» Methoden Schablone Funktionszeiger
Definition Felder Konstruktor Methoden Beispiel
Implementieren von Klassen
 Präsentation transkript:

1 Softwareentwicklung mit.NET Teil 2 Einführung in C# Dr. Ralph Zeller

2 Einleitung  Viele Entwickler wünschen sich eine Programmiersprache, die so einfach ist wie Visual Basic und so mächtig und flexibel wie C++  C# ist die beste Wahl für das.NET Framework  Ideal für.NET Applikationen Web Services...

3 C# Designziele  Erste C/C++ ähnliche komponenten- orientierte Sprache  Garbage Collection Keine Speicherlecks oder „wilde Pointer“  Exceptions Error Handling von Anfang an bedacht  Typsicherheit Keine uninitialisierten Variablen Keine unsichere Casts

4 C# Programmstruktur  Namespaces Enthalten Typdefinitionen und Namespaces  Typdefinitionen Klassen, Strukturen, Interfaces,...  Elemente von Typen Konstanten, Felder, Methoden, Properties, Indexer, Events, Operatoren, Konstruktoren, Destruktoren  Organisation der Dateien Keine Header-Dateien, Programmcode ist “in-line” Die Reihenfolge der Deklarationen ist ohne Bedeutung

5 C# Program Struktur using System; namespace System.Collections { public class Stack { Entry top; public void Push(object data) { top = new Entry(top, data); } public object Pop() { if (top == null) throw new InvalidOperationException(); object result = top.data; top = top.next; return result; } using System; namespace System.Collections { public class Stack { Entry top; public void Push(object data) { top = new Entry(top, data); } public object Pop() { if (top == null) throw new InvalidOperationException(); object result = top.data; top = top.next; return result; }

6 Statements und Expr.  If, while, do benötigen eine boolsche Bedingung  Mit goto kann nicht in Blöcke gesprungen werden  Switch Statement Kein “fall-through“ im Switch Statement “break”, “goto case” or “goto default” notwendig  Checked und unchecked Statement  Ausdrücke müssen etwas tun if (value)//Fehler WriteLine(“true”); if (value)//Fehler WriteLine(“true”); if (value == 0) //ok WriteLine(“true”); if (value == 0) //ok WriteLine(“true”);

7 Foreach Statement  Iteration von Arrays  Iteration von selbstdefinierten Collections public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); } public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); } foreach (Customer c in customers.OrderBy("name")) { if (c.Orders.Count != 0) {... } foreach (Customer c in customers.OrderBy("name")) { if (c.Orders.Count != 0) {... }

8 Zwei Arten von Typen Value (struct) Reference (class) Variable enthält WertReferenz Speicher StackHeap Initialisiert mit Alles 0Konstante: null Zuweisung kopiert Wertkopiert Referenz 123 j t 123 i s "Hello world" int i = 123; string s = "Hello world"; int i = 123; string s = "Hello world"; int j = i; string t = s; int j = i; string t = s;

9 Boxing und Unboxing  Jeder Datentyp kann als Objekt gespeichert oder übergeben werden 123 i o 123 System.Int32}“Boxing” 123 j}“Unboxing” int i = 123; object o = i; int j = (int)o; int i = 123; object o = i; int j = (int)o;

10 Selbst definierte Typen  Classes (reference) Wird für die meisten Objekte verwendet  Structs (value) Für Daten-Objekte (Point, Complex, etc.).  Interfaces

11 Classes and Structs sp cp CPoint class CPoint { int x, y;... } struct SPoint { int x, y;... } CPoint cp = new CPoint(10, 20); SPoint sp = new SPoint(10, 20); class CPoint { int x, y;... } struct SPoint { int x, y;... } CPoint cp = new CPoint(10, 20); SPoint sp = new SPoint(10, 20);

12 Klassen ( class )  Einfachvererbung (single inheritance)  Implementierung von beliebig vielen Interfaces  Elemente einer Klasse Konstanten, Felder, Methoden, Operatoren, Konstruktoren, Destruktoren Properties, Indexer, Events Verschachtelte Typen Statische Elemente ( static )  Zugriffsschutz public, protected, internal, private

13 Strukturen ( struct )  Sind immer “value types“  Ideal für “kleine” Objekte Keine Allokierung auf dem Heap Weniger Arbeit für den Garbage Collector Effizientere Speicherbenutzung Benutzer können “primitive” Typen selbst erzeugen Syntax und Semantik sehr eingängig Operator Overloading, Conversion Operators .NET Framework nutzt diese auch int, float, double, … sind alles structs

14 Interfaces  Enthalten Methoden, Properties, Indexer, und Events  Explizite Implementierung möglich Löst Interface Probleme bei Namenskollisionen Ausblenden der Implementierung vor dem Benutzer interface IDataBound { void Bind(IDataBinder binder); } class EditBox: Control, IDataBound { void IDataBound.Bind(IDataBinder binder) {...} } interface IDataBound { void Bind(IDataBinder binder); } class EditBox: Control, IDataBound { void IDataBound.Bind(IDataBinder binder) {...} }

15 Interfaces Beispiel 1: C# Interfaces

16 Vererbung  Methoden sind standardmäßig NICHT virtual  Eine Methode kann nur mit „override“ überschrieben werden class B { public virtual void foo() {} } class D : B { public override void foo() {} } class B { public virtual void foo() {} } class D : B { public override void foo() {} }

17 Vererbung  Methoden sind standardmäßig NICHT virtual  Überschreiben einer nicht-virtual Methode  Compilerfehler! Außer man verwendet „new“ class N : D { public new void foo() {} } N n = new N(); n.foo(); // call N’s foo ((D)n).foo(); // call D’s foo ((B)n).foo(); // call D’s foo class N : D { public new void foo() {} } N n = new N(); n.foo(); // call N’s foo ((D)n).foo(); // call D’s foo ((B)n).foo(); // call D’s foo

18 Parameterübergabe  in Parameter: Entspricht einer Übergabe „ByVal“. Es wird der Wert an die Methode übergeben static void Foo(int p) {++p;} Static void Main() { int x = 8; Foo(x); // Kopie von x wird übergeben Console.WriteLine(x); // x = 8 } static void Foo(int p) {++p;} Static void Main() { int x = 8; Foo(x); // Kopie von x wird übergeben Console.WriteLine(x); // x = 8 }

19 Parameterübergabe  ref Parameter: Man übergibt die Referenz an die Methode static void Foo(ref int p) {++p;} Static void Main() { int x = 8; Foo(ref x); // Referenz von x wird übergeben Console.WriteLine(x); // x = 9 } static void Foo(ref int p) {++p;} Static void Main() { int x = 8; Foo(ref x); // Referenz von x wird übergeben Console.WriteLine(x); // x = 9 }

20 Parameterübergabe  out Parameter: Erhält einen Wert von Methode zurück (Variable muss vorher nicht initialisiert werden) static void Foo(out int p) {p = 3;} Static void Main() { int x; Foo(out x); // x ist bei Übergabe nicht initialisiert Console.WriteLine(x); // x = 3 } static void Foo(out int p) {p = 3;} Static void Main() { int x; Foo(out x); // x ist bei Übergabe nicht initialisiert Console.WriteLine(x); // x = 3 }

21 Komponentenentwicklung  Was macht eine Komponente aus? Properties, Methoden, Events Design-Time und Run-Time Information Integrierte Hilfe und Dokumentation  C# hat die beste Unterstützung Keine “naming patterns“, Adapter,... Keine externen Dateien  Komponenten sind einfach zu erstellen und zu verwenden

22 Properties  Eine Mischung aus Feldern und Methoden (= smart fields)  Properties sind: für Read-Only Felder für Validierung für berechnete oder zusammengesetzte Werte Eine Ersatz für Felder in Interfaces

23 Properties Beispiel public class Button: Control { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); } public class Button: Control { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); } Button b = new Button(); b.Caption = "OK"; String s = b.Caption; Button b = new Button(); b.Caption = "OK"; String s = b.Caption;

24 Indexer  Praktische Möglichkeit, Container zu implementieren  Erweitern die Idee der Properties (= smart properties)  Erlauben Indexierung von Daten innerhalb des Objekts  Zugriff ist wie bei Arrays  Der Index selbst kann von jedem Datentyp sein a = myDict["ABC"];

25 Indexer Beispiel public class ListBox: Control { private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); } public class ListBox: Control { private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); } ListBox listBox = new ListBox(); listBox[0] = "hello"; Console.WriteLine(listBox[0]); ListBox listBox = new ListBox(); listBox[0] = "hello"; Console.WriteLine(listBox[0]);

26 Delegates  Ersatz für Funktionspointer  Objektorientiert, type-safe und gesichert  Delegates sind Objekte  Eine Instanz eines Delegates kapselt eine Methode und eine Referenz auf eine Instanz (nur wenn Methode nicht statisch)  Grundlage für Events

27 Delegates Beispiel  Definieren der Event Signatur public delegate void EventHandler(object sender, EventArgs e);  Definieren der Event- und Aufruflogik public class Button { public event EventHandler Click; protected void OnClick(EventArgs e) { if (Click != null) Click(this, e); } } public class Button { public event EventHandler Click; protected void OnClick(EventArgs e) { if (Click != null) Click(this, e); } }

28 Delegates Beispiel  Definieren und Installieren des Event Handlers public class MyForm: Form { Button okButton; public MyForm() { okButton = new Button(...); okButton.Click += new EventHandler(OkButtonClick); } void OkButtonClick(object sender, EventArgs e) { ShowMessage("You pressed the OK button"); } public class MyForm: Form { Button okButton; public MyForm() { okButton = new Button(...); okButton.Click += new EventHandler(OkButtonClick); } void OkButtonClick(object sender, EventArgs e) { ShowMessage("You pressed the OK button"); }

29 Attribute  Runtime / Design-Time Informationen für Typen und deren Elemente  Beispiele URL für Dokumentation einer Klasse Informationen für COM marshalling Wie wird in XML persistiert  Bekannte Methoden sind entkoppelt Neue Schlüsselwörter oder pragma Zusätzliche Dateien, z.B.:.IDL,.DEF  C# Lösung: Attribute

30 Attribute  Für Typen und deren Elemente  Zugriff zur Laufzeit über “reflection“  Vollständig erweiterbar Ein Attribut ist eine Klasse, die von System.Attribute abgeleitet wurde  Wird im.NET Framework oft benutzt XML, Web Services, Security, Serialization, Component Model, COM und P/Invoke Interop …

31 Beispiele Attribute  Attribute sind Klassen Abgeleitet von System.Attribute Klassenfunktionalität = Attributfunktionalität public class HelpUrlAttribute : System.Attribute { public HelpUrlAttribute(string url) { … } public string Url { get {…} } public string Tag { get {…} set {…} } } public class HelpUrlAttribute : System.Attribute { public HelpUrlAttribute(string url) { … } public string Url { get {…} } public string Tag { get {…} set {…} } }

32 Attribut verwenden  Wenn der Compiler ein Attribut sieht 1.ruft er den Konstruktor auf und übergibt die Argumente 2.falls weitere Parameter existieren, setze er das Property auf den entsprechenden Wert 3.speichert die Parameter in den Metadaten [HelpUrl(" class MyClass {} [HelpUrl(" Tag=“ctor”)] class MyClass {} [HelpUrl(" class MyClass {} [HelpUrl(" Tag=“ctor”)] class MyClass {}

33 Attribute abfragen  Mittels Reflection können Attribute abgefragt werden Type type = typeof(MyClass); foreach(object attr in type.GetCustomAttributes() ) { if ( attr is HelpUrlAttribute ) { HelpUrlAttribute ha = (HelpUrlAttribute) attr; myBrowser.Navigate( ha.Url ); } Type type = typeof(MyClass); foreach(object attr in type.GetCustomAttributes() ) { if ( attr is HelpUrlAttribute ) { HelpUrlAttribute ha = (HelpUrlAttribute) attr; myBrowser.Navigate( ha.Url ); }

34 XML Kommentare  Konsistente Art, um Dokumentation aus dem Code zu erzeugen  "///" Komentare werden exportiert  Dokumentation wird vom Compiler durch /doc: extrahiert werden  Ein „kleines“ Schema ist eingebaut

35 Bsp. XML Kommentare class XmlElement { /// /// Returns the attribute with the given name and /// namespace /// /// The name of the attribute /// /// The namespace of the attribute, or null if /// the attribute has no namespace /// /// The attribute value, or null if the attribute /// does not exist /// public string GetAttr(string name, string ns) {... } class XmlElement { /// /// Returns the attribute with the given name and /// namespace /// /// The name of the attribute /// /// The namespace of the attribute, or null if /// the attribute has no namespace /// /// The attribute value, or null if the attribute /// does not exist /// public string GetAttr(string name, string ns) {... }

36 C# und Pointer  C# unterstützt Eingebauter Typ: String Benutzerdefinierte Referenztypen Große Auswahl an Collection-Klassen Referenz- und Ausg a beparameter ( out, ref )  99% der Pointer werden nicht mehr benötigt  Dennoch sind Pointer verfügbar, wenn Programmcode mit unsafe markiert ist

37 Beispiel unsafe Code class FileStream: Stream { int handle; public unsafe int Read(byte[] buffer, int index, int count) { int n = 0; fixed (byte* p = buffer) { ReadFile(handle, p + index, count, &n, null); } return n; } [dllimport("kernel32", SetLastError=true)] static extern unsafe bool ReadFile(int hFile, void* lpBuffer, int nBytesToRead, int* nBytesRead, Overlapped* lpOverlapped); } class FileStream: Stream { int handle; public unsafe int Read(byte[] buffer, int index, int count) { int n = 0; fixed (byte* p = buffer) { ReadFile(handle, p + index, count, &n, null); } return n; } [dllimport("kernel32", SetLastError=true)] static extern unsafe bool ReadFile(int hFile, void* lpBuffer, int nBytesToRead, int* nBytesRead, Overlapped* lpOverlapped); }

38 Fragen? Uff...

39 Glossar  Boxing/Unboxing: Die Boxing- und Unboxing-Operationen sind zentrale Konzepte im C# Typsystem. Sie verbinden die sogenannten value-types und reference-types miteinander indem sie es ermöglichen, jeden value-type in einen Wert vom Typ Object umzuwandeln und umgekehrt. Dies ermöglicht, dass jeder Wert als Wert vom Typ object gesehen werden kann.  Garbage Collection: Automatisches Speichermanagement entbindet den Programmierer davon, Speicher explizit freizugeben. Die Programmumgebung räumt automatisch den nicht verwendeten Speicher auf, um ihn später wieder zu nutzen. Dies wird als Garbage Collection bezeichnet.  Interface: Ein Interface ist eine Art Vertrag zwischen einer Klasse, die das Interface implementiert, und dem Programmcode der diese Klasse nutzt. Eine Schnittstelle legt nicht nur fest, welche Funktionen verfügbar sind, sondern auch, was das Objekt tut, wenn die Funktionen aufgerufen werden  Interoperabilität: Die Fähigkeit eines oder mehrer Systeme, Informationen auszutauschen und diese zu verwenden  Multiple Interface Implementation: (Auch multiple interface inheritance) Ein Konzept in der Objektorientierten Programmierung um Multiple Inheritance zu vermeiden, indem zwar nur von einer Klasse abgeleitet werden kann aber mehrere Interfaces von einer Klasse implementiert werden. Hierdurch wird ebenfalls Polymorphie erreicht.  Single Inheritance: Die Tatsache, daß eine Klasse nur von einer einzigen Basisklasse abgeleitet werden kann.  XML: Ex(tensible) M(arkup) L(anguage) ist ein W3C ( Standard. Dieser Standard beschreibt ein universelles Format zur Beschreibung von strukturierten Dokumenten und Daten im Web