Neue Features in C# 2.0



Ähnliche Dokumente
Vererbung & Schnittstellen in C#

Delegatesund Ereignisse

Programmierung in C. Grundlagen. Stefan Kallerhoff

Besonderheiten von C#

Java: Vererbung. Teil 3: super()

Studentische Lösung zum Übungsblatt Nr. 7

Programmieren in Java

Objektorientierte Programmierung

Die Programmiersprache C99: Zusammenfassung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

WPF Steuerelemente Listbox, ComboBox, ListView,

Große Übung Praktische Informatik 1

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Zählen von Objekten einer bestimmten Klasse

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Innere Klassen in Java

Algorithmen und Datenstrukturen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Java- Programmierung

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Einführung in die Programmierung

Programmierkurs Java

Objektorientierte Programmierung

Typumwandlungen bei Referenztypen

Testen mit JUnit. Motivation

5. Tutorium zu Programmieren

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Einführung in die Programmierung

Javakurs zu Informatik I. Henning Heitkötter

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Ein anonymer-methodenausdruck definiert eine anonyme Methode und ergibt einen Wert, der auf diese Methode verweist. primärer-nicht-array-ausdruck:

Objektorientierte Programmierung. Kapitel 12: Interfaces

Deklarationen in C. Prof. Dr. Margarita Esponda

Ich liebe Java && Ich liebe C# Rolf Borst

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Design by Contract with JML

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Modellierung und Programmierung 1

2A Basistechniken: Weitere Aufgaben

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

U08 Entwurfsmuster (II)

C# im Vergleich zu Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Technische Dokumentation SilentStatistikTool

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Java Kurs für Anfänger Einheit 5 Methoden

Computeranwendung und Programmierung (CuP)

Java Einführung Collections

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

SEP 114. Design by Contract

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Erwin Grüner

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Rundung und Casting von Zahlen

Vorkurs C++ Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Remote Method Invocation

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Name: Klausur Programmierkonzepte SS 2011

C/C++ Programmierung

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Einführung in Javadoc

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

3 Objektorientierte Konzepte in Java

IT-Basics 2. DI Gerhard Fließ

Systemvoraussetzung < zurück weiter >

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Klassenbeziehungen & Vererbung

Einführung in die Programmierung

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Test-Driven Design: Ein einfaches Beispiel

1 Polymorphie (Vielgestaltigkeit)

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Stand: Adressnummern ändern Modulbeschreibung

Themen. Web Service - Clients. Kommunikation zw. Web Services

ITG RKSVNet - Webservice Signierung von Belegen via Internet

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

2. Semester, 2. Prüfung, Lösung

Software Engineering Klassendiagramme Assoziationen

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Javakurs 2013 Objektorientierung

Programmierung für Mathematik (HS13)

Objektorientierte Programmierung mit C++ Vector und List

Dokumentation des Projektes Tic Tac Toe

5.5.8 Öffentliche und private Eigenschaften

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

1 Vom Problem zum Programm

Java Einführung Abstrakte Klassen und Interfaces

Transkript:

Neue Features in C# 2.0 (gekürzt) Generische Typen Iteratoren Vereinfachte Delegate-Erzeugung Anonyme Methoden Partielle Klassen Sonstiges University of Linz, Institute for System Software, 2004 published under the Microsoft Curriculum License 1

Iteratoren 2

Iteratoren bisher foreach-schleife kann für Klassen verwendet werden, die IEnumerable implementieren class MyClass: IEnumerable { public IEnumerator GetEnumerator() { return new MyEnumerator(); interface IEnumerable { IEnumerator GetEnumerator(); class MyEnumerator: IEnumerator { public object Current { get { public bool MoveNext() { public void Reset() { MyClass x = new MyClass(); foreach (object obj in x) aufwendig!! 3

Iterator-Methode class MyClass { string first = "first"; string second = "second"; string third = "third"; public IEnumerator GetEnumerator() { yield return first; yield return second; yield return third; MyClass x = new MyClass(); foreach (string s in x) Console.Write(s + " "); // liefert "first second third" Merkmale einer Iteratormethode 1. Hat die Signatur public IEnumerator GetEnumerator 2. Anweisungsteil enthält zumindest eine yield-anweisung Funktionsweise einer Iteratormethode 1. Liefert eine Folge von Werten 2. foreach-anweisung durchläuft diese Werte Achtung: MyClass muß IEnumerable gar nicht implementieren! Statt IEnumerator sollte besser IEnumerator<string> verwendet werden (kein Cast nötig) IEnumerator<T> ist in System.Collections.Generic 4

Was geschieht hinter den Kulissen? liefert ein Objekt der folgenden Klasse public IEnumerator<int> GetEnumerator() { try { finally { class _Enumerator : IEnumerator<int> { int Current { get { bool MoveNext() { void Dispose() { wird übersetzt in foreach (int x in list) Console.WriteLine(x); IEnumerator<int> _e = list.getenumerator(); try { while (_e.movenext()) Console.WriteLine(_e.Current); finally { if (_e!= null) _e.dispose(); MoveNext läuft bis zum nächsten yield Dispose ruft einen eventuell vorhandenen finally-block in der Iterator-Methode auf 5

yield-anweisung 2 Arten yield return expr; liefert einen Wert an die foreach-schleife darf nur in einer Iterator-Methode vorkommen Typ von expr muß kompatibel sein zu - T (wenn IEnumerator<T>) - object (sonst) yield break; bricht die Iteration ab darf nur in einer Iterator-Methode vorkommen 6

Spezifische Iteratoren class MyList { int[] data = ; public IEnumerator<int> GetEnumerator() { for (int i = 0; i < data.length; i++) yield return data[i]; public IEnumerable<int> Range(int from, int to) { if (to > data.length) to = data.length; for (int i = from; i < to; i++) yield return data[i]; public IEnumerable<int> Downwards { get { for (int i = data.length - 1; i >= 0; i--) yield return data[i]; Standard-Iterator Spezifischer Iterator als Methode beliebiger Name und Parameterliste Rückgabetyp IEnumerable! muß eine yield-anweisung enthalten Spezifischer Iterator als Property beliebiger Name Rückgabetyp IEnumerable! muß eine yield-anweisung enthalten MyList list = new MyList(); foreach (int x in list) Console.WriteLine(x); foreach (int x in list.range(2, 7)) Console.WriteLine(x); foreach (int x in list.downwards) Console.WriteLine(x); 7

Vereinfachte Delegate-Erzeugung 10

Vereinfachte Delegate-Erzeugung delegate void Printer(string s); void Foo(string s) { Console.WriteLine(s); Printer print; print = new Printer(this.Foo); print = this.foo; print = Foo; Vereinfachte Form: Delegate-Typ wird aus dem Typ der linken Seite abgeleitet delegate double Function(double x); double Foo(double x) { return x * x; Printer print = Foo; Function square = Foo; weist Foo(string s) zu weist Foo(double x) zu Überladung kann durch Typ der linken Seite aufgelöst werden 11

Anonyme Methoden 12

Normale Delegierer delegate void Visitor(Node p); class List { Node[] data = ; public void ForAll(Visitor visit) { for (int i = 0; i < data.length; i++) visit(data[i]); class C { int sum = 0; void SumUp(Node p) { sum += p.value; void Print(Node p) { Console.WriteLine(p.value); void Foo() { List list = new List(); list.forall(sumup); list.forall(print); erfordern Deklaration einer benannten Methode (SumUp, Print, ) SumUp und Print können nicht auf lokale Variablen von Foo zugreifen => sum muß global deklariert werden 13

Anonyme Methoden delegate void Visitor(Node p); class C { void Foo() { List list = new List(); int sum = 0; list.forall(delegate (Node p) { Console.WriteLine(p.value); ); list.forall(delegate (Node p) { sum += p.value; ); formale Parameter Code class List { public void ForAll(Visitor visit) { Methodencode wird in-place angegeben keine Deklaration einer benannten Methode nötig aufgerufene Methode kann auf lokale Variable sum zugreifen return beendet anonyme Methode, nicht die äußere Methode Restriktionen anonyme Methoden dürfen keine formalen Parameter der Art params T[] enthalten anonyme Methoden dürfen nicht an object zugewiesen werden anonyme Methoden dürfen keine ref- und out-parameter äußerer Methoden ansprechen 14

Weitere Vereinfachung delegate void EventHandler (object sender, EventArgs arg); Button button = new Button(); Button.Click += delegate (object sender, EventArgs arg) { Console.WriteLine("clicked"); ; Kann vereinfacht werden zu Button.Click += delegate { Console.WriteLine("clicked"); ; Formale Parameter können weggelassen werden, wenn sie im Methodenrumpf nicht benutzt werden Restriktion Formale Parameter dürfen nur dann weggelassen werden, wenn der Delegate-Typ keine out-parameter hat 15

Äußere Variablen Wenn anonyme Methoden auf Variablen der umgebenden Methode zugreifen, werden diese in ein Hilfsobjekt ausgelagert (capturing). delegate int Adder(); class Test { static Adder CreateAdder() { int x = 0; return delegate { x++; return x; ; static void Main() { Adder add = CreateAdder(); Console.WriteLine(add()); Console.WriteLine(add()); Console.WriteLine(add()); Hilfsobjekt Delegate 23 10 x++; return x; add Das Hilfsobjekt lebt so lange wie das Delegate-Objekt Ausgabe: 1 2 3 16

Sonstiges 17

Statische Klassen Dürfen nur statische Felder und Methoden enthalten static class Math { public static double Sin(double x) { public static double Cos(double x) { Zweck bessere Dokumentation, dass die Klasse nur statische Methoden enthält Compiler kann sicherstellen, dass man in keiner der Methoden static vergessen hat Math darf nicht als Typ verwendet werden 18