static void Main(string[] args) { MeinDelegate del = new MeinDelegate(MeineMethode); string ergebnis = del.Invoke(5, 7.9); Console.WriteLine(ergebnis); Console.ReadLine(); }
static void Main(string[] args) { //Zuweisung der Addiere()-Methode zur einer Variablen vom Typ MyDelegate MeinDelegate delegateVariable = new MeinDelegate(Addiere); //Ausführung der Delegate-Variablen int ergebnis = delegateVariable(12, 45); Console.WriteLine(ergebnis); //Neuzuweisung der Variable (Kurzschreibweise) delegateVariable = Subtrahiere; ergebnis = delegateVariable(12, 45); Console.WriteLine(ergebnis); //Zuweisung einer zweiten Methode zur Delegate-Variablen delegateVariable += Addiere; //Bei Ausführung einer Delegate-Variablen werden alle referenzierten Methoden in der Reihenfolge ihrer Zuweisung ausgeführt. ///Nur die letzte Methode gibt einen Rückgabewert zurück ergebnis = delegateVariable(12, 45); Console.WriteLine(ergebnis); //Erstellung und Ausgabe einer Liste der in der Variablen gespeicherten Methode var Methodenliste = delegateVariable.GetInvocationList().ToList(); foreach (var item in Methodenliste) { Console.WriteLine(item.Method); Debug.Print(item.Method.ToString()); } //Löschen einer Referenz aus der Variablen delegateVariable -= Addiere; //Löschen aller Zuweisungen delegateVariable = null; //FUNC<> / ACTION<> /PREDICATE<> sind die von C# vordefinierten Delegate-Typen Func <int, int, int> meinFunc = Addiere; ergebnis = meinFunc(12, 45); Console.WriteLine(ergebnis); FühreAus(meinFunc); FühreAus(Addiere); List <string> städteListe = new List <string>() { "Berlin", "München", "Köln", "Bonn" }; //ANONYME METHODEN sind Methoden, welche nicht mit Kopf und Körper geschrieben stehen, sondern nur innerhalb von Delegate-Variablen ///existieren //Übergabe einer Methode an eine andere Methode string gefundeneStadt = städteListe.Find(SucheStadtMitM); Console.WriteLine(gefundeneStadt); //Übergabe der Methode als anonyme Methode gefundeneStadt = städteListe.Find( delegate(string stadt) { return(stadt.StartsWith("M")); }); //Übergabe der anonymen Methode in LAMBDA-Schreibweise (Lang und Kurz) gefundeneStadt = städteListe.Find((string stadt) => { return(stadt.StartsWith("M")); }); gefundeneStadt = städteListe.Find(stadt => stadt.StartsWith("M")); //Weiteres Bsp für die Übergabe einer anonymen Methode in Lambda (Sortierung der Einträge nach dem ersten Buchstaben) städteListe = städteListe.OrderBy(stadt => stadt[0]).ToList(); foreach (var item in städteListe) { Console.WriteLine(item); } //weiteres Bsp der Lambda-Schreibweise (Methode empfängt zwei int und gibt deren Summe als String zurück) Func <int, int, string> funky = (x, y) => (x + y).ToString(); Console.ReadKey(); }
static void Main(string[] args) { //Zuweisung der Addiere()-Methode zur einer Variablen vom Typ MyDelegate MeinDelegate delegateVariable = new MeinDelegate(Addiere); //Ausführung der Delegate-Variablen int erg = delegateVariable(12, 45); Console.WriteLine(erg); //Neuzuweisung der Variablen mittels Kurzschreibweise delegateVariable = Subtrahiere; erg = delegateVariable(12, 45); Console.WriteLine(erg); //Zuweisung einer zweiten Methode zur Delegate-Variablen. Die Ausführung erfolgt in der Reihenfolge der Zuweisung. Nur der Rückgabewert ///der zuletzt ausgeführten Methode wird an den Aufrufer zurückgegeben. delegateVariable += Addiere; erg = delegateVariable(12, 45); Console.WriteLine(erg); //Erstellen einer Liste der in der Variablen gespeicherten Methode var delegateMethoden = delegateVariable.GetInvocationList().ToList(); //Ausgabe dieser Liste foreach (var item in delegateMethoden) { Console.WriteLine(item.Method); } delegateVariable -= Subtrahiere; //FUNC<> / ACTION<> /PREDICATE<> sind die von C# vordefinierten Delegate-Typen Func <int, int, int> myFunc = Addiere; myFunc += Subtrahiere; erg = myFunc(12, 23); Console.WriteLine(erg); FühreAus(Addiere); List <string> stringListe = new List <string>(); stringListe.Add("Hallo"); stringListe.Add("Ciao"); stringListe.Add("Moin"); stringListe.Add("Guten Morgen"); //ANONYME METHODEN sind Methoden, welche nicht mit Kopf und Körper geschrieben stehen, sondern nur innerhalb von Delegate-Variablen ///existieren //Übergabe einer Methode an eine andere Methode string ergebnis = stringListe.Find(SucheWortMitM); Console.WriteLine(ergebnis); //Übergabe der Methode als anonyme Methode ergebnis = stringListe.Find(delegate(string input) { return(input[0].Equals('M')); }); //Übergabe der anonymen Methode in LAMBDA-Schreibweise ergebnis = stringListe.Find((string input) => { return(input[0].Equals('M')); }); //Übergabe der anonymen Methode in vollständig gekürzter LAMBDA-Schreibweise ergebnis = stringListe.Find(input => input[0].Equals('M')); Console.ReadKey(); }
//Funktion mit Delegate-Übergabeparameter public static void FühreAus(MeinDelegate dele) { dele(45, 45); }
public static void FühreAus(MeinDelegate method) { Console.WriteLine(10 + method(10, 78)); }