Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

«Delegierter» Methoden Schablone Funktionszeiger

Ähnliche Präsentationen


Präsentation zum Thema: "«Delegierter» Methoden Schablone Funktionszeiger"—  Präsentation transkript:

1 «Delegierter» Methoden Schablone Funktionszeiger
Delegates «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein

2 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

3 Definition

4 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Definition Ein Delegat ist ein Typ, der eine Referenz (Zeiger) auf eine Methode beschreibt. Delegate entsprechen den Funktionszeigern in C++, sie sind jedoch typsicher und geschützt. Delegate ermöglichen es, Methoden als Parameter zu übergeben. Delegate können miteinander verkettet werden (nacheinander ausgeführt). Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

5 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Hinweis Delegate bilden die Grundlage für Ereignisse (wie z.B. für Benutzer-Eingaben). Durch das Verketten von Delegaten können mehrere Methoden an ein Ereignis angebunden werden. Alle miteinander verketteten Delegate werden gemeinsam (nacheinander) aufgerufen. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

6 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Deklaration Die Deklaration von einem Delegat sieht ähnlich aus wie eine Methodensignatur. Sie benötigt das Schlüsselwort delegate Sie hat einen Rückgabewert und eine beliebige Anzahl Parameter: <sichtbarkeit> delegate <Resultat-Typ> <Delegat-Name> (<Parameter-Liste>) Zwei Beispiele: public delegate void meinDelegat1(int n, string message); public delegate int meinDelegat2(object m, double d); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

7 Benutzen von Delegates
Der Einsatz von Delegates erfolgt in drei Schritten. Deklaration des Delegate public delegate int meinDelegate( string s, int i ) Definieren des Delegate-Objekt mit der entsprechenden Methode meinDelegate delegateName = methode; Aufruf des Delegate-Objekts und dadurch indirekter Aufruf der Methode int resultat = delegateName("Eingabe", 17); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

8 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Erstes einfaches Beispiel: Verschiedene Ausgabe-Funktionen Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

9 Ein C# Beispiel: Die Klasse Ausgabe
Die Klasse Ausgabe hat zwei verschiedene Methoden zum Schreiben (auf die Konsole und in eine Datei) mit gleicher Signatur. using System; using System.IO; class Ausgabe { // Schreiben auf die Konsole public static void WriteToScreen(string s) { Console.WriteLine("Ausgabe: {0}", s); } //Schreiben in die Datei Test.txt const string fileName = "C:\\tmp\\Test.txt"; public static void WriteToFile(string s) { File.AppendAllText(fileName, s); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

10 Ein C# Beispiel: Die Klasse Ausgabe
// Deklaration des Delegaten mit gleicher Signatur // wie die beiden Methoden WriteToScreen und WriteToFile) public delegate void SchreibeDelegate(string s); Die static Bezeichnung wird weggelassen. Das Schlüsselwort delegate bezeichnet das Delegat. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

11 Ein C# Beispiel: Das Hauptprogramm
public delegate void SchreibeDelegate(string s); //Benutze das Delegat static void Main(string[] args) { SchreibeDelegate psDelegate; string text = "Hier ist mein Text für dieses Beispiel"; //Zuweisen und ausführen der Methode «Schreibe auf den Schirm» psDelegate = WriteToScreen; psDelegate(text); // Zuweisen und ausführen der Methode «Schreibe ins File» psDelegate = WriteToFile; } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

12 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Zweites Beispiel Rechner Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

13 Ein C# Beispiel: Die Klasse Rechner
Die Klasse Rechner hat vier verschiedene Rechnungs-Methoden mit gleicher Signatur. class Rechner { public static double Addition(double x, double y) { return x + y; } public static double Subtraktion(double x, double y) { return x - y; } public static double Multiplikation(double x, double y) { return x * y; } public static double Division(double x, double y) { return x / y; } } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

14 Ein C# Beispiel: Das Hauptprogramm
class Program { // Deklaration des Delegate  gleiche Signatur wie die Methoden von Rechner public delegate double RechnungsOperation(double d1, double d2); static void Main(string[] args) // Initialisierung des Delegats RechnungsOperation berechne = Rechner.Addition; do // Einlesen der Operation Console.Write("Operation: +, -, * oder / "); char wahl = Console.ReadLine()[0]; Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

15 Ein C# Beispiel: Das Hauptprogramm
// Zuweisen der ausgewählten Operation  der richtigen Methode switch (wahl) { case '+': berechne = Rechner.Addition; break; case '-': berechne = Rechner.Subtraktion; break; case '*': berechne = Rechner.Multiplikation; break; case '/': berechne = Rechner.Division; break; } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

16 Ein C# Beispiel: Das Hauptprogramm
// Aufruf der Operation '+', '-', '*' oder '/' über das Delegat double resultat = berechne(input1, input2); // Ausgabe des Resultats Rechner.Ausgabe(wahl, x, y, resultat); Console.WriteLine("Beenden mit q, weiter mit w: "); } while (Console.ReadLine() != "q"); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

17 Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012
Verwenden von Delegaten als Parameter Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

18 Ein C# Beispiel: Die Methode Ausgabe
Wir wählen nochmals das ursprüngliche Delegat RechnungsOperation: public delegate double RechnungsOperation(double d1, double d2); Die Methode Ausgabe hat als vierten Parameter eine Rechnungs-Operation (also ein Delegat) public static void Ausgabe(double d1, double d2, char c, RechnungsOperation berechne) { } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

19 Ein C# Beispiel: Die Methode Ausgabe
Die so übergebene Funktion kann dann innerhalb der Methode verwendet werden: public static void Ausgabe(double d1, double d2, char c, RechnungsOperation berechne) { Console.WriteLine("{0} {1} {2} = {3}\n", d1, c, d2, berechne(d1, d2)); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

20 Beispiel Geometrische Figuren

21 Wählen der Zeichenfunktion
Das Geometrische Objekt, welches gezeichnet werden soll, soll durch Knopfdruck ausgewählt werden können.

22 Auswählen der Zeichen Funktion
public delegate void ZeichnenDelegate(MainWindow window); public ZeichnenDelegate WaehleFigur(string s) { GeomFigur gf = new GeomFigur(); ZeichnenDelegate zeichne; switch (s) case "Rechteck": zeichne = gf.ZeichneRechteck; break; case "Kreis": zeichne = gf.ZeichneKreis; break; case "Ellipse": zeichne = gf.ZeichneEllipse; break; case "Dreieck": zeichne = gf.ZeichneDreieck; break; default: zeichne = gf.ZeichnePolygon;break; } return zeichne; Definition des Delegate WaehleFigur hat ein Delegate als Rückgabewert. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

23 Zeichenfunktionen müssen delegate Definiton «erfüllen»
public class GeomFigur { public void ZeichneRechteck(MainWindow window) Rechteck r = new Rechteck(s1); r.Zeichne(window); } public void ZeichneEllipse(MainWindow window) Ellipse r = new Ellipse(s1); . . . public delegate void ZeichnenDelegate(MainWindow window); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

24 Verwenden des Delegate
public delegate void ZeichnenDelegate(MainWindow window); public void Main(MainWindow window, string s) { ZeichnenDelegate zeichne = WaehleFigur(s); zeichne(window); } public ZeichnenDelegate WaehleFigur(string s) GeomFigur gf = new GeomFigur(); ZeichnenDelegate zeichne; switch (s) case "Rechteck": zeichne = gf.ZeichneRechteck; break; case "Kreis": zeichne = gf.ZeichneKreis; break; return zeichne; Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012


Herunterladen ppt "«Delegierter» Methoden Schablone Funktionszeiger"

Ähnliche Präsentationen


Google-Anzeigen